ETH Price: $3,607.98 (+9.29%)

Token

MercurityNFT (MERNFT)
 

Overview

Max Total Supply

5,500 MERNFT

Holders

53

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
witt.eth
0xefdee53249ef08013d31aeac2a738912197b7b5e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MercurityNFT

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 9 of 12: MercurityNFT.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;

import "./ERC1155Tradable.sol";

/**
 * @title MercurityNFT
 * @dev Mercurity NFT
 */
contract MercurityNFT is ERC1155Tradable {
    //  * @param _proxyRegistryAddress The address of the OpenSea/Wyvern proxy registry
    //  *                              On mainnet: "0xa5409ec958c83c3f309868babaca7c86dcb077c1"
    constructor(address _proxyRegistryAddress) public ERC1155Tradable("MercurityNFT", "MERNFT", _proxyRegistryAddress) {
		  _setBaseMetadataURI("https://nft.mercurity.finance/");
	  }
  
    function contractURI() public pure returns (string memory) {
		  return "https://nft.mercurity.finance/Mercurity.json";
	  }

}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

/**
 * Copyright 2018 ZeroEx Intl.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * Utility library of inline functions on addresses
 */
library Address {

  // Default hash for EOA accounts returned by extcodehash
  bytes32 constant internal ACCOUNT_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract.
   * @param _address address of the account to check
   * @return Whether the target address is a contract
   */
  function isContract(address _address) internal view returns (bool) {
    bytes32 codehash;

    // 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 or if it has a non-zero code hash or account hash
    assembly { codehash := extcodehash(_address) }
    return (codehash != 0x0 && codehash != ACCOUNT_HASH);
  }

}

File 2 of 12: ERC1155.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./IERC1155.sol";
import "./IERC1155TokenReceiver.sol";
import "./IERC165.sol";
import "./SafeMath.sol";
import "./Address.sol";

/**
 * @dev Implementation of Multi-Token Standard contract
 */
contract ERC1155 is IERC165 {
  using SafeMath for uint256;
  using Address for address;


  /***********************************|
  |        Variables and Events       |
  |__________________________________*/

  // onReceive function signatures
  bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
  bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

  // Objects balances
  mapping (address => mapping(uint256 => uint256)) internal balances;

  // Operator Functions
  mapping (address => mapping(address => bool)) internal operators;

  // Events
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Public Transfer Functions     |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public
  {
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
    require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");
    // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations

    _safeTransferFrom(_from, _to, _id, _amount);
    _callonERC1155Received(_from, _to, _id, _amount, _data);
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
   */
  function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public
  {
    // Requirements
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR");
    require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT");

    _safeBatchTransferFrom(_from, _to, _ids, _amounts);
    _callonERC1155BatchReceived(_from, _to, _ids, _amounts, _data);
  }


  /***********************************|
  |    Internal Transfer Functions    |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   */
  function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
    internal
  {
    // Update balances
    balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount
    balances[_to][_id] = balances[_to][_id].add(_amount);     // Add amount

    // Emit event
    emit TransferSingle(msg.sender, _from, _to, _id, _amount);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
   */
  function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Check if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(msg.sender, _from, _id, _amount, _data);
      require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE");
    }
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   */
  function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH");

    // Number of transfer to execute
    uint256 nTransfer = _ids.length;

    // Executing all transfers
    for (uint256 i = 0; i < nTransfer; i++) {
      // Update storage balance of previous bin
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit event
    emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
   */
  function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    // Pass data if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data);
      require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
    }
  }


  /***********************************|
  |         Operator Functions        |
  |__________________________________*/

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved)
    external
  {
    // Update operator status
    operators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return isOperator if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator)
    public view virtual returns (bool isOperator)
  {
    return operators[_owner][_operator];
  }


  /***********************************|
  |         Balance Functions         |
  |__________________________________*/

  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id)
    public view returns (uint256)
  {
    return balances[_owner][_id];
  }

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view returns (uint256[] memory)
  {
    require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH");

    // Variables
    uint256[] memory batchBalances = new uint256[](_owners.length);

    // Iterate over each owner and token ID
    for (uint256 i = 0; i < _owners.length; i++) {
      batchBalances[i] = balances[_owners[i]][_ids[i]];
    }

    return batchBalances;
  }


  /***********************************|
  |          ERC165 Functions         |
  |__________________________________*/

  /*
   * INTERFACE_SIGNATURE_ERC165 = bytes4(keccak256("supportsInterface(bytes4)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;

  /*
   * INTERFACE_SIGNATURE_ERC1155 =
   * bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")) ^
   * bytes4(keccak256("safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)")) ^
   * bytes4(keccak256("balanceOf(address,uint256)")) ^
   * bytes4(keccak256("balanceOfBatch(address[],uint256[])")) ^
   * bytes4(keccak256("setApprovalForAll(address,bool)")) ^
   * bytes4(keccak256("isApprovedForAll(address,address)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26;

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID  The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID` and
   */
  function supportsInterface(bytes4 _interfaceID) external override view returns (bool) {
    if (_interfaceID == INTERFACE_SIGNATURE_ERC165 ||
        _interfaceID == INTERFACE_SIGNATURE_ERC1155) {
      return true;
    }
    return false;
  }

}


File 3 of 12: ERC1155Metadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata {

  // URI's default URI prefix
  string internal baseMetadataURI;
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Metadata Public Function s    |
  |__________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   *      Token IDs are assumed to be represented in their hex format in URIs
   * @return URI string
   */
  function uri(uint256 _id) public view virtual returns (string memory) {
    return string(abi.encodePacked(baseMetadataURI, _uint2str(_id),".json"));
  }


  /***********************************|
  |    Metadata Internal Functions    |
  |__________________________________*/

  /**
   * @notice Will emit default URI log event for corresponding token _id
   * @param _tokenIDs Array of IDs of tokens to log default URI
   */
  function _logURIs(uint256[] memory _tokenIDs) internal {
    string memory baseURL = baseMetadataURI;
    string memory tokenURI;

    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json"));
      emit URI(tokenURI, _tokenIDs[i]);
    }
  }

  /**
   * @notice Will emit a specific URI log event for corresponding token
   * @param _tokenIDs IDs of the token corresponding to the _uris logged
   * @param _URIs    The URIs of the specified _tokenIDs
   */
  function _logURIs(uint256[] memory _tokenIDs, string[] memory _URIs) internal {
    require(_tokenIDs.length == _URIs.length, "ERC1155Metadata#_logURIs: INVALID_ARRAYS_LENGTH");
    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      emit URI(_URIs[i], _tokenIDs[i]);
    }
  }

  /**
   * @notice Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
    baseMetadataURI = _newBaseMetadataURI;
  }


  /***********************************|
  |    Utility Internal Functions     |
  |__________________________________*/

  /**
   * @notice Convert uint256 to string
   * @param _i Unsigned integer to convert to string
   */
  function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
    if (_i == 0) {
      return "0";
    }

    uint256 j = _i;
    uint256 ii = _i;
    uint256 len;

    // Get number of bytes
    while (j != 0) {
      len++;
      j /= 10;
    }

    bytes memory bstr = new bytes(len);
    uint256 k = len - 1;

    // Get each individual ASCII
    while (ii != 0) {
      bstr[k--] = byte(uint8(48 + ii % 10));
      ii /= 10;
    }

    // Convert to string
    return string(bstr);
  }

}

File 4 of 12: ERC1155MintBurn.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./ERC1155.sol";

/**
 * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume
 *      a parent contract to be executed as they are `internal` functions
 */
contract ERC1155MintBurn is ERC1155 {


  /****************************************|
  |            Minting Functions           |
  |_______________________________________*/

  /**
   * @notice Mint _amount of tokens of a given id
   * @param _to      The address to mint tokens to
   * @param _id      Token id to mint
   * @param _amount  The amount to be minted
   * @param _data    Data to pass if receiver is contract
   */
  function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Add _amount
    balances[_to][_id] = balances[_to][_id].add(_amount);

    // Emit event
    emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

    // Calling onReceive method if recipient is contract
    _callonERC1155Received(address(0x0), _to, _id, _amount, _data);
  }

  /**
   * @notice Mint tokens for each ids in _ids
   * @param _to       The address to mint tokens to
   * @param _ids      Array of ids to mint
   * @param _amounts  Array of amount of tokens to mint per id
   * @param _data    Data to pass if receiver is contract
   */
  function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nMint = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nMint; i++) {
      // Update storage balance
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

    // Calling onReceive method if recipient is contract
    _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data);
  }


  /****************************************|
  |            Burning Functions           |
  |_______________________________________*/

  /**
   * @notice Burn _amount of tokens of a given token id
   * @param _from    The address to burn tokens from
   * @param _id      Token id to burn
   * @param _amount  The amount to be burned
   */
  function _burn(address _from, uint256 _id, uint256 _amount)
    internal
  {
    //Substract _amount
    balances[_from][_id] = balances[_from][_id].sub(_amount);

    // Emit event
    emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
  }

  /**
   * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair
   * @param _from     The address to burn tokens from
   * @param _ids      Array of token ids to burn
   * @param _amounts  Array of the amount to be burned
   */
  function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nBurn = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nBurn; i++) {
      // Update storage balance
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
  }

}

File 5 of 12: ERC1155Tradable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./Ownable.sol";
import "./ERC1155MintBurn.sol";
import "./ERC1155Metadata.sol";
import "./Strings.sol";

contract OwnableDelegateProxy { }

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

/**
 * @title ERC1155Tradable
 * ERC1155Tradable - ERC1155 contract that whitelists an operator address, has create and mint functionality, and supports useful standards from OpenZeppelin,
  like _exists(), name(), symbol(), and totalSupply()
 */
contract ERC1155Tradable is ERC1155MintBurn, ERC1155Metadata, Ownable {
  using Strings for string;
  
  address proxyRegistryAddress;
  uint256 private _currentTokenID = 0;
  mapping (uint256 => address) public creators;
  mapping (uint256 => uint256) private tokenSupply;
  mapping (uint256 => uint256) public tokenMaxSupply;

  // Contract name
  string public name;
  // Contract symbol
  string public symbol;

  /**
   * @dev Require msg.sender to be the creator of the token id
   */
  modifier creatorOnly(uint256 _id) {
    require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED");
    _;
  }

  /**
   * @dev Require msg.sender to own more than 0 of the token id
   */
  modifier ownersOnly(uint256 _id) {
    require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
    _;
  }

  constructor(
    string memory _name,
    string memory _symbol,
    address _proxyRegistryAddress
  ) public {
    name = _name;
    symbol = _symbol;
    proxyRegistryAddress = _proxyRegistryAddress;
  }

  function uri(
    uint256 _id
  ) public view override returns (string memory) {
    require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
    return Strings.strConcat(
      baseMetadataURI,
      Strings.uint2str(_id),
      ".json"
    );
  }

  /**
    * @dev Returns the total quantity for a token ID
    * @param _id uint256 ID of the token to query
    * @return amount of token in existence
    */
  function totalSupply(
    uint256 _id
  ) public view returns (uint256) {
    return tokenSupply[_id];
  }

  /**
   * @dev Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function setBaseMetadataURI(
    string memory _newBaseMetadataURI
  ) public onlyOwner {
    _setBaseMetadataURI(_newBaseMetadataURI);
  }

  /**
    * @dev Creates a new token type and assigns _initialSupply to an address
    * NOTE: remove onlyOwner if you want third parties to create new tokens on your contract (which may change your IDs)
    * @param _initialOwner address of the first owner of the token
    * @param _initialSupply amount to supply the first owner
    * @param _uri Optional URI for this token type
    * @param _data Data to pass if receiver is contract
    * @return The newly created token ID
    */
  function create(
    address _initialOwner,
    uint256 _initialSupply,
    uint256 _maxSupply,
    string calldata _uri,
    bytes calldata _data
  ) external onlyOwner returns (uint256) {
    require(_initialSupply <= _maxSupply, "Initial supply cannot be more than max supply");

    uint256 _id = _getNextTokenID();

    _incrementTokenTypeId();

    creators[_id] = msg.sender;

    if (bytes(_uri).length > 0) {
      emit URI(_uri, _id);
    }

    if (_initialSupply != 0) _mint(_initialOwner, _id, _initialSupply, _data);

    tokenSupply[_id] = _initialSupply;
    tokenMaxSupply[_id] = _maxSupply;
    return _id;
  }

  /**
    * @dev Mints some amount of tokens to an address
    * @param _to          Address of the future owner of the token
    * @param _id          Token ID to mint
    * @param _quantity    Amount of tokens to mint
    * @param _data        Data to pass if receiver is contract
    */
  function mint(
    address _to,
    uint256 _id,
    uint256 _quantity,
    bytes memory _data
  ) public creatorOnly(_id) {
    require(tokenSupply[_id].add(_quantity) <= tokenMaxSupply[_id],"over max supply");
    _mint(_to, _id, _quantity, _data);
    tokenSupply[_id] = tokenSupply[_id].add(_quantity);
  }

  /**
    * @dev Mint tokens for each id in _ids
    * @param _to          The address to mint tokens to
    * @param _ids         Array of ids to mint
    * @param _quantities  Array of amounts of tokens to mint per id
    * @param _data        Data to pass if receiver is contract
    */
  function batchMint(
    address _to,
    uint256[] memory _ids,
    uint256[] memory _quantities,
    bytes memory _data
  ) public {
    for (uint256 i = 0; i < _ids.length; i++) {
      uint256 _id = _ids[i];
      require(creators[_id] == msg.sender, "ERC1155Tradable#batchMint: ONLY_CREATOR_ALLOWED");
      uint256 quantity = _quantities[i];
      require(tokenSupply[_id].add(_quantities[i]) <= tokenMaxSupply[_id],"over max supply");
      tokenSupply[_id] = tokenSupply[_id].add(quantity);
    }
    _batchMint(_to, _ids, _quantities, _data);
  }

  /**
    * @dev Change the creator address for given tokens
    * @param _to   Address of the new creator
    * @param _ids  Array of Token IDs to change creator
    */
  function setCreator(
    address _to,
    uint256[] memory _ids
  ) public {
    require(_to != address(0), "ERC1155Tradable#setCreator: INVALID_ADDRESS.");
    for (uint256 i = 0; i < _ids.length; i++) {
      uint256 id = _ids[i];
      _setCreator(_to, id);
    }
  }

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

    return ERC1155.isApprovedForAll(_owner, _operator);
  }

  /**
    * @dev Change the creator address for given token
    * @param _to   Address of the new creator
    * @param _id  Token IDs to change creator of
    */
  function _setCreator(address _to, uint256 _id) internal creatorOnly(_id)
  {
      creators[_id] = _to;
  }

  /**
    * @dev Returns whether the specified token exists by checking to see if it has a creator
    * @param _id uint256 ID of the token to query the existence of
    * @return bool whether the token exists
    */
  function _exists(
    uint256 _id
  ) internal view returns (bool) {
    return creators[_id] != address(0);
  }

  /**
    * @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 _incrementTokenTypeId() private  {
    _currentTokenID++;
  }

}

File 6 of 12: IERC1155.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface IERC1155 {
  // Events

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

  /**
   * @dev MUST emit when an approval is updated
   */
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /**
   * @dev MUST emit when the URI is updated for a token ID
   *   URIs are defined in RFC 3986
   *   The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema"
   */
  event URI(string _amount, uint256 indexed _id);

  /**
   * @notice Transfers amount of an _id from the _from address to the _to address specified
   * @dev MUST emit TransferSingle event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @dev MUST emit TransferBatch event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if length of `_ids` is not the same as length of `_amounts`
   * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
  */
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  
  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return        The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

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

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return           True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator) external view returns (bool);

}

File 7 of 12: IERC1155TokenReceiver.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface IERC1155TokenReceiver {
  /**
   * @notice Handle the receipt of a single ERC1155 token type
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value MUST result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _id        The id of the token being transferred
   * @param _amount    The amount of tokens being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   */
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Handle the receipt of multiple ERC1155 token types
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value WILL result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeBatchTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _ids       An array containing ids of each token being transferred
   * @param _amounts   An array containing amounts of each token being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   */
   function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types.
   * @param  interfaceID The ERC-165 interface ID that is queried for support.s
   * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface.
   *      This function MUST NOT consume more than 5,000 gas.
   * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported.
   */
  function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

File 8 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {

    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

File 10 of 12: Ownable.sol
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 11 of 12: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

/**
 * @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, "SafeMath#mul: OVERFLOW");

    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, "SafeMath#div: DIVISION_BY_ZERO");
    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, "SafeMath#sub: UNDERFLOW");
    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, "SafeMath#add: OVERFLOW");

    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, "SafeMath#mod: DIVISION_BY_ZERO");
    return a % b;
  }

}

File 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;


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);
		uint256 k = 0;
		for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
		for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
		for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
		for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
		for (uint256 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(uint256 _i) internal pure returns (string memory _uintAsString) {
		if (_i == 0) {
			return "0";
		}
		uint256 j = _i;
		uint256 len;
		while (j != 0) {
			len++;
			j /= 10;
		}
		bytes memory bstr = new bytes(len);
		uint256 k = len - 1;
		while (_i != 0) {
			bstr[k--] = bytes1(uint8(48 + (_i % 10)));
			_i /= 10;
		}
		return string(bstr);
	}
}


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260006005553480156200001657600080fd5b5060405162002da338038062002da3833981810160405260208110156200003c57600080fd5b5051604080518082018252600c81526b13595c98dd5c9a5d1e53919560a21b6020828101919091528251808401909352600683526513515493919560d21b90830152908260006200008c6200016e565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508251620000ef9060099060208601906200018b565b5081516200010590600a9060208501906200018b565b50600480546001600160a01b0319166001600160a01b0392909216919091179055505060408051808201909152601e81527f68747470733a2f2f6e66742e6d65726375726974792e66696e616e63652f00006020820152620001679062000172565b5062000227565b3390565b8051620001879060029060208401906200018b565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ce57805160ff1916838001178555620001fe565b82800160010185558215620001fe579182015b82811115620001fe578251825591602001919060010190620001e1565b506200020c92915062000210565b5090565b5b808211156200020c576000815560010162000211565b612b6c80620002376000396000f3fe608060405234801561001057600080fd5b50600436106101405760003560e01c80638da5cb5b116100b8578063cd53d08e1161007c578063cd53d08e14610a20578063d2a6b51a14610a3d578063e8a3d48514610aee578063e985e9c514610af6578063f242432a14610b24578063f2fde38b14610bed57610140565b80638da5cb5b146107f157806395d89b4114610815578063a22cb4651461081d578063b48ab8b61461084b578063bd85b03914610a0357610140565b80632eb2c2d61161010a5780632eb2c2d61461027557806336a100d5146104385780634e1273f414610512578063715018a614610685578063731133e91461068d5780637e518ec81461074d57610140565b80624221f014610145578062fdd58e1461017457806301ffc9a7146101a057806306fdde03146101db5780630e89341c14610258575b600080fd5b6101626004803603602081101561015b57600080fd5b5035610c13565b60408051918252519081900360200190f35b6101626004803603604081101561018a57600080fd5b506001600160a01b038135169060200135610c25565b6101c7600480360360208110156101b657600080fd5b50356001600160e01b031916610c4e565b604080519115158252519081900360200190f35b6101e3610c95565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021d578181015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e36004803603602081101561026e57600080fd5b5035610d23565b610436600480360360a081101561028b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111600160201b831117156102f157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561034057600080fd5b82018360208201111561035257600080fd5b803590602001918460208302840111600160201b8311171561037357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103c257600080fd5b8201836020820111156103d457600080fd5b803590602001918460018302840111600160201b831117156103f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e24945050505050565b005b610162600480360360a081101561044e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561048457600080fd5b82018360208201111561049657600080fd5b803590602001918460018302840111600160201b831117156104b757600080fd5b919390929091602081019035600160201b8111156104d457600080fd5b8201836020820111156104e657600080fd5b803590602001918460018302840111600160201b8311171561050757600080fd5b509092509050610ee0565b6106356004803603604081101561052857600080fd5b810190602081018135600160201b81111561054257600080fd5b82018360208201111561055457600080fd5b803590602001918460208302840111600160201b8311171561057557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460208302840111600160201b831117156105f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611086945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610671578181015183820152602001610659565b505050509050019250505060405180910390f35b61043661119e565b610436600480360360808110156106a357600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156106d957600080fd5b8201836020820111156106eb57600080fd5b803590602001918460018302840111600160201b8311171561070c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6104366004803603602081101561076357600080fd5b810190602081018135600160201b81111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460018302840111600160201b831117156107b057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061133f945050505050565b6107f96113a3565b604080516001600160a01b039092168252519081900360200190f35b6101e36113b2565b6104366004803603604081101561083357600080fd5b506001600160a01b038135169060200135151561140d565b6104366004803603608081101561086157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561088b57600080fd5b82018360208201111561089d57600080fd5b803590602001918460208302840111600160201b831117156108be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561090d57600080fd5b82018360208201111561091f57600080fd5b803590602001918460208302840111600160201b8311171561094057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561098f57600080fd5b8201836020820111156109a157600080fd5b803590602001918460018302840111600160201b831117156109c257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061147b945050505050565b61016260048036036020811015610a1957600080fd5b50356115ec565b6107f960048036036020811015610a3657600080fd5b50356115fe565b61043660048036036040811015610a5357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610a7d57600080fd5b820183602082011115610a8f57600080fd5b803590602001918460208302840111600160201b83111715610ab057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611619945050505050565b6101e361169a565b6101c760048036036040811015610b0c57600080fd5b506001600160a01b03813581169160200135166116ba565b610436600480360360a0811015610b3a57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610b7957600080fd5b820183602082011115610b8b57600080fd5b803590602001918460018302840111600160201b83111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611769945050505050565b61043660048036036020811015610c0357600080fd5b50356001600160a01b031661181e565b60086020526000908152604090205481565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60006001600160e01b031982166301ffc9a760e01b1480610c7f57506001600160e01b03198216636cdb3d1360e11b145b15610c8c57506001610c90565b5060005b919050565b6009805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b505050505081565b6060610d2e82611917565b610d695760405162461bcd60e51b81526004018080602001828103825260258152602001806129646025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610c489390929091830182828015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b5050505050610e0184611934565b60405180604001604052806005815260200164173539b7b760d91b815250611a0c565b336001600160a01b0386161480610e405750610e4085336116ba565b610e7b5760405162461bcd60e51b815260040180806020018281038252602f815260200180612a02602f913960400191505060405180910390fd5b6001600160a01b038416610ec05760405162461bcd60e51b81526004018080602001828103825260308152602001806129346030913960400191505060405180910390fd5b610ecc85858585611a39565b610ed98585858585611ce4565b5050505050565b6000610eea611ed8565b6003546001600160a01b03908116911614610f3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b85871115610f795760405162461bcd60e51b815260040180806020018281038252602d8152602001806129a9602d913960400191505060405180910390fd5b6000610f83611edc565b9050610f8d611ef2565b600081815260066020526040902080546001600160a01b03191633179055841561101357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b871561105b5761105b89828a87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611efd92505050565b60008181526007602090815260408083208b9055600890915290208790559050979650505050505050565b606081518351146110c85760405162461bcd60e51b815260040180806020018281038252602c8152602001806129d6602c913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156110e257600080fd5b5060405190808252806020026020018201604052801561110c578160200160208202803683370190505b50905060005b84518110156111965760008086838151811061112a57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061116057fe5b602002602001015181526020019081526020016000205482828151811061118357fe5b6020908102919091010152600101611112565b509392505050565b6111a6611ed8565b6003546001600160a01b039081169116146111f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b60008381526006602052604090205483906001600160a01b031633146112975760405162461bcd60e51b8152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b6000848152600860209081526040808320546007909252909120546112bc9085611f97565b1115611301576040805162461bcd60e51b815260206004820152600f60248201526e6f766572206d617820737570706c7960881b604482015290519081900360640190fd5b61130d85858585611efd565b6000848152600760205260409020546113269084611f97565b6000948552600760205260409094209390935550505050565b611347611ed8565b6003546001600160a01b03908116911614611397576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6113a081611ff1565b50565b6003546001600160a01b031690565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60005b83518110156115d957600084828151811061149557fe5b602090810291909101810151600081815260069092526040909120549091506001600160a01b031633146114fa5760405162461bcd60e51b815260040180806020018281038252602f815260200180612854602f913960400191505060405180910390fd5b600084838151811061150857fe5b60200260200101519050600860008381526020019081526020016000205461155f86858151811061153557fe5b60200260200101516007600086815260200190815260200160002054611f9790919063ffffffff16565b11156115a4576040805162461bcd60e51b815260206004820152600f60248201526e6f766572206d617820737570706c7960881b604482015290519081900360640190fd5b6000828152600760205260409020546115bd9082611f97565b600092835260076020526040909220919091555060010161147e565b506115e684848484612008565b50505050565b60009081526007602052604090205490565b6006602052600090815260409020546001600160a01b031681565b6001600160a01b03821661165e5760405162461bcd60e51b815260040180806020018281038252602c815260200180612ada602c913960400191505060405180910390fd5b60005b815181101561169557600082828151811061167857fe5b6020026020010151905061168c84826121dc565b50600101611661565b505050565b60606040518060600160405280602c8152602001612908602c9139905090565b600480546040805163c455279160e01b81526001600160a01b0386811694820194909452905160009392831692851691839163c455279191602480820192602092909190829003018186803b15801561171257600080fd5b505afa158015611726573d6000803e3d6000fd5b505050506040513d602081101561173c57600080fd5b50516001600160a01b03161415611757576001915050610c48565b6117618484612262565b949350505050565b336001600160a01b0386161480611785575061178585336116ba565b6117c05760405162461bcd60e51b815260040180806020018281038252602a8152602001806128a9602a913960400191505060405180910390fd5b6001600160a01b0384166118055760405162461bcd60e51b815260040180806020018281038252602b815260200180612829602b913960400191505060405180910390fd5b61181185858585612290565b610ed9858585858561236c565b611826611ed8565b6003546001600160a01b03908116911614611876576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6001600160a01b0381166118bb5760405162461bcd60e51b81526004018080602001828103825260268152602001806128836026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600660205260409020546001600160a01b0316151590565b60608161195957506040805180820190915260018152600360fc1b6020820152610c90565b8160005b811561197157600101600a8204915061195d565b60608167ffffffffffffffff8111801561198a57600080fd5b506040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b50905060001982015b8515611a0357600a860660300160f81b828280600190039350815181106119e157fe5b60200101906001600160f81b031916908160001a905350600a860495506119be565b50949350505050565b606061176184848460405180602001604052806000815250604051806020016040528060008152506124dc565b8051825114611a795760405162461bcd60e51b81526004018080602001828103825260358152602001806128d36035913960400191505060405180910390fd5b815160005b81811015611c0357611af4838281518110611a9557fe5b6020026020010151600080896001600160a01b03166001600160a01b031681526020019081526020016000206000878581518110611acf57fe5b602002602001015181526020019081526020016000205461270190919063ffffffff16565b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611b2657fe5b6020026020010151815260200190815260200160002081905550611bae838281518110611b4f57fe5b6020026020010151600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878581518110611b8957fe5b6020026020010151815260200190815260200160002054611f9790919063ffffffff16565b600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611be057fe5b602090810291909101810151825281019190915260400160002055600101611a7e565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611c89578181015183820152602001611c71565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611cc8578181015183820152602001611cb0565b5050505090500194505050505060405180910390a45050505050565b611cf6846001600160a01b031661275e565b15610ed9576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611d86578181015183820152602001611d6e565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015611dc5578181015183820152602001611dad565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015611e01578181015183820152602001611de9565b50505050905090810190601f168015611e2e5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d6020811015611e7d57600080fd5b505190506001600160e01b0319811663bc197c8160e01b14611ed05760405162461bcd60e51b815260040180806020018281038252603f815260200180612a61603f913960400191505060405180910390fd5b505050505050565b3390565b600554600090611eed906001611f97565b905090565b600580546001019055565b6001600160a01b038416600090815260208181526040808320868452909152902054611f299083611f97565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a46115e660008585858561236c565b600082820183811015611fea576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b9392505050565b8051612004906002906020840190612795565b5050565b81518351146120485760405162461bcd60e51b8152600401808060200182810382526030815260200180612a316030913960400191505060405180910390fd5b825160005b818110156120f35761209e84828151811061206457fe5b6020026020010151600080896001600160a01b03166001600160a01b031681526020019081526020016000206000888581518110611b8957fe5b600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106120d057fe5b60209081029190910181015182528101919091526040016000205560010161204d565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561217a578181015183820152602001612162565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156121b95781810151838201526020016121a1565b5050505090500194505050505060405180910390a4610ed9600086868686611ce4565b60008181526006602052604090205481906001600160a01b031633146122335760405162461bcd60e51b8152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b50600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b0384166000908152602081815260408083208584529091529020546122bc9082612701565b6001600160a01b03808616600090815260208181526040808320878452825280832094909455918616815280825282812085825290915220546122ff9082611f97565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b61237e846001600160a01b031661275e565b15610ed9576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561240f5781810151838201526020016123f7565b50505050905090810190601f16801561243c5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561245f57600080fd5b505af1158015612473573d6000803e3d6000fd5b505050506040513d602081101561248957600080fd5b505190506001600160e01b0319811663f23a6e6160e01b14611ed05760405162461bcd60e51b815260040180806020018281038252603a815260200180612aa0603a913960400191505060405180910390fd5b805182518451865188516060948a948a948a948a948a948a94919092019092019091010167ffffffffffffffff8111801561251657600080fd5b506040519080825280601f01601f191660200182016040528015612541576020820181803683370190505b509050806000805b885181101561259a5788818151811061255e57fe5b602001015160f81c60f81b83838060010194508151811061257b57fe5b60200101906001600160f81b031916908160001a905350600101612549565b5060005b87518110156125ef578781815181106125b357fe5b602001015160f81c60f81b8383806001019450815181106125d057fe5b60200101906001600160f81b031916908160001a90535060010161259e565b5060005b86518110156126445786818151811061260857fe5b602001015160f81c60f81b83838060010194508151811061262557fe5b60200101906001600160f81b031916908160001a9053506001016125f3565b5060005b85518110156126995785818151811061265d57fe5b602001015160f81c60f81b83838060010194508151811061267a57fe5b60200101906001600160f81b031916908160001a905350600101612648565b5060005b84518110156126ee578481815181106126b257fe5b602001015160f81c60f81b8383806001019450815181106126cf57fe5b60200101906001600160f81b031916908160001a90535060010161269d565b50909d9c50505050505050505050505050565b600082821115612758576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6000813f8015801590611fea57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106127d657805160ff1916838001178555612803565b82800160010185558215612803579182015b828111156128035782518255916020019190600101906127e8565b5061280f929150612813565b5090565b5b8082111561280f576000815560010161281456fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544868747470733a2f2f6e66742e6d65726375726974792e66696e616e63652f4d65726375726974792e6a736f6e45524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572496e697469616c20737570706c792063616e6e6f74206265206d6f7265207468616e206d617820737570706c79455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a26469706673582212201038174bda7d6b066a96ca4960e007bd4a15e90811c24f816d0f5695b9fe267064736f6c634300060c0033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101405760003560e01c80638da5cb5b116100b8578063cd53d08e1161007c578063cd53d08e14610a20578063d2a6b51a14610a3d578063e8a3d48514610aee578063e985e9c514610af6578063f242432a14610b24578063f2fde38b14610bed57610140565b80638da5cb5b146107f157806395d89b4114610815578063a22cb4651461081d578063b48ab8b61461084b578063bd85b03914610a0357610140565b80632eb2c2d61161010a5780632eb2c2d61461027557806336a100d5146104385780634e1273f414610512578063715018a614610685578063731133e91461068d5780637e518ec81461074d57610140565b80624221f014610145578062fdd58e1461017457806301ffc9a7146101a057806306fdde03146101db5780630e89341c14610258575b600080fd5b6101626004803603602081101561015b57600080fd5b5035610c13565b60408051918252519081900360200190f35b6101626004803603604081101561018a57600080fd5b506001600160a01b038135169060200135610c25565b6101c7600480360360208110156101b657600080fd5b50356001600160e01b031916610c4e565b604080519115158252519081900360200190f35b6101e3610c95565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561021d578181015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e36004803603602081101561026e57600080fd5b5035610d23565b610436600480360360a081101561028b57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111600160201b831117156102f157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561034057600080fd5b82018360208201111561035257600080fd5b803590602001918460208302840111600160201b8311171561037357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103c257600080fd5b8201836020820111156103d457600080fd5b803590602001918460018302840111600160201b831117156103f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e24945050505050565b005b610162600480360360a081101561044e57600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561048457600080fd5b82018360208201111561049657600080fd5b803590602001918460018302840111600160201b831117156104b757600080fd5b919390929091602081019035600160201b8111156104d457600080fd5b8201836020820111156104e657600080fd5b803590602001918460018302840111600160201b8311171561050757600080fd5b509092509050610ee0565b6106356004803603604081101561052857600080fd5b810190602081018135600160201b81111561054257600080fd5b82018360208201111561055457600080fd5b803590602001918460208302840111600160201b8311171561057557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460208302840111600160201b831117156105f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611086945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610671578181015183820152602001610659565b505050509050019250505060405180910390f35b61043661119e565b610436600480360360808110156106a357600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b8111156106d957600080fd5b8201836020820111156106eb57600080fd5b803590602001918460018302840111600160201b8311171561070c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6104366004803603602081101561076357600080fd5b810190602081018135600160201b81111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460018302840111600160201b831117156107b057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061133f945050505050565b6107f96113a3565b604080516001600160a01b039092168252519081900360200190f35b6101e36113b2565b6104366004803603604081101561083357600080fd5b506001600160a01b038135169060200135151561140d565b6104366004803603608081101561086157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561088b57600080fd5b82018360208201111561089d57600080fd5b803590602001918460208302840111600160201b831117156108be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561090d57600080fd5b82018360208201111561091f57600080fd5b803590602001918460208302840111600160201b8311171561094057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561098f57600080fd5b8201836020820111156109a157600080fd5b803590602001918460018302840111600160201b831117156109c257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061147b945050505050565b61016260048036036020811015610a1957600080fd5b50356115ec565b6107f960048036036020811015610a3657600080fd5b50356115fe565b61043660048036036040811015610a5357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610a7d57600080fd5b820183602082011115610a8f57600080fd5b803590602001918460208302840111600160201b83111715610ab057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611619945050505050565b6101e361169a565b6101c760048036036040811015610b0c57600080fd5b506001600160a01b03813581169160200135166116ba565b610436600480360360a0811015610b3a57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610b7957600080fd5b820183602082011115610b8b57600080fd5b803590602001918460018302840111600160201b83111715610bac57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611769945050505050565b61043660048036036020811015610c0357600080fd5b50356001600160a01b031661181e565b60086020526000908152604090205481565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60006001600160e01b031982166301ffc9a760e01b1480610c7f57506001600160e01b03198216636cdb3d1360e11b145b15610c8c57506001610c90565b5060005b919050565b6009805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b505050505081565b6060610d2e82611917565b610d695760405162461bcd60e51b81526004018080602001828103825260258152602001806129646025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610c489390929091830182828015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b5050505050610e0184611934565b60405180604001604052806005815260200164173539b7b760d91b815250611a0c565b336001600160a01b0386161480610e405750610e4085336116ba565b610e7b5760405162461bcd60e51b815260040180806020018281038252602f815260200180612a02602f913960400191505060405180910390fd5b6001600160a01b038416610ec05760405162461bcd60e51b81526004018080602001828103825260308152602001806129346030913960400191505060405180910390fd5b610ecc85858585611a39565b610ed98585858585611ce4565b5050505050565b6000610eea611ed8565b6003546001600160a01b03908116911614610f3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b85871115610f795760405162461bcd60e51b815260040180806020018281038252602d8152602001806129a9602d913960400191505060405180910390fd5b6000610f83611edc565b9050610f8d611ef2565b600081815260066020526040902080546001600160a01b03191633179055841561101357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b871561105b5761105b89828a87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611efd92505050565b60008181526007602090815260408083208b9055600890915290208790559050979650505050505050565b606081518351146110c85760405162461bcd60e51b815260040180806020018281038252602c8152602001806129d6602c913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156110e257600080fd5b5060405190808252806020026020018201604052801561110c578160200160208202803683370190505b50905060005b84518110156111965760008086838151811061112a57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061116057fe5b602002602001015181526020019081526020016000205482828151811061118357fe5b6020908102919091010152600101611112565b509392505050565b6111a6611ed8565b6003546001600160a01b039081169116146111f6576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b60008381526006602052604090205483906001600160a01b031633146112975760405162461bcd60e51b8152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b6000848152600860209081526040808320546007909252909120546112bc9085611f97565b1115611301576040805162461bcd60e51b815260206004820152600f60248201526e6f766572206d617820737570706c7960881b604482015290519081900360640190fd5b61130d85858585611efd565b6000848152600760205260409020546113269084611f97565b6000948552600760205260409094209390935550505050565b611347611ed8565b6003546001600160a01b03908116911614611397576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6113a081611ff1565b50565b6003546001600160a01b031690565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60005b83518110156115d957600084828151811061149557fe5b602090810291909101810151600081815260069092526040909120549091506001600160a01b031633146114fa5760405162461bcd60e51b815260040180806020018281038252602f815260200180612854602f913960400191505060405180910390fd5b600084838151811061150857fe5b60200260200101519050600860008381526020019081526020016000205461155f86858151811061153557fe5b60200260200101516007600086815260200190815260200160002054611f9790919063ffffffff16565b11156115a4576040805162461bcd60e51b815260206004820152600f60248201526e6f766572206d617820737570706c7960881b604482015290519081900360640190fd5b6000828152600760205260409020546115bd9082611f97565b600092835260076020526040909220919091555060010161147e565b506115e684848484612008565b50505050565b60009081526007602052604090205490565b6006602052600090815260409020546001600160a01b031681565b6001600160a01b03821661165e5760405162461bcd60e51b815260040180806020018281038252602c815260200180612ada602c913960400191505060405180910390fd5b60005b815181101561169557600082828151811061167857fe5b6020026020010151905061168c84826121dc565b50600101611661565b505050565b60606040518060600160405280602c8152602001612908602c9139905090565b600480546040805163c455279160e01b81526001600160a01b0386811694820194909452905160009392831692851691839163c455279191602480820192602092909190829003018186803b15801561171257600080fd5b505afa158015611726573d6000803e3d6000fd5b505050506040513d602081101561173c57600080fd5b50516001600160a01b03161415611757576001915050610c48565b6117618484612262565b949350505050565b336001600160a01b0386161480611785575061178585336116ba565b6117c05760405162461bcd60e51b815260040180806020018281038252602a8152602001806128a9602a913960400191505060405180910390fd5b6001600160a01b0384166118055760405162461bcd60e51b815260040180806020018281038252602b815260200180612829602b913960400191505060405180910390fd5b61181185858585612290565b610ed9858585858561236c565b611826611ed8565b6003546001600160a01b03908116911614611876576040805162461bcd60e51b81526020600482018190526024820152600080516020612989833981519152604482015290519081900360640190fd5b6001600160a01b0381166118bb5760405162461bcd60e51b81526004018080602001828103825260268152602001806128836026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600660205260409020546001600160a01b0316151590565b60608161195957506040805180820190915260018152600360fc1b6020820152610c90565b8160005b811561197157600101600a8204915061195d565b60608167ffffffffffffffff8111801561198a57600080fd5b506040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b50905060001982015b8515611a0357600a860660300160f81b828280600190039350815181106119e157fe5b60200101906001600160f81b031916908160001a905350600a860495506119be565b50949350505050565b606061176184848460405180602001604052806000815250604051806020016040528060008152506124dc565b8051825114611a795760405162461bcd60e51b81526004018080602001828103825260358152602001806128d36035913960400191505060405180910390fd5b815160005b81811015611c0357611af4838281518110611a9557fe5b6020026020010151600080896001600160a01b03166001600160a01b031681526020019081526020016000206000878581518110611acf57fe5b602002602001015181526020019081526020016000205461270190919063ffffffff16565b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611b2657fe5b6020026020010151815260200190815260200160002081905550611bae838281518110611b4f57fe5b6020026020010151600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878581518110611b8957fe5b6020026020010151815260200190815260200160002054611f9790919063ffffffff16565b600080876001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611be057fe5b602090810291909101810151825281019190915260400160002055600101611a7e565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611c89578181015183820152602001611c71565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611cc8578181015183820152602001611cb0565b5050505090500194505050505060405180910390a45050505050565b611cf6846001600160a01b031661275e565b15610ed9576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611d86578181015183820152602001611d6e565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015611dc5578181015183820152602001611dad565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015611e01578181015183820152602001611de9565b50505050905090810190601f168015611e2e5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b505050506040513d6020811015611e7d57600080fd5b505190506001600160e01b0319811663bc197c8160e01b14611ed05760405162461bcd60e51b815260040180806020018281038252603f815260200180612a61603f913960400191505060405180910390fd5b505050505050565b3390565b600554600090611eed906001611f97565b905090565b600580546001019055565b6001600160a01b038416600090815260208181526040808320868452909152902054611f299083611f97565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a46115e660008585858561236c565b600082820183811015611fea576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b9392505050565b8051612004906002906020840190612795565b5050565b81518351146120485760405162461bcd60e51b8152600401808060200182810382526030815260200180612a316030913960400191505060405180910390fd5b825160005b818110156120f35761209e84828151811061206457fe5b6020026020010151600080896001600160a01b03166001600160a01b031681526020019081526020016000206000888581518110611b8957fe5b600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106120d057fe5b60209081029190910181015182528101919091526040016000205560010161204d565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561217a578181015183820152602001612162565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156121b95781810151838201526020016121a1565b5050505090500194505050505060405180910390a4610ed9600086868686611ce4565b60008181526006602052604090205481906001600160a01b031633146122335760405162461bcd60e51b8152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b50600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b0384166000908152602081815260408083208584529091529020546122bc9082612701565b6001600160a01b03808616600090815260208181526040808320878452825280832094909455918616815280825282812085825290915220546122ff9082611f97565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b61237e846001600160a01b031661275e565b15610ed9576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561240f5781810151838201526020016123f7565b50505050905090810190601f16801561243c5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561245f57600080fd5b505af1158015612473573d6000803e3d6000fd5b505050506040513d602081101561248957600080fd5b505190506001600160e01b0319811663f23a6e6160e01b14611ed05760405162461bcd60e51b815260040180806020018281038252603a815260200180612aa0603a913960400191505060405180910390fd5b805182518451865188516060948a948a948a948a948a948a94919092019092019091010167ffffffffffffffff8111801561251657600080fd5b506040519080825280601f01601f191660200182016040528015612541576020820181803683370190505b509050806000805b885181101561259a5788818151811061255e57fe5b602001015160f81c60f81b83838060010194508151811061257b57fe5b60200101906001600160f81b031916908160001a905350600101612549565b5060005b87518110156125ef578781815181106125b357fe5b602001015160f81c60f81b8383806001019450815181106125d057fe5b60200101906001600160f81b031916908160001a90535060010161259e565b5060005b86518110156126445786818151811061260857fe5b602001015160f81c60f81b83838060010194508151811061262557fe5b60200101906001600160f81b031916908160001a9053506001016125f3565b5060005b85518110156126995785818151811061265d57fe5b602001015160f81c60f81b83838060010194508151811061267a57fe5b60200101906001600160f81b031916908160001a905350600101612648565b5060005b84518110156126ee578481815181106126b257fe5b602001015160f81c60f81b8383806001019450815181106126cf57fe5b60200101906001600160f81b031916908160001a90535060010161269d565b50909d9c50505050505050505050505050565b600082821115612758576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6000813f8015801590611fea57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106127d657805160ff1916838001178555612803565b82800160010185558215612803579182015b828111156128035782518255916020019190600101906127e8565b5061280f929150612813565b5090565b5b8082111561280f576000815560010161281456fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544868747470733a2f2f6e66742e6d65726375726974792e66696e616e63652f4d65726375726974792e6a736f6e45524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572496e697469616c20737570706c792063616e6e6f74206265206d6f7265207468616e206d617820737570706c79455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a26469706673582212201038174bda7d6b066a96ca4960e007bd4a15e90811c24f816d0f5695b9fe267064736f6c634300060c0033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

149:546:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;816:50:4;;;;;;;;;;;;;;;;-1:-1:-1;816:50:4;;:::i;:::-;;;;;;;;;;;;;;;;7335:123:1;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7335:123:1;;;;;;;;:::i;9254:243::-;;;;;;;;;;;;;;;;-1:-1:-1;9254:243:1;-1:-1:-1;;;;;;9254:243:1;;:::i;:::-;;;;;;;;;;;;;;;;;;890:18:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1607:255;;;;;;;;;;;;;;;;-1:-1:-1;1607:255:4;;:::i;2625:502:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2625:502:1;;;;;;;;-1:-1:-1;2625:502:1;;-1:-1:-1;;;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2625:502:1;;;;;;;;-1:-1:-1;2625:502:1;;-1:-1:-1;;;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2625:502:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2625:502:1;;-1:-1:-1;2625:502:1;;-1:-1:-1;;;;;2625:502:1:i;:::-;;2887:628:4;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2887:628:4;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2887:628:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2887:628:4;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2887:628:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2887:628:4;;;;;;;;;;-1:-1:-1;2887:628:4;;-1:-1:-1;2887:628:4;-1:-1:-1;2887:628:4;:::i;7738:486:1:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7738:486:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7738:486:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7738:486:1;;;;;;;;-1:-1:-1;7738:486:1;;-1:-1:-1;;;;;7738:486:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7738:486:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7738:486:1;;-1:-1:-1;7738:486:1;;-1:-1:-1;;;;;7738:486:1:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;892:145:9;;;:::i;3809:310:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3809:310:4;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3809:310:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3809:310:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3809:310:4;;-1:-1:-1;3809:310:4;;-1:-1:-1;;;;;3809:310:4:i;2257:139::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2257:139:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2257:139:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2257:139:4;;-1:-1:-1;2257:139:4;;-1:-1:-1;;;;;2257:139:4:i;689:77:9:-;;;:::i;:::-;;;;-1:-1:-1;;;;;689:77:9;;;;;;;;;;;;;;933:20:4;;;:::i;6358:221:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6358:221:1;;;;;;;;;;:::i;4413:554:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4413:554:4;;;;;;;;;;;;;;;-1:-1:-1;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4413:554:4;;;;;;;;-1:-1:-1;4413:554:4;;-1:-1:-1;;;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4413:554:4;;;;;;;;-1:-1:-1;4413:554:4;;-1:-1:-1;;;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4413:554:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4413:554:4;;-1:-1:-1;4413:554:4;;-1:-1:-1;;;;;4413:554:4:i;2025:106::-;;;;;;;;;;;;;;;;-1:-1:-1;2025:106:4;;:::i;716:44::-;;;;;;;;;;;;;;;;-1:-1:-1;716:44:4;;:::i;5141:270::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5141:270:4;;;;;;;;;;;;;;;-1:-1:-1;;;5141:270:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5141:270:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5141:270:4;;-1:-1:-1;5141:270:4;;-1:-1:-1;;;;;5141:270:4:i;568:124:8:-;;;:::i;5530:404:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5530:404:4;;;;;;;;;;:::i;1706:536:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1706:536:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1706:536:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1706:536:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1706:536:1;;-1:-1:-1;1706:536:1;;-1:-1:-1;;;;;1706:536:1:i;1042:240:9:-;;;;;;;;;;;;;;;;-1:-1:-1;1042:240:9;-1:-1:-1;;;;;1042:240:9;;:::i;816:50:4:-;;;;;;;;;;;;;:::o;7335:123:1:-;-1:-1:-1;;;;;7432:16:1;;7408:7;7432:16;;;;;;;;;;;:21;;;;;;;;;7335:123;;;;;:::o;9254:243::-;9334:4;-1:-1:-1;;;;;;9350:42:1;;-1:-1:-1;;;9350:42:1;;:97;;-1:-1:-1;;;;;;;9404:43:1;;-1:-1:-1;;;9404:43:1;9350:97;9346:129;;;-1:-1:-1;9464:4:1;9457:11;;9346:129;-1:-1:-1;9487:5:1;9254:243;;;;:::o;890:18:4:-;;;;;;;;;;;;;;;-1:-1:-1;;890:18:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1607:255::-;1671:13;1700:12;1708:3;1700:7;:12::i;:::-;1692:62;;;;-1:-1:-1;;;1692:62:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1792:15;1767:90;;;;;;;-1:-1:-1;;1767:90:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1792:15;;1767:90;;1792:15;1767:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1815:21;1832:3;1815:16;:21::i;:::-;1767:90;;;;;;;;;;;;;-1:-1:-1;;;1767:90:4;;;:17;:90::i;2625:502:1:-;2802:10;-1:-1:-1;;;;;2802:19:1;;;;2801:60;;;2826:35;2843:5;2850:10;2826:16;:35::i;:::-;2793:120;;;;-1:-1:-1;;;2793:120:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2927:17:1;;2919:78;;;;-1:-1:-1;;;2919:78:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3004:50;3027:5;3034:3;3039:4;3045:8;3004:22;:50::i;:::-;3060:62;3088:5;3095:3;3100:4;3106:8;3116:5;3060:27;:62::i;:::-;2625:502;;;;;:::o;2887:628:4:-;3066:7;820:12:9;:10;:12::i;:::-;810:6;;-1:-1:-1;;;;;810:6:9;;;:22;;;802:67;;;;;-1:-1:-1;;;802:67:9;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;802:67:9;;;;;;;;;;;;;;;3107:10:4::1;3089:14;:28;;3081:86;;;;-1:-1:-1::0;;;3081:86:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3174:11;3188:17;:15;:17::i;:::-;3174:31;;3212:23;:21;:23::i;:::-;3242:13;::::0;;;:8:::1;:13;::::0;;;;:26;;-1:-1:-1;;;;;;3242:26:4::1;3258:10;3242:26;::::0;;3279:22;;3275:62:::1;;3326:3;3316:14;3320:4;;3316:14;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;3316:14:4::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;3316:14:4;;-1:-1:-1;;;;3316:14:4::1;3275:62;3347:19:::0;;3343:73:::1;;3368:48;3374:13;3389:3;3394:14;3410:5;;3368:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;3368:5:4::1;::::0;-1:-1:-1;;;3368:48:4:i:1;:::-;3423:16;::::0;;;:11:::1;:16;::::0;;;;;;;:33;;;3462:14:::1;:19:::0;;;;;:32;;;3435:3;-1:-1:-1;2887:628:4;;;;;;;;;:::o;7738:486:1:-;7836:16;7888:4;:11;7870:7;:14;:29;7862:86;;;;-1:-1:-1;;;7862:86:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7972:30;8019:7;:14;8005:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8005:29:1;;7972:62;;8090:9;8085:108;8109:7;:14;8105:1;:18;8085:108;;;8157:8;:20;8166:7;8174:1;8166:10;;;;;;;;;;;;;;-1:-1:-1;;;;;8157:20:1;-1:-1:-1;;;;;8157:20:1;;;;;;;;;;;;:29;8178:4;8183:1;8178:7;;;;;;;;;;;;;;8157:29;;;;;;;;;;;;8138:13;8152:1;8138:16;;;;;;;;;;;;;;;;;:48;8125:3;;8085:108;;;-1:-1:-1;8206:13:1;7738:486;-1:-1:-1;;;7738:486:1:o;892:145:9:-;820:12;:10;:12::i;:::-;810:6;;-1:-1:-1;;;;;810:6:9;;;:22;;;802:67;;;;;-1:-1:-1;;;802:67:9;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;802:67:9;;;;;;;;;;;;;;;982:6:::1;::::0;961:40:::1;::::0;998:1:::1;::::0;-1:-1:-1;;;;;982:6:9::1;::::0;961:40:::1;::::0;998:1;;961:40:::1;1011:6;:19:::0;;-1:-1:-1;;;;;;1011:19:9::1;::::0;;892:145::o;3809:310:4:-;1081:13;;;;:8;:13;;;;;;3927:3;;-1:-1:-1;;;;;1081:13:4;1098:10;1081:27;1073:89;;;;-1:-1:-1;;;1073:89:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3981:19:::1;::::0;;;:14:::1;:19;::::0;;;;;;;;3946:11:::1;:16:::0;;;;;;;:31:::1;::::0;3967:9;3946:20:::1;:31::i;:::-;:54;;3938:81;;;::::0;;-1:-1:-1;;;3938:81:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3938:81:4;;;;;;;;;;;;;::::1;;4025:33;4031:3;4036;4041:9;4052:5;4025;:33::i;:::-;4083:16;::::0;;;:11:::1;:16;::::0;;;;;:31:::1;::::0;4104:9;4083:20:::1;:31::i;:::-;4064:16;::::0;;;:11:::1;:16;::::0;;;;;:50;;;;-1:-1:-1;;;;3809:310:4:o;2257:139::-;820:12:9;:10;:12::i;:::-;810:6;;-1:-1:-1;;;;;810:6:9;;;:22;;;802:67;;;;;-1:-1:-1;;;802:67:9;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;802:67:9;;;;;;;;;;;;;;;2351:40:4::1;2371:19;2351;:40::i;:::-;2257:139:::0;:::o;689:77:9:-;753:6;;-1:-1:-1;;;;;753:6:9;689:77;:::o;933:20:4:-;;;;;;;;;;;;;;;-1:-1:-1;;933:20:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6358:221:1;6481:10;6471:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;6471:32:1;;;;;;;;;;;;:44;;-1:-1:-1;;6471:44:1;;;;;;;;;;6526:48;;;;;;;6471:32;;6481:10;6526:48;;;;;;;;;;;6358:221;;:::o;4413:554:4:-;4556:9;4551:365;4575:4;:11;4571:1;:15;4551:365;;;4601:11;4615:4;4620:1;4615:7;;;;;;;;;;;;;;;;;;;4638:13;;;;:8;:13;;;;;;;;4615:7;;-1:-1:-1;;;;;;4638:13:4;4655:10;4638:27;4630:87;;;;-1:-1:-1;;;4630:87:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4725:16;4744:11;4756:1;4744:14;;;;;;;;;;;;;;4725:33;;4814:14;:19;4829:3;4814:19;;;;;;;;;;;;4774:36;4795:11;4807:1;4795:14;;;;;;;;;;;;;;4774:11;:16;4786:3;4774:16;;;;;;;;;;;;:20;;:36;;;;:::i;:::-;:59;;4766:86;;;;;-1:-1:-1;;;4766:86:4;;;;;;;;;;;;-1:-1:-1;;;4766:86:4;;;;;;;;;;;;;;;4879:16;;;;:11;:16;;;;;;:30;;4900:8;4879:20;:30::i;:::-;4860:16;;;;:11;:16;;;;;;:49;;;;-1:-1:-1;4588:3:4;;4551:365;;;;4921:41;4932:3;4937:4;4943:11;4956:5;4921:10;:41::i;:::-;4413:554;;;;:::o;2025:106::-;2088:7;2110:16;;;:11;:16;;;;;;;2025:106::o;716:44::-;;;;;;;;;;;;-1:-1:-1;;;;;716:44:4;;:::o;5141:270::-;-1:-1:-1;;;;;5230:17:4;;5222:74;;;;-1:-1:-1;;;5222:74:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5307:9;5302:105;5326:4;:11;5322:1;:15;5302:105;;;5352:10;5365:4;5370:1;5365:7;;;;;;;;;;;;;;5352:20;;5380;5392:3;5397:2;5380:11;:20::i;:::-;-1:-1:-1;5339:3:4;;5302:105;;;;5141:270;;:::o;568:124:8:-;612:13;633:53;;;;;;;;;;;;;;;;;;;568:124;:::o;5530:404:4:-;5758:20;;;5802:29;;;-1:-1:-1;;;5802:29:4;;-1:-1:-1;;;;;5802:29:4;;;;;;;;;;;;5633:15;;5758:20;;;;5794:51;;;5758:20;;5802:21;;:29;;;;;;;;;;;;;;;5758:20;5802:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5802:29:4;-1:-1:-1;;;;;5794:51:4;;5790:83;;;5862:4;5855:11;;;;;5790:83;5886:43;5911:6;5919:9;5886:24;:43::i;:::-;5879:50;5530:404;-1:-1:-1;;;;5530:404:4:o;1706:536:1:-;1838:10;-1:-1:-1;;;;;1838:19:1;;;;1837:60;;;1862:35;1879:5;1886:10;1862:16;:35::i;:::-;1829:115;;;;-1:-1:-1;;;1829:115:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1958:17:1;;1950:72;;;;-1:-1:-1;;;1950:72:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2133:43;2151:5;2158:3;2163;2168:7;2133:17;:43::i;:::-;2182:55;2205:5;2212:3;2217;2222:7;2231:5;2182:22;:55::i;1042:240:9:-;820:12;:10;:12::i;:::-;810:6;;-1:-1:-1;;;;;810:6:9;;;:22;;;802:67;;;;;-1:-1:-1;;;802:67:9;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;802:67:9;;;;;;;;;;;;;;;-1:-1:-1;;;;;1130:22:9;::::1;1122:73;;;;-1:-1:-1::0;;;1122:73:9::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1231:6;::::0;1210:38:::1;::::0;-1:-1:-1;;;;;1210:38:9;;::::1;::::0;1231:6:::1;::::0;1210:38:::1;::::0;1231:6:::1;::::0;1210:38:::1;1258:6;:17:::0;;-1:-1:-1;;;;;;1258:17:9::1;-1:-1:-1::0;;;;;1258:17:9;;;::::1;::::0;;;::::1;::::0;;1042:240::o;6428:112:4:-;6489:4;6508:13;;;:8;:13;;;;;;-1:-1:-1;;;;;6508:13:4;:27;;;6428:112::o;1485:367:11:-;1538:27;1575:7;1571:33;;-1:-1:-1;1589:10:11;;;;;;;;;;;;-1:-1:-1;;;1589:10:11;;;;;;1571:33;1619:2;1607:9;1640:42;1647:6;;1640:42;;1660:5;;1675:2;1670:7;;;;1640:42;;;1685:17;1715:3;1705:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1705:14:11;-1:-1:-1;1685:34:11;-1:-1:-1;;;1735:7:11;;1746:80;1753:7;;1746:80;;1803:2;1798;:7;1792:2;:14;1779:29;;1767:4;1772:3;;;;;;;1767:9;;;;;;;;;;;:41;-1:-1:-1;;;;;1767:41:11;;;;;;;;-1:-1:-1;1819:2:11;1813:8;;;;1746:80;;;-1:-1:-1;1843:4:11;1485:367;-1:-1:-1;;;;1485:367:11:o;1178:164::-;1283:13;1309:29;1319:2;1323;1327;1309:29;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;4710:670:1:-;4864:8;:15;4849:4;:11;:30;4841:96;;;;-1:-1:-1;;;4841:96:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5001:11;;4981:17;5050:243;5074:9;5070:1;:13;5050:243;;;5173:41;5202:8;5211:1;5202:11;;;;;;;;;;;;;;5173:8;:15;5182:5;-1:-1:-1;;;;;5173:15:1;-1:-1:-1;;;;;5173:15:1;;;;;;;;;;;;:24;5189:4;5194:1;5189:7;;;;;;;;;;;;;;5173:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;5146:8;:15;5155:5;-1:-1:-1;;;;;5146:15:1;-1:-1:-1;;;;;5146:15:1;;;;;;;;;;;;:24;5162:4;5167:1;5162:7;;;;;;;;;;;;;;5146:24;;;;;;;;;;;:68;;;;5247:39;5274:8;5283:1;5274:11;;;;;;;;;;;;;;5247:8;:13;5256:3;-1:-1:-1;;;;;5247:13:1;-1:-1:-1;;;;;5247:13:1;;;;;;;;;;;;:22;5261:4;5266:1;5261:7;;;;;;;;;;;;;;5247:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;5222:8;:13;5231:3;-1:-1:-1;;;;;5222:13:1;-1:-1:-1;;;;;5222:13:1;;;;;;;;;;;;:22;5236:4;5241:1;5236:7;;;;;;;;;;;;;;;;;;;5222:22;;;;;;;;;;-1:-1:-1;5222:22:1;:64;5085:3;;5050:243;;;;5355:3;-1:-1:-1;;;;;5322:53:1;5348:5;-1:-1:-1;;;;;5322:53:1;5336:10;-1:-1:-1;;;;;5322:53:1;;5360:4;5366:8;5322:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4710:670;;;;;:::o;5493:468::-;5695:16;:3;-1:-1:-1;;;;;5695:14:1;;:16::i;:::-;5691:266;;;5721:13;5759:3;-1:-1:-1;;;;;5737:49:1;;5787:10;5799:5;5806:4;5812:8;5822:5;5737:91;;;;;;;;;;;;;-1:-1:-1;;;;;5737:91:1;;;;;;-1:-1:-1;;;;;5737:91:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5737:91:1;;-1:-1:-1;;;;;;;5844:38:1;;-1:-1:-1;;;5844:38:1;5836:114;;;;-1:-1:-1;;;5836:114:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5691:266;5493:468;;;;;:::o;32:104:9:-;119:10;32:104;:::o;6675:98:4:-;6746:15;;6724:7;;6746:22;;6766:1;6746:19;:22::i;:::-;6739:29;;6675:98;:::o;6841:70::-;6889:15;:17;;;;;;6841:70::o;682:390:3:-;-1:-1:-1;;;;;821:13:3;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:31;;844:7;821:22;:31::i;:::-;-1:-1:-1;;;;;800:13:3;;:8;:13;;;;;;;;;;;:18;;;;;;;;:52;;;;882:59;;;;;;;;;;;;;800:13;;:8;;897:10;;882:59;;;;;;;;1005:62;1036:3;1042;1047;1052:7;1061:5;1005:22;:62::i;1452:158:10:-;1510:7;1537:5;;;1556:6;;;;1548:41;;;;;-1:-1:-1;;;1548:41:10;;;;;;;;;;;;-1:-1:-1;;;1548:41:10;;;;;;;;;;;;;;;1603:1;1452:158;-1:-1:-1;;;1452:158:10:o;2226:121:2:-;2305:37;;;;:15;;:37;;;;;:::i;:::-;;2226:121;:::o;1350:705:3:-;1497:8;:15;1482:4;:11;:30;1474:91;;;;-1:-1:-1;;;1474:91:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1622:11;;1606:13;1670:147;1694:5;1690:1;:9;1670:147;;;1771:39;1798:8;1807:1;1798:11;;;;;;;;;;;;;;1771:8;:13;1780:3;-1:-1:-1;;;;;1771:13:3;-1:-1:-1;;;;;1771:13:3;;;;;;;;;;;;:22;1785:4;1790:1;1785:7;;;;;;;1771:39;1746:8;:13;1755:3;-1:-1:-1;;;;;1746:13:3;-1:-1:-1;;;;;1746:13:3;;;;;;;;;;;;:22;1760:4;1765:1;1760:7;;;;;;;;;;;;;;;;;;;1746:22;;;;;;;;;;-1:-1:-1;1746:22:3;:64;1701:3;;1670:147;;;;1897:3;-1:-1:-1;;;;;1857:60:3;1891:3;-1:-1:-1;;;;;1857:60:3;1871:10;-1:-1:-1;;;;;1857:60:3;;1902:4;1908:8;1857:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:69;2017:3;2023;2028:4;2034:8;2044:5;1981:27;:69::i;6100:107:4:-;1081:13;;;;:8;:13;;;;;;6168:3;;-1:-1:-1;;;;;1081:13:4;1098:10;1081:27;1073:89;;;;-1:-1:-1;;;1073:89:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6183:13:4::1;::::0;;;:8:::1;:13;::::0;;;;:19;;-1:-1:-1;;;;;;6183:19:4::1;-1:-1:-1::0;;;;;6183:19:4;;;::::1;::::0;;;::::1;::::0;;6100:107::o;6836:159:1:-;-1:-1:-1;;;;;6962:17:1;;;6930:15;6962:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;6836:159::o;3517:367::-;-1:-1:-1;;;;;3669:15:1;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;3694:7;3669:24;:33::i;:::-;-1:-1:-1;;;;;3646:15:1;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;3748:13;;;;;;;;;;;:18;;;;;;;;:31;;3771:7;3748:22;:31::i;:::-;-1:-1:-1;;;;;3727:13:1;;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:52;;;;3827;;;;;;;;;;;;;3727:13;;3827:52;;;;3842:10;;3827:52;;;;;;;;;;;3517:367;;;;:::o;3992:421::-;4165:16;:3;-1:-1:-1;;;;;4165:14:1;;:16::i;:::-;4161:248;;;4191:13;4229:3;-1:-1:-1;;;;;4207:44:1;;4252:10;4264:5;4271:3;4276:7;4285:5;4207:84;;;;;;;;;;;;;-1:-1:-1;;;;;4207:84:1;;;;;;-1:-1:-1;;;;;4207:84:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4207:84:1;;-1:-1:-1;;;;;;;4307:32:1;;-1:-1:-1;;;4307:32:1;4299:103;;;;-1:-1:-1;;;4299:103:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;159:829:11;568:10;;555;;542;;529;;516;;304:13;;348:2;;380;;412;;444;;476;;304:13;;516:23;;;;:36;;;:49;;;:62;505:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;505:74:11;-1:-1:-1;483:96:11;-1:-1:-1;483:96:11;621:9;;638:61;662:3;:10;658:1;:14;638:61;;;693:3;697:1;693:6;;;;;;;;;;;;;;;;679;686:3;;;;;;679:11;;;;;;;;;;;:20;-1:-1:-1;;;;;679:20:11;;;;;;;;-1:-1:-1;674:3:11;;638:61;;;;708:9;703:61;727:3;:10;723:1;:14;703:61;;;758:3;762:1;758:6;;;;;;;;;;;;;;;;744;751:3;;;;;;744:11;;;;;;;;;;;:20;-1:-1:-1;;;;;744:20:11;;;;;;;;-1:-1:-1;739:3:11;;703:61;;;;773:9;768:61;792:3;:10;788:1;:14;768:61;;;823:3;827:1;823:6;;;;;;;;;;;;;;;;809;816:3;;;;;;809:11;;;;;;;;;;;:20;-1:-1:-1;;;;;809:20:11;;;;;;;;-1:-1:-1;804:3:11;;768:61;;;;838:9;833:61;857:3;:10;853:1;:14;833:61;;;888:3;892:1;888:6;;;;;;;;;;;;;;;;874;881:3;;;;;;874:11;;;;;;;;;;;:20;-1:-1:-1;;;;;874:20:11;;;;;;;;-1:-1:-1;869:3:11;;833:61;;;;903:9;898:61;922:3;:10;918:1;:14;898:61;;;953:3;957:1;953:6;;;;;;;;;;;;;;;;939;946:3;;;;;;939:11;;;;;;;;;;;:20;-1:-1:-1;;;;;939:20:11;;;;;;;;-1:-1:-1;934:3:11;;898:61;;;-1:-1:-1;977:6:11;;159:829;-1:-1:-1;;;;;;;;;;;;;159:829:11:o;1219:158:10:-;1277:7;1305:1;1300;:6;;1292:42;;;;;-1:-1:-1;;;1292:42:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1352:5:10;;;1219:158::o;1160:398:0:-;1221:4;1473:21;;1509:15;;;;;:43;;-1:-1:-1;825:66:0;1528:24;;;1501:52;-1:-1:-1;;1160:398:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://1038174bda7d6b066a96ca4960e007bd4a15e90811c24f816d0f5695b9fe2670
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.