ETH Price: $3,299.01 (-3.70%)
Gas: 8 Gwei

Token

Alivacious (RUDY)
 

Overview

Max Total Supply

0 RUDY

Holders

699

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 RUDY
0x4da9791c6eac90081f835dc59b887519473945a6
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:
Alivacious

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 12: Alivacious.sol
// SPDX-License-Identifier: MIT
// Contract written by bcBread.
// !vibe
pragma solidity ^0.8.0;

import "ERC721.sol";
import "Ownable.sol";
import "Counters.sol";
contract Alivacious is ERC721, Ownable{
  using Strings for uint;
  using Counters for Counters.Counter;

  Counters.Counter public _supply;
  string public constant NR = "ipfs://QmajiMumwDCrxBLbHfFuTt2tY5Tv7qzt3r1uRfQbyJAyok/rose.json";
  string baseURI = "ipfs://QmfWCLGA46opuCsuA8NTEMMNw2bTDfe8qWyybPofewMbE1/";//initialize "hidden" URI here
  string constant baseExtension = ".json";
  uint public cost = 25000000000000000;
  uint public constant maxSupply = 5000;
  uint private  maxMint= 11;
  uint private maxPerWallet = 11;//
  bool public paused = true;
  bool public presaleOnly = true;
  bool public revealed = false;
  mapping(address => bool) whitelistedAddresses;
  
  constructor () ERC721("Alivacious", "RUDY")payable{}
  

  // public
  function presaleMint(uint qty) external payable {
        
        uint _maxPerWallet = maxPerWallet;
        require(whitelistedAddresses[msg.sender], "WL Only");
        require(balanceOf(msg.sender) + qty < _maxPerWallet, "Wallet Max");//balance in wallet + amount minting
        require(msg.value >= 25000000000000000 * qty, "Amount of Ether sent too small");
        require(qty < maxMint, "Greedy"); //Less than 10.
        require((_supply.current() + qty) < 5001, "SoldOut");
        
        for (uint i = 0; i < qty; i++) {
      _supply.increment();
      _mint(msg.sender, _supply.current());
    }
        
    (bool success, ) = payable(0x07709a9E3B157FA33f51Ad627Fa6931c87f9F575).call{value: msg.value * 25 / 100}("");
        require(success);
   
    }


  function mint(uint qty) external payable {
        uint _cost = cost;
        uint _maxPerWallet = maxPerWallet;
        require(presaleOnly == false);
        require(balanceOf(msg.sender) + qty < _maxPerWallet, "Wallet Max");//balance in wallet + amount minting
        require(msg.value >= _cost * qty, "Amount of Ether sent too small");
        require(qty < 11, "Greedy");//Less than 10.
        require((_supply.current() + qty) < 5001, "SoldOut");
        
        for (uint i = 0; i < qty; i++) 
    {
      _supply.increment();
      _mint(msg.sender, _supply.current());
    }
        
    (bool success, ) = payable(0x07709a9E3B157FA33f51Ad627Fa6931c87f9F575).call{value: msg.value * 25 / 100}("");
        require(success);
   
    }

    function tokenURI(uint tokenId)
    public
    view
    virtual
    override
    returns (string memory) 
  {
     if(revealed == false) {
        return NR;
    }
    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json"))
        : "";
  }
  
    


    // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  //only owner
  function addUser(address  _addressToWhitelist) public onlyOwner {
    whitelistedAddresses[_addressToWhitelist] = true;
}

  function batchAddUsers(address[] memory _users) external onlyOwner{
      uint size = _users.length;
      for(uint i=0; i < size; i++){
          address user = _users[i];
          whitelistedAddresses[user] = true;
      }
  } 

  function setCost(uint _newCost) external onlyOwner {
    cost = _newCost;//change price must be in gwei
  }

  function setBaseURI(string memory _newBaseURI) external onlyOwner {
    baseURI = _newBaseURI;//unhide by entering NEW baseURI
  }

  function pause(bool _state) external onlyOwner {
    paused = _state;//set to false to "unpause"
  }

  function setPresaleOnly(bool _state) external onlyOwner {
    presaleOnly = _state;//set to false for main mint
  }

  function setMax(uint _newMax) external onlyOwner {
    maxPerWallet = _newMax;//increase amount per wallet after launch
  }

  function setMaxMint(uint _newMaxMint) external onlyOwner {
    maxMint = _newMaxMint;//increase amount per wallet after launch
  }

  function reveal(bool _state) external onlyOwner {
    revealed = _state;//increase amount per wallet after launch
  }
 
  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 3 of 12: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 12: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 5 of 12: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "IERC165.sol";

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

File 6 of 12: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "IERC721.sol";
import "IERC721Receiver.sol";
import "IERC721Metadata.sol";
import "Address.sol";
import "Context.sol";
import "Strings.sol";
import "ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 7 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 8 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 9 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 10 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "Context.sol";

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"NR","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_supply","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressToWhitelist","type":"address"}],"name":"addUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"batchAddUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","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":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresaleOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60e060405260366080818152906200266d60a0398051620000299160089160209091019062000128565b506658d15e17628000600955600b600a818155908055600c805462ffffff191661010117905560408051808201825291825269416c69766163696f757360b01b6020808401918252825180840190935260048352635255445960e01b908301528251620000999160009162000128565b508051620000af90600190602084019062000128565b505050620000cc620000c6620000d260201b60201c565b620000d6565b6200020b565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013690620001ce565b90600052602060002090601f0160209004810192826200015a5760008555620001a5565b82601f106200017557805160ff1916838001178555620001a5565b82800160010185558215620001a5579182015b82811115620001a557825182559160200191906001019062000188565b50620001b3929150620001b7565b5090565b5b80821115620001b35760008155600101620001b8565b600181811c90821680620001e357607f821691505b602082108114156200020557634e487b7160e01b600052602260045260246000fd5b50919050565b612452806200021b6000396000f3fe6080604052600436106102045760003560e01c806355f804b31161011857806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146105a6578063c9b298f1146105c6578063d5abeb01146105d9578063e985e9c5146105ef578063f2fde38b1461063857600080fd5b806395d89b411461053e578063a0712d6814610553578063a22cb46514610566578063b88d4fde1461058657600080fd5b806370a08231116100e757806370a08231146104ab578063715018a6146104cb578063739bab09146104e05780638da5cb5b14610500578063940cd05b1461051e57600080fd5b806355f804b3146104325780635c975abb146104525780636352211e1461046c578063672a7fe01461048c57600080fd5b806323b872dd1161019b57806342842e0e1161016a57806342842e0e1461039d57806344a0d68a146103bd578063458b221a146103dd57806351830227146103f2578063547520fe1461041257600080fd5b806323b872dd1461033557806330a464f5146103555780633ccfd60b14610375578063421b2d8b1461037d57600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806313faede6146102da57806315945790146102fe5780631fe9eabc1461031557600080fd5b806301ffc9a71461020957806302329a291461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046120d0565b610658565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e6102593660046120b5565b6106aa565b005b34801561026c57600080fd5b5061027561070a565b6040516102359190612213565b34801561028e57600080fd5b506102a261029d366004612153565b61079c565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d5366004611fd7565b610831565b3480156102e657600080fd5b506102f060095481565b604051908152602001610235565b34801561030a57600080fd5b506007546102f09081565b34801561032157600080fd5b5061025e610330366004612153565b610947565b34801561034157600080fd5b5061025e610350366004611ef5565b610994565b34801561036157600080fd5b5061025e6103703660046120b5565b610a0f565b61025e610a71565b34801561038957600080fd5b5061025e610398366004611ea7565b610b11565b3480156103a957600080fd5b5061025e6103b8366004611ef5565b610b7d565b3480156103c957600080fd5b5061025e6103d8366004612153565b610b98565b3480156103e957600080fd5b50610275610be5565b3480156103fe57600080fd5b50600c546102299062010000900460ff1681565b34801561041e57600080fd5b5061025e61042d366004612153565b610c01565b34801561043e57600080fd5b5061025e61044d36600461210a565b610c4e565b34801561045e57600080fd5b50600c546102299060ff1681565b34801561047857600080fd5b506102a2610487366004612153565b610cad565b34801561049857600080fd5b50600c5461022990610100900460ff1681565b3480156104b757600080fd5b506102f06104c6366004611ea7565b610d24565b3480156104d757600080fd5b5061025e610dab565b3480156104ec57600080fd5b5061025e6104fb366004612001565b610dff565b34801561050c57600080fd5b506006546001600160a01b03166102a2565b34801561052a57600080fd5b5061025e6105393660046120b5565b610ea9565b34801561054a57600080fd5b50610275610f0d565b61025e610561366004612153565b610f1c565b34801561057257600080fd5b5061025e610581366004611fad565b611127565b34801561059257600080fd5b5061025e6105a1366004611f31565b611132565b3480156105b257600080fd5b506102756105c1366004612153565b6111ae565b61025e6105d4366004612153565b61123c565b3480156105e557600080fd5b506102f061138881565b3480156105fb57600080fd5b5061022961060a366004611ec2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b5061025e610653366004611ea7565b611475565b60006001600160e01b031982166380ac58cd60e01b148061068957506001600160e01b03198216635b5e139f60e01b145b806106a457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146106f75760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064015b60405180910390fd5b600c805460ff1916911515919091179055565b606060008054610719906122e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610745906122e5565b80156107925780601f1061076757610100808354040283529160200191610792565b820191906000526020600020905b81548152906001019060200180831161077557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ee565b506000908152600460205260409020546001600160a01b031690565b600061083c82610cad565b9050806001600160a01b0316836001600160a01b031614156108aa5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ee565b336001600160a01b03821614806108c657506108c6813361060a565b6109385760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ee565b610942838361152b565b505050565b6006546001600160a01b0316331461098f5760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600b55565b61099e3382611599565b610a045760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106ee565b610942838383611690565b6006546001600160a01b03163314610a575760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600c80549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610ab95760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b604051600090339047908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b0e57600080fd5b50565b6006546001600160a01b03163314610b595760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b61094283838360405180602001604052806000815250611132565b6006546001600160a01b03163314610be05760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600955565b6040518060600160405280603f81526020016123be603f913981565b6006546001600160a01b03163314610c495760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600a55565b6006546001600160a01b03163314610c965760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b8051610ca9906008906020840190611d8a565b5050565b6000818152600260205260408120546001600160a01b0316806106a45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ee565b60006001600160a01b038216610d8f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ee565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610df35760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b610dfd600061182c565b565b6006546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b805160005b81811015610942576000838281518110610e6857610e6861237b565b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff191660011790555080610ea181612320565b915050610e4c565b6006546001600160a01b03163314610ef15760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600c8054911515620100000262ff000019909216919091179055565b606060018054610719906122e5565b600954600b54600c54610100900460ff1615610f3757600080fd5b8083610f4233610d24565b610f4c9190612257565b10610f865760405162461bcd60e51b815260206004820152600a6024820152690aec2d8d8cae8409ac2f60b31b60448201526064016106ee565b610f908383612283565b341015610fdf5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206f662045746865722073656e7420746f6f20736d616c6c000060448201526064016106ee565b600b83106110185760405162461bcd60e51b815260206004820152600660248201526547726565647960d01b60448201526064016106ee565b6113898361102560075490565b61102f9190612257565b106110665760405162461bcd60e51b815260206004820152600760248201526614dbdb1913dd5d60ca1b60448201526064016106ee565b60005b838110156110a35761107f600780546001019055565b6110913361108c60075490565b61187e565b8061109b81612320565b915050611069565b5060007307709a9e3b157fa33f51ad627fa6931c87f9f57560646110c8346019612283565b6110d2919061226f565b604051600081818185875af1925050503d806000811461110e576040519150601f19603f3d011682016040523d82523d6000602084013e611113565b606091505b505090508061112157600080fd5b50505050565b610ca93383836119c0565b61113c3383611599565b6111a25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106ee565b61112184848484611a8f565b600c5460609062010000900460ff166111e0576040518060600160405280603f81526020016123be603f913992915050565b60006111ea611b0d565b9050600081511161120a5760405180602001604052806000815250611235565b8061121484611b1c565b604051602001611225929190612198565b6040516020818303038152906040525b9392505050565b600b54336000908152600d602052604090205460ff166112885760405162461bcd60e51b8152602060048201526007602482015266574c204f6e6c7960c81b60448201526064016106ee565b808261129333610d24565b61129d9190612257565b106112d75760405162461bcd60e51b815260206004820152600a6024820152690aec2d8d8cae8409ac2f60b31b60448201526064016106ee565b6112e8826658d15e17628000612283565b3410156113375760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206f662045746865722073656e7420746f6f20736d616c6c000060448201526064016106ee565b600a5482106113715760405162461bcd60e51b815260206004820152600660248201526547726565647960d01b60448201526064016106ee565b6113898261137e60075490565b6113889190612257565b106113bf5760405162461bcd60e51b815260206004820152600760248201526614dbdb1913dd5d60ca1b60448201526064016106ee565b60005b828110156113f7576113d8600780546001019055565b6113e53361108c60075490565b806113ef81612320565b9150506113c2565b5060007307709a9e3b157fa33f51ad627fa6931c87f9f575606461141c346019612283565b611426919061226f565b604051600081818185875af1925050503d8060008114611462576040519150601f19603f3d011682016040523d82523d6000602084013e611467565b606091505b505090508061094257600080fd5b6006546001600160a01b031633146114bd5760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b6001600160a01b0381166115225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ee565b610b0e8161182c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061156082610cad565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116125760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ee565b600061161d83610cad565b9050806001600160a01b0316846001600160a01b031614806116585750836001600160a01b031661164d8461079c565b6001600160a01b0316145b8061168857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116a382610cad565b6001600160a01b0316146117075760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106ee565b6001600160a01b0382166117695760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ee565b61177460008261152b565b6001600160a01b038316600090815260036020526040812080546001929061179d9084906122a2565b90915550506001600160a01b03821660009081526003602052604081208054600192906117cb908490612257565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166118d45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ee565b6000818152600260205260409020546001600160a01b0316156119395760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ee565b6001600160a01b0382166000908152600360205260408120805460019290611962908490612257565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b03161415611a225760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ee565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a9a848484611690565b611aa684848484611c32565b6111215760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016106ee565b606060088054610719906122e5565b606081611b405750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b6a5780611b5481612320565b9150611b639050600a8361226f565b9150611b44565b60008167ffffffffffffffff811115611b8557611b85612391565b6040519080825280601f01601f191660200182016040528015611baf576020820181803683370190505b5090505b841561168857611bc46001836122a2565b9150611bd1600a8661233b565b611bdc906030612257565b60f81b818381518110611bf157611bf161237b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c2b600a8661226f565b9450611bb3565b60006001600160a01b0384163b15611d7f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c769033908990889088906004016121d7565b602060405180830381600087803b158015611c9057600080fd5b505af1925050508015611cc0575060408051601f3d908101601f19168201909252611cbd918101906120ed565b60015b611d65573d808015611cee576040519150601f19603f3d011682016040523d82523d6000602084013e611cf3565b606091505b508051611d5d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016106ee565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611688565b506001949350505050565b828054611d96906122e5565b90600052602060002090601f016020900481019282611db85760008555611dfe565b82601f10611dd157805160ff1916838001178555611dfe565b82800160010185558215611dfe579182015b82811115611dfe578251825591602001919060010190611de3565b50611e0a929150611e0e565b5090565b5b80821115611e0a5760008155600101611e0f565b600067ffffffffffffffff831115611e3d57611e3d612391565b611e50601f8401601f1916602001612226565b9050828152838383011115611e6457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611e9257600080fd5b919050565b80358015158114611e9257600080fd5b600060208284031215611eb957600080fd5b61123582611e7b565b60008060408385031215611ed557600080fd5b611ede83611e7b565b9150611eec60208401611e7b565b90509250929050565b600080600060608486031215611f0a57600080fd5b611f1384611e7b565b9250611f2160208501611e7b565b9150604084013590509250925092565b60008060008060808587031215611f4757600080fd5b611f5085611e7b565b9350611f5e60208601611e7b565b925060408501359150606085013567ffffffffffffffff811115611f8157600080fd5b8501601f81018713611f9257600080fd5b611fa187823560208401611e23565b91505092959194509250565b60008060408385031215611fc057600080fd5b611fc983611e7b565b9150611eec60208401611e97565b60008060408385031215611fea57600080fd5b611ff383611e7b565b946020939093013593505050565b6000602080838503121561201457600080fd5b823567ffffffffffffffff8082111561202c57600080fd5b818501915085601f83011261204057600080fd5b81358181111561205257612052612391565b8060051b9150612063848301612226565b8181528481019084860184860187018a101561207e57600080fd5b600095505b838610156120a85761209481611e7b565b835260019590950194918601918601612083565b5098975050505050505050565b6000602082840312156120c757600080fd5b61123582611e97565b6000602082840312156120e257600080fd5b8135611235816123a7565b6000602082840312156120ff57600080fd5b8151611235816123a7565b60006020828403121561211c57600080fd5b813567ffffffffffffffff81111561213357600080fd5b8201601f8101841361214457600080fd5b61168884823560208401611e23565b60006020828403121561216557600080fd5b5035919050565b600081518084526121848160208601602086016122b9565b601f01601f19169290920160200192915050565b600083516121aa8184602088016122b9565b8351908301906121be8183602088016122b9565b64173539b7b760d91b9101908152600501949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612209608083018461216c565b9695505050505050565b602081526000611235602083018461216c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561224f5761224f612391565b604052919050565b6000821982111561226a5761226a61234f565b500190565b60008261227e5761227e612365565b500490565b600081600019048311821515161561229d5761229d61234f565b500290565b6000828210156122b4576122b461234f565b500390565b60005b838110156122d45781810151838201526020016122bc565b838111156111215750506000910152565b600181811c908216806122f957607f821691505b6020821081141561231a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123345761233461234f565b5060010190565b60008261234a5761234a612365565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b0e57600080fdfe697066733a2f2f516d616a694d756d7744437278424c6248664675547432745935547637717a743372317552665162794a41796f6b2f726f73652e6a736f6e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220449235a81815db6724052bbe21e5fbf4f2da15cd3533bac0cf9612f07340f07464736f6c63430008070033697066733a2f2f516d6657434c474134366f707543737541384e54454d4d4e77326254446665387157797962506f6665774d6245312f

Deployed Bytecode

0x6080604052600436106102045760003560e01c806355f804b31161011857806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146105a6578063c9b298f1146105c6578063d5abeb01146105d9578063e985e9c5146105ef578063f2fde38b1461063857600080fd5b806395d89b411461053e578063a0712d6814610553578063a22cb46514610566578063b88d4fde1461058657600080fd5b806370a08231116100e757806370a08231146104ab578063715018a6146104cb578063739bab09146104e05780638da5cb5b14610500578063940cd05b1461051e57600080fd5b806355f804b3146104325780635c975abb146104525780636352211e1461046c578063672a7fe01461048c57600080fd5b806323b872dd1161019b57806342842e0e1161016a57806342842e0e1461039d57806344a0d68a146103bd578063458b221a146103dd57806351830227146103f2578063547520fe1461041257600080fd5b806323b872dd1461033557806330a464f5146103555780633ccfd60b14610375578063421b2d8b1461037d57600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806313faede6146102da57806315945790146102fe5780631fe9eabc1461031557600080fd5b806301ffc9a71461020957806302329a291461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046120d0565b610658565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e6102593660046120b5565b6106aa565b005b34801561026c57600080fd5b5061027561070a565b6040516102359190612213565b34801561028e57600080fd5b506102a261029d366004612153565b61079c565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d5366004611fd7565b610831565b3480156102e657600080fd5b506102f060095481565b604051908152602001610235565b34801561030a57600080fd5b506007546102f09081565b34801561032157600080fd5b5061025e610330366004612153565b610947565b34801561034157600080fd5b5061025e610350366004611ef5565b610994565b34801561036157600080fd5b5061025e6103703660046120b5565b610a0f565b61025e610a71565b34801561038957600080fd5b5061025e610398366004611ea7565b610b11565b3480156103a957600080fd5b5061025e6103b8366004611ef5565b610b7d565b3480156103c957600080fd5b5061025e6103d8366004612153565b610b98565b3480156103e957600080fd5b50610275610be5565b3480156103fe57600080fd5b50600c546102299062010000900460ff1681565b34801561041e57600080fd5b5061025e61042d366004612153565b610c01565b34801561043e57600080fd5b5061025e61044d36600461210a565b610c4e565b34801561045e57600080fd5b50600c546102299060ff1681565b34801561047857600080fd5b506102a2610487366004612153565b610cad565b34801561049857600080fd5b50600c5461022990610100900460ff1681565b3480156104b757600080fd5b506102f06104c6366004611ea7565b610d24565b3480156104d757600080fd5b5061025e610dab565b3480156104ec57600080fd5b5061025e6104fb366004612001565b610dff565b34801561050c57600080fd5b506006546001600160a01b03166102a2565b34801561052a57600080fd5b5061025e6105393660046120b5565b610ea9565b34801561054a57600080fd5b50610275610f0d565b61025e610561366004612153565b610f1c565b34801561057257600080fd5b5061025e610581366004611fad565b611127565b34801561059257600080fd5b5061025e6105a1366004611f31565b611132565b3480156105b257600080fd5b506102756105c1366004612153565b6111ae565b61025e6105d4366004612153565b61123c565b3480156105e557600080fd5b506102f061138881565b3480156105fb57600080fd5b5061022961060a366004611ec2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561064457600080fd5b5061025e610653366004611ea7565b611475565b60006001600160e01b031982166380ac58cd60e01b148061068957506001600160e01b03198216635b5e139f60e01b145b806106a457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146106f75760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064015b60405180910390fd5b600c805460ff1916911515919091179055565b606060008054610719906122e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610745906122e5565b80156107925780601f1061076757610100808354040283529160200191610792565b820191906000526020600020905b81548152906001019060200180831161077557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ee565b506000908152600460205260409020546001600160a01b031690565b600061083c82610cad565b9050806001600160a01b0316836001600160a01b031614156108aa5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106ee565b336001600160a01b03821614806108c657506108c6813361060a565b6109385760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106ee565b610942838361152b565b505050565b6006546001600160a01b0316331461098f5760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600b55565b61099e3382611599565b610a045760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106ee565b610942838383611690565b6006546001600160a01b03163314610a575760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600c80549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610ab95760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b604051600090339047908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b0e57600080fd5b50565b6006546001600160a01b03163314610b595760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b61094283838360405180602001604052806000815250611132565b6006546001600160a01b03163314610be05760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600955565b6040518060600160405280603f81526020016123be603f913981565b6006546001600160a01b03163314610c495760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600a55565b6006546001600160a01b03163314610c965760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b8051610ca9906008906020840190611d8a565b5050565b6000818152600260205260408120546001600160a01b0316806106a45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106ee565b60006001600160a01b038216610d8f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106ee565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610df35760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b610dfd600061182c565b565b6006546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b805160005b81811015610942576000838281518110610e6857610e6861237b565b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff191660011790555080610ea181612320565b915050610e4c565b6006546001600160a01b03163314610ef15760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b600c8054911515620100000262ff000019909216919091179055565b606060018054610719906122e5565b600954600b54600c54610100900460ff1615610f3757600080fd5b8083610f4233610d24565b610f4c9190612257565b10610f865760405162461bcd60e51b815260206004820152600a6024820152690aec2d8d8cae8409ac2f60b31b60448201526064016106ee565b610f908383612283565b341015610fdf5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206f662045746865722073656e7420746f6f20736d616c6c000060448201526064016106ee565b600b83106110185760405162461bcd60e51b815260206004820152600660248201526547726565647960d01b60448201526064016106ee565b6113898361102560075490565b61102f9190612257565b106110665760405162461bcd60e51b815260206004820152600760248201526614dbdb1913dd5d60ca1b60448201526064016106ee565b60005b838110156110a35761107f600780546001019055565b6110913361108c60075490565b61187e565b8061109b81612320565b915050611069565b5060007307709a9e3b157fa33f51ad627fa6931c87f9f57560646110c8346019612283565b6110d2919061226f565b604051600081818185875af1925050503d806000811461110e576040519150601f19603f3d011682016040523d82523d6000602084013e611113565b606091505b505090508061112157600080fd5b50505050565b610ca93383836119c0565b61113c3383611599565b6111a25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106ee565b61112184848484611a8f565b600c5460609062010000900460ff166111e0576040518060600160405280603f81526020016123be603f913992915050565b60006111ea611b0d565b9050600081511161120a5760405180602001604052806000815250611235565b8061121484611b1c565b604051602001611225929190612198565b6040516020818303038152906040525b9392505050565b600b54336000908152600d602052604090205460ff166112885760405162461bcd60e51b8152602060048201526007602482015266574c204f6e6c7960c81b60448201526064016106ee565b808261129333610d24565b61129d9190612257565b106112d75760405162461bcd60e51b815260206004820152600a6024820152690aec2d8d8cae8409ac2f60b31b60448201526064016106ee565b6112e8826658d15e17628000612283565b3410156113375760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206f662045746865722073656e7420746f6f20736d616c6c000060448201526064016106ee565b600a5482106113715760405162461bcd60e51b815260206004820152600660248201526547726565647960d01b60448201526064016106ee565b6113898261137e60075490565b6113889190612257565b106113bf5760405162461bcd60e51b815260206004820152600760248201526614dbdb1913dd5d60ca1b60448201526064016106ee565b60005b828110156113f7576113d8600780546001019055565b6113e53361108c60075490565b806113ef81612320565b9150506113c2565b5060007307709a9e3b157fa33f51ad627fa6931c87f9f575606461141c346019612283565b611426919061226f565b604051600081818185875af1925050503d8060008114611462576040519150601f19603f3d011682016040523d82523d6000602084013e611467565b606091505b505090508061094257600080fd5b6006546001600160a01b031633146114bd5760405162461bcd60e51b815260206004820181905260248201526000805160206123fd83398151915260448201526064016106ee565b6001600160a01b0381166115225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ee565b610b0e8161182c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061156082610cad565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166116125760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106ee565b600061161d83610cad565b9050806001600160a01b0316846001600160a01b031614806116585750836001600160a01b031661164d8461079c565b6001600160a01b0316145b8061168857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116a382610cad565b6001600160a01b0316146117075760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106ee565b6001600160a01b0382166117695760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106ee565b61177460008261152b565b6001600160a01b038316600090815260036020526040812080546001929061179d9084906122a2565b90915550506001600160a01b03821660009081526003602052604081208054600192906117cb908490612257565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166118d45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106ee565b6000818152600260205260409020546001600160a01b0316156119395760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106ee565b6001600160a01b0382166000908152600360205260408120805460019290611962908490612257565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b03161415611a225760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106ee565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a9a848484611690565b611aa684848484611c32565b6111215760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016106ee565b606060088054610719906122e5565b606081611b405750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b6a5780611b5481612320565b9150611b639050600a8361226f565b9150611b44565b60008167ffffffffffffffff811115611b8557611b85612391565b6040519080825280601f01601f191660200182016040528015611baf576020820181803683370190505b5090505b841561168857611bc46001836122a2565b9150611bd1600a8661233b565b611bdc906030612257565b60f81b818381518110611bf157611bf161237b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c2b600a8661226f565b9450611bb3565b60006001600160a01b0384163b15611d7f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c769033908990889088906004016121d7565b602060405180830381600087803b158015611c9057600080fd5b505af1925050508015611cc0575060408051601f3d908101601f19168201909252611cbd918101906120ed565b60015b611d65573d808015611cee576040519150601f19603f3d011682016040523d82523d6000602084013e611cf3565b606091505b508051611d5d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016106ee565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611688565b506001949350505050565b828054611d96906122e5565b90600052602060002090601f016020900481019282611db85760008555611dfe565b82601f10611dd157805160ff1916838001178555611dfe565b82800160010185558215611dfe579182015b82811115611dfe578251825591602001919060010190611de3565b50611e0a929150611e0e565b5090565b5b80821115611e0a5760008155600101611e0f565b600067ffffffffffffffff831115611e3d57611e3d612391565b611e50601f8401601f1916602001612226565b9050828152838383011115611e6457600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611e9257600080fd5b919050565b80358015158114611e9257600080fd5b600060208284031215611eb957600080fd5b61123582611e7b565b60008060408385031215611ed557600080fd5b611ede83611e7b565b9150611eec60208401611e7b565b90509250929050565b600080600060608486031215611f0a57600080fd5b611f1384611e7b565b9250611f2160208501611e7b565b9150604084013590509250925092565b60008060008060808587031215611f4757600080fd5b611f5085611e7b565b9350611f5e60208601611e7b565b925060408501359150606085013567ffffffffffffffff811115611f8157600080fd5b8501601f81018713611f9257600080fd5b611fa187823560208401611e23565b91505092959194509250565b60008060408385031215611fc057600080fd5b611fc983611e7b565b9150611eec60208401611e97565b60008060408385031215611fea57600080fd5b611ff383611e7b565b946020939093013593505050565b6000602080838503121561201457600080fd5b823567ffffffffffffffff8082111561202c57600080fd5b818501915085601f83011261204057600080fd5b81358181111561205257612052612391565b8060051b9150612063848301612226565b8181528481019084860184860187018a101561207e57600080fd5b600095505b838610156120a85761209481611e7b565b835260019590950194918601918601612083565b5098975050505050505050565b6000602082840312156120c757600080fd5b61123582611e97565b6000602082840312156120e257600080fd5b8135611235816123a7565b6000602082840312156120ff57600080fd5b8151611235816123a7565b60006020828403121561211c57600080fd5b813567ffffffffffffffff81111561213357600080fd5b8201601f8101841361214457600080fd5b61168884823560208401611e23565b60006020828403121561216557600080fd5b5035919050565b600081518084526121848160208601602086016122b9565b601f01601f19169290920160200192915050565b600083516121aa8184602088016122b9565b8351908301906121be8183602088016122b9565b64173539b7b760d91b9101908152600501949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612209608083018461216c565b9695505050505050565b602081526000611235602083018461216c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561224f5761224f612391565b604052919050565b6000821982111561226a5761226a61234f565b500190565b60008261227e5761227e612365565b500490565b600081600019048311821515161561229d5761229d61234f565b500290565b6000828210156122b4576122b461234f565b500390565b60005b838110156122d45781810151838201526020016122bc565b838111156111215750506000910152565b600181811c908216806122f957607f821691505b6020821081141561231a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123345761233461234f565b5060010190565b60008261234a5761234a612365565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b0e57600080fdfe697066733a2f2f516d616a694d756d7744437278424c6248664675547432745935547637717a743372317552665162794a41796f6b2f726f73652e6a736f6e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220449235a81815db6724052bbe21e5fbf4f2da15cd3533bac0cf9612f07340f07464736f6c63430008070033

Deployed Bytecode Sourcemap

164:4147:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1491:300:5;;;;;;;;;;-1:-1:-1;1491:300:5;;;;;:::i;:::-;;:::i;:::-;;;7092:14:12;;7085:22;7067:41;;7055:2;7040:18;1491:300:5;;;;;;;;3548:100:1;;;;;;;;;;-1:-1:-1;3548:100:1;;;;;:::i;:::-;;:::i;:::-;;2409:98:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3921:217::-;;;;;;;;;;-1:-1:-1;3921:217:5;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6344:55:12;;;6326:74;;6314:2;6299:18;3921:217:5;6180:226:12;3459:401:5;;;;;;;;;;-1:-1:-1;3459:401:5;;;;;:::i;:::-;;:::i;554:36:1:-;;;;;;;;;;;;;;;;;;;15153:25:12;;;15141:2;15126:18;554:36:1;15007:177:12;272:31:1;;;;;;;;;;-1:-1:-1;272:31:1;;;;;;3771:123;;;;;;;;;;-1:-1:-1;3771:123:1;;;;;:::i;:::-;;:::i;4648:330:5:-;;;;;;;;;;-1:-1:-1;4648:330:5;;;;;:::i;:::-;;:::i;3652:115:1:-;;;;;;;;;;-1:-1:-1;3652:115:1;;;;;:::i;:::-;;:::i;4154:155::-;;;:::i;2944:121::-;;;;;;;;;;-1:-1:-1;2944:121:1;;;;;:::i;:::-;;:::i;5044:179:5:-;;;;;;;;;;-1:-1:-1;5044:179:5;;;;;:::i;:::-;;:::i;3303:107:1:-;;;;;;;;;;-1:-1:-1;3303:107:1;;;;;:::i;:::-;;:::i;307:93::-;;;;;;;;;;;;;:::i;763:28::-;;;;;;;;;;-1:-1:-1;763:28:1;;;;;;;;;;;3898:130;;;;;;;;;;-1:-1:-1;3898:130:1;;;;;:::i;:::-;;:::i;3414:::-;;;;;;;;;;-1:-1:-1;3414:130:1;;;;;:::i;:::-;;:::i;700:25::-;;;;;;;;;;-1:-1:-1;700:25:1;;;;;;;;2112:235:5;;;;;;;;;;-1:-1:-1;2112:235:5;;;;;:::i;:::-;;:::i;729:30:1:-;;;;;;;;;;-1:-1:-1;729:30:1;;;;;;;;;;;1850:205:5;;;;;;;;;;-1:-1:-1;1850:205:5;;;;;:::i;:::-;;:::i;1659:101:10:-;;;;;;;;;;;;;:::i;3069:229:1:-;;;;;;;;;;-1:-1:-1;3069:229:1;;;;;:::i;:::-;;:::i;1027:85:10:-;;;;;;;;;;-1:-1:-1;1099:6:10;;-1:-1:-1;;;;;1099:6:10;1027:85;;4032:117:1;;;;;;;;;;-1:-1:-1;4032:117:1;;;;;:::i;:::-;;:::i;2571:102:5:-;;;;;;;;;;;;;:::i;1693:745:1:-;;;;;;:::i;:::-;;:::i;4205:153:5:-;;;;;;;;;;-1:-1:-1;4205:153:5;;;;;:::i;:::-;;:::i;5289:320::-;;;;;;;;;;-1:-1:-1;5289:320:5;;;;;:::i;:::-;;:::i;2444:352:1:-;;;;;;;;;;-1:-1:-1;2444:352:1;;;;;:::i;:::-;;:::i;918:770::-;;;;;;:::i;:::-;;:::i;594:37::-;;;;;;;;;;;;627:4;594:37;;4424:162:5;;;;;;;;;;-1:-1:-1;4424:162:5;;;;;:::i;:::-;-1:-1:-1;;;;;4544:25:5;;;4521:4;4544:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4424:162;1909:198:10;;;;;;;;;;-1:-1:-1;1909:198:10;;;;;:::i;:::-;;:::i;1491:300:5:-;1593:4;-1:-1:-1;;;;;;1628:40:5;;-1:-1:-1;;;1628:40:5;;:104;;-1:-1:-1;;;;;;;1684:48:5;;-1:-1:-1;;;1684:48:5;1628:104;:156;;;-1:-1:-1;;;;;;;;;;935:40:4;;;1748:36:5;1609:175;1491:300;-1:-1:-1;;1491:300:5:o;3548:100:1:-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;;;;;;;;;3601:6:1::1;:15:::0;;-1:-1:-1;;3601:15:1::1;::::0;::::1;;::::0;;;::::1;::::0;;3548:100::o;2409:98:5:-;2463:13;2495:5;2488:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:98;:::o;3921:217::-;3997:7;7169:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7169:16:5;4016:73;;;;-1:-1:-1;;;4016:73:5;;12946:2:12;4016:73:5;;;12928:21:12;12985:2;12965:18;;;12958:30;13024:34;13004:18;;;12997:62;-1:-1:-1;;;13075:18:12;;;13068:42;13127:19;;4016:73:5;12744:408:12;4016:73:5;-1:-1:-1;4107:24:5;;;;:15;:24;;;;;;-1:-1:-1;;;;;4107:24:5;;3921:217::o;3459:401::-;3539:13;3555:23;3570:7;3555:14;:23::i;:::-;3539:39;;3602:5;-1:-1:-1;;;;;3596:11:5;:2;-1:-1:-1;;;;;3596:11:5;;;3588:57;;;;-1:-1:-1;;;3588:57:5;;13720:2:12;3588:57:5;;;13702:21:12;13759:2;13739:18;;;13732:30;13798:34;13778:18;;;13771:62;-1:-1:-1;;;13849:18:12;;;13842:31;13890:19;;3588:57:5;13518:397:12;3588:57:5;719:10:2;-1:-1:-1;;;;;3677:21:5;;;;:62;;-1:-1:-1;3702:37:5;3719:5;719:10:2;4424:162:5;:::i;3702:37::-;3656:165;;;;-1:-1:-1;;;3656:165:5;;10641:2:12;3656:165:5;;;10623:21:12;10680:2;10660:18;;;10653:30;10719:34;10699:18;;;10692:62;10790:26;10770:18;;;10763:54;10834:19;;3656:165:5;10439:420:12;3656:165:5;3832:21;3841:2;3845:7;3832:8;:21::i;:::-;3529:331;3459:401;;:::o;3771:123:1:-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3826:12:1::1;:22:::0;3771:123::o;4648:330:5:-;4837:41;719:10:2;4870:7:5;4837:18;:41::i;:::-;4829:103;;;;-1:-1:-1;;;4829:103:5;;14122:2:12;4829:103:5;;;14104:21:12;14161:2;14141:18;;;14134:30;14200:34;14180:18;;;14173:62;-1:-1:-1;;;14251:18:12;;;14244:47;14308:19;;4829:103:5;13920:413:12;4829:103:5;4943:28;4953:4;4959:2;4963:7;4943:9;:28::i;3652:115:1:-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3714:11:1::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;3714:20:1;;::::1;::::0;;;::::1;::::0;;3652:115::o;4154:155::-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;4224:58:1::1;::::0;4206:12:::1;::::0;4232:10:::1;::::0;4256:21:::1;::::0;4206:12;4224:58;4206:12;4224:58;4256:21;4232:10;4224:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4205:77;;;4296:7;4288:16;;;::::0;::::1;;4199:110;4154:155::o:0;2944:121::-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;-1:-1:-1;;;;;3014:41:1::1;;::::0;;;:20:::1;:41;::::0;;;;:48;;-1:-1:-1;;3014:48:1::1;3058:4;3014:48;::::0;;2944:121::o;5044:179:5:-;5177:39;5194:4;5200:2;5204:7;5177:39;;;;;;;;;;;;:16;:39::i;3303:107:1:-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3360:4:1::1;:15:::0;3303:107::o;307:93::-;;;;;;;;;;;;;;;;;;;:::o;3898:130::-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3961:7:1::1;:21:::0;3898:130::o;3414:::-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3486:21:1;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;3414:130:::0;:::o;2112:235:5:-;2184:7;2219:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2219:16:5;2253:19;2245:73;;;;-1:-1:-1;;;2245:73:5;;11477:2:12;2245:73:5;;;11459:21:12;11516:2;11496:18;;;11489:30;11555:34;11535:18;;;11528:62;-1:-1:-1;;;11606:18:12;;;11599:39;11655:19;;2245:73:5;11275:405:12;1850:205:5;1922:7;-1:-1:-1;;;;;1949:19:5;;1941:74;;;;-1:-1:-1;;;1941:74:5;;11066:2:12;1941:74:5;;;11048:21:12;11105:2;11085:18;;;11078:30;11144:34;11124:18;;;11117:62;-1:-1:-1;;;11195:18:12;;;11188:40;11245:19;;1941:74:5;10864:406:12;1941:74:5;-1:-1:-1;;;;;;2032:16:5;;;;;:9;:16;;;;;;;1850:205::o;1659:101:10:-;1099:6;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;1723:30:::1;1750:1;1723:18;:30::i;:::-;1659:101::o:0;3069:229:1:-;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;3155:13:1;;3143:9:::1;3176:118;3194:4;3190:1;:8;3176:118;;;3216:12;3231:6;3238:1;3231:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3252:26:1::1;;::::0;;;:20:::1;:26:::0;;;;;;:33;;-1:-1:-1;;3252:33:1::1;3281:4;3252:33;::::0;;-1:-1:-1;3200:3:1;::::1;::::0;::::1;:::i;:::-;;;;3176:118;;4032:117:::0;1099:6:10;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;4086:8:1::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;4086:17:1;;::::1;::::0;;;::::1;::::0;;4032:117::o;2571:102:5:-;2627:13;2659:7;2652:14;;;;;:::i;1693:745:1:-;1757:4;;1792:12;;1822:11;;;;;;;:20;1814:29;;;;;;1891:13;1885:3;1861:21;1871:10;1861:9;:21::i;:::-;:27;;;;:::i;:::-;:43;1853:66;;;;-1:-1:-1;;;1853:66:1;;11887:2:12;1853:66:1;;;11869:21:12;11926:2;11906:18;;;11899:30;-1:-1:-1;;;11945:18:12;;;11938:40;11995:18;;1853:66:1;11685:334:12;1853:66:1;1986:11;1994:3;1986:5;:11;:::i;:::-;1973:9;:24;;1965:67;;;;-1:-1:-1;;;1965:67:1;;12226:2:12;1965:67:1;;;12208:21:12;12265:2;12245:18;;;12238:30;12304:32;12284:18;;;12277:60;12354:18;;1965:67:1;12024:354:12;1965:67:1;2056:2;2050:3;:8;2042:27;;;;-1:-1:-1;;;2042:27:1;;14875:2:12;2042:27:1;;;14857:21:12;14914:1;14894:18;;;14887:29;-1:-1:-1;;;14932:18:12;;;14925:36;14978:18;;2042:27:1;14673:329:12;2042:27:1;2130:4;2123:3;2103:17;:7;918:14:3;;827:112;2103:17:1;:23;;;;:::i;:::-;2102:32;2094:52;;;;-1:-1:-1;;;2094:52:1;;7545:2:12;2094:52:1;;;7527:21:12;7584:1;7564:18;;;7557:29;-1:-1:-1;;;7602:18:12;;;7595:37;7649:18;;2094:52:1;7343:330:12;2094:52:1;2170:6;2165:114;2186:3;2182:1;:7;2165:114;;;2209:19;:7;1032:19:3;;1050:1;1032:19;;;945:123;2209:19:1;2236:36;2242:10;2254:17;:7;918:14:3;;827:112;2254:17:1;2236:5;:36::i;:::-;2191:3;;;;:::i;:::-;;;;2165:114;;;-1:-1:-1;2294:12:1;2320:42;2393:3;2376:14;:9;2388:2;2376:14;:::i;:::-;:20;;;;:::i;:::-;2312:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:108;;;2419:7;2411:16;;;;;;1734:704;;;1693:745;:::o;4205:153:5:-;4299:52;719:10:2;4332:8:5;4342;4299:18;:52::i;5289:320::-;5458:41;719:10:2;5491:7:5;5458:18;:41::i;:::-;5450:103;;;;-1:-1:-1;;;5450:103:5;;14122:2:12;5450:103:5;;;14104:21:12;14161:2;14141:18;;;14134:30;14200:34;14180:18;;;14173:62;-1:-1:-1;;;14251:18:12;;;14244:47;14308:19;;5450:103:5;13920:413:12;5450:103:5;5563:39;5577:4;5583:2;5587:7;5596:5;5563:13;:39::i;2444:352:1:-;2562:8;;2534:13;;2562:8;;;;;2559:48;;2598:2;;;;;;;;;;;;;;;;;2591:9;2444:352;-1:-1:-1;;2444:352:1:o;2559:48::-;2612:28;2643:10;:8;:10::i;:::-;2612:41;;2697:1;2672:14;2666:28;:32;:125;;;;;;;;;;;;;;;;;2733:14;2749:18;:7;:16;:18::i;:::-;2716:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2666:125;2659:132;2444:352;-1:-1:-1;;;2444:352:1:o;918:770::-;1006:12;;1057:10;985:18;1036:32;;;:20;:32;;;;;;;;1028:52;;;;-1:-1:-1;;;1028:52:1;;14540:2:12;1028:52:1;;;14522:21:12;14579:1;14559:18;;;14552:29;-1:-1:-1;;;14597:18:12;;;14590:37;14644:18;;1028:52:1;14338:330:12;1028:52:1;1128:13;1122:3;1098:21;1108:10;1098:9;:21::i;:::-;:27;;;;:::i;:::-;:43;1090:66;;;;-1:-1:-1;;;1090:66:1;;11887:2:12;1090:66:1;;;11869:21:12;11926:2;11906:18;;;11899:30;-1:-1:-1;;;11945:18:12;;;11938:40;11995:18;;1090:66:1;11685:334:12;1090:66:1;1223:23;1243:3;1223:17;:23;:::i;:::-;1210:9;:36;;1202:79;;;;-1:-1:-1;;;1202:79:1;;12226:2:12;1202:79:1;;;12208:21:12;12265:2;12245:18;;;12238:30;12304:32;12284:18;;;12277:60;12354:18;;1202:79:1;12024:354:12;1202:79:1;1305:7;;1299:3;:13;1291:32;;;;-1:-1:-1;;;1291:32:1;;14875:2:12;1291:32:1;;;14857:21:12;14914:1;14894:18;;;14887:29;-1:-1:-1;;;14932:18:12;;;14925:36;14978:18;;1291:32:1;14673:329:12;1291:32:1;1385:4;1378:3;1358:17;:7;918:14:3;;827:112;1358:17:1;:23;;;;:::i;:::-;1357:32;1349:52;;;;-1:-1:-1;;;1349:52:1;;7545:2:12;1349:52:1;;;7527:21:12;7584:1;7564:18;;;7557:29;-1:-1:-1;;;7602:18:12;;;7595:37;7649:18;;1349:52:1;7343:330:12;1349:52:1;1425:6;1420:109;1441:3;1437:1;:7;1420:109;;;1459:19;:7;1032:19:3;;1050:1;1032:19;;;945:123;1459:19:1;1486:36;1492:10;1504:17;:7;918:14:3;;827:112;1486:36:1;1446:3;;;;:::i;:::-;;;;1420:109;;;-1:-1:-1;1544:12:1;1570:42;1643:3;1626:14;:9;1638:2;1626:14;:::i;:::-;:20;;;;:::i;:::-;1562:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1543:108;;;1669:7;1661:16;;;;;1909:198:10;1099:6;;-1:-1:-1;;;;;1099:6:10;719:10:2;1239:23:10;1231:68;;;;-1:-1:-1;;;1231:68:10;;13359:2:12;1231:68:10;;;13341:21:12;;;13378:18;;;13371:30;-1:-1:-1;;;;;;;;;;;13417:18:12;;;13410:62;13489:18;;1231:68:10;13157:356:12;1231:68:10;-1:-1:-1;;;;;1997:22:10;::::1;1989:73;;;::::0;-1:-1:-1;;;1989:73:10;;8299:2:12;1989:73:10::1;::::0;::::1;8281:21:12::0;8338:2;8318:18;;;8311:30;8377:34;8357:18;;;8350:62;-1:-1:-1;;;8428:18:12;;;8421:36;8474:19;;1989:73:10::1;8097:402:12::0;1989:73:10::1;2072:28;2091:8;2072:18;:28::i;11090:171:5:-:0;11164:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11164:29:5;-1:-1:-1;;;;;11164:29:5;;;;;;;;:24;;11217:23;11164:24;11217:14;:23::i;:::-;-1:-1:-1;;;;;11208:46:5;;;;;;;;;;;11090:171;;:::o;7364:344::-;7457:4;7169:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7169:16:5;7473:73;;;;-1:-1:-1;;;7473:73:5;;10228:2:12;7473:73:5;;;10210:21:12;10267:2;10247:18;;;10240:30;10306:34;10286:18;;;10279:62;-1:-1:-1;;;10357:18:12;;;10350:42;10409:19;;7473:73:5;10026:408:12;7473:73:5;7556:13;7572:23;7587:7;7572:14;:23::i;:::-;7556:39;;7624:5;-1:-1:-1;;;;;7613:16:5;:7;-1:-1:-1;;;;;7613:16:5;;:51;;;;7657:7;-1:-1:-1;;;;;7633:31:5;:20;7645:7;7633:11;:20::i;:::-;-1:-1:-1;;;;;7633:31:5;;7613:51;:87;;;-1:-1:-1;;;;;;4544:25:5;;;4521:4;4544:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7668:32;7605:96;7364:344;-1:-1:-1;;;;7364:344:5:o;10374:605::-;10528:4;-1:-1:-1;;;;;10501:31:5;:23;10516:7;10501:14;:23::i;:::-;-1:-1:-1;;;;;10501:31:5;;10493:81;;;;-1:-1:-1;;;10493:81:5;;8706:2:12;10493:81:5;;;8688:21:12;8745:2;8725:18;;;8718:30;8784:34;8764:18;;;8757:62;-1:-1:-1;;;8835:18:12;;;8828:35;8880:19;;10493:81:5;8504:401:12;10493:81:5;-1:-1:-1;;;;;10592:16:5;;10584:65;;;;-1:-1:-1;;;10584:65:5;;9469:2:12;10584:65:5;;;9451:21:12;9508:2;9488:18;;;9481:30;9547:34;9527:18;;;9520:62;-1:-1:-1;;;9598:18:12;;;9591:34;9642:19;;10584:65:5;9267:400:12;10584:65:5;10761:29;10778:1;10782:7;10761:8;:29::i;:::-;-1:-1:-1;;;;;10801:15:5;;;;;;:9;:15;;;;;:20;;10820:1;;10801:15;:20;;10820:1;;10801:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10831:13:5;;;;;;:9;:13;;;;;:18;;10848:1;;10831:13;:18;;10848:1;;10831:18;:::i;:::-;;;;-1:-1:-1;;10859:16:5;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10859:21:5;-1:-1:-1;;;;;10859:21:5;;;;;;;;;10896:27;;10859:16;;10896:27;;;;;;;3529:331;3459:401;;:::o;2261:187:10:-;2353:6;;;-1:-1:-1;;;;;2369:17:10;;;-1:-1:-1;;;;;;2369:17:10;;;;;;;2401:40;;2353:6;;;2369:17;2353:6;;2401:40;;2334:16;;2401:40;2324:124;2261:187;:::o;9000:427:5:-;-1:-1:-1;;;;;9079:16:5;;9071:61;;;;-1:-1:-1;;;9071:61:5;;12585:2:12;9071:61:5;;;12567:21:12;;;12604:18;;;12597:30;12663:34;12643:18;;;12636:62;12715:18;;9071:61:5;12383:356:12;9071:61:5;7146:4;7169:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7169:16:5;:30;9142:58;;;;-1:-1:-1;;;9142:58:5;;9112:2:12;9142:58:5;;;9094:21:12;9151:2;9131:18;;;9124:30;9190;9170:18;;;9163:58;9238:18;;9142:58:5;8910:352:12;9142:58:5;-1:-1:-1;;;;;9267:13:5;;;;;;:9;:13;;;;;:18;;9284:1;;9267:13;:18;;9284:1;;9267:18;:::i;:::-;;;;-1:-1:-1;;9295:16:5;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9295:21:5;-1:-1:-1;;;;;9295:21:5;;;;;;;;9332:33;;9295:16;;;9332:33;;9295:16;;9332:33;3486:21:1::1;3414:130:::0;:::o;11396:307:5:-;11546:8;-1:-1:-1;;;;;11537:17:5;:5;-1:-1:-1;;;;;11537:17:5;;;11529:55;;;;-1:-1:-1;;;11529:55:5;;9874:2:12;11529:55:5;;;9856:21:12;9913:2;9893:18;;;9886:30;9952:27;9932:18;;;9925:55;9997:18;;11529:55:5;9672:349:12;11529:55:5;-1:-1:-1;;;;;11594:25:5;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11594:46:5;;;;;;;;;;11655:41;;7067::12;;;11655::5;;7040:18:12;11655:41:5;;;;;;;11396:307;;;:::o;6471:::-;6622:28;6632:4;6638:2;6642:7;6622:9;:28::i;:::-;6668:48;6691:4;6697:2;6701:7;6710:5;6668:22;:48::i;:::-;6660:111;;;;-1:-1:-1;;;6660:111:5;;7880:2:12;6660:111:5;;;7862:21:12;7919:2;7899:18;;;7892:30;7958:34;7938:18;;;7931:62;-1:-1:-1;;;8009:18:12;;;8002:48;8067:19;;6660:111:5;7678:414:12;2825:100:1;2885:13;2913:7;2906:14;;;;;:::i;328:703:11:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:11;;;;;;;;;;;;-1:-1:-1;;;627:10:11;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:11;;-1:-1:-1;773:2:11;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:11;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:11;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:11;981:2;972:11;;:::i;:::-;;;844:150;;12256:778:5;12406:4;-1:-1:-1;;;;;12426:13:5;;1465:19:0;:23;12422:606:5;;12461:72;;-1:-1:-1;;;12461:72:5;;-1:-1:-1;;;;;12461:36:5;;;;;:72;;719:10:2;;12512:4:5;;12518:7;;12527:5;;12461:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12461:72:5;;;;;;;;-1:-1:-1;;12461:72:5;;;;;;;;;;;;:::i;:::-;;;12457:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12700:13:5;;12696:266;;12742:60;;-1:-1:-1;;;12742:60:5;;7880:2:12;12742:60:5;;;7862:21:12;7919:2;7899:18;;;7892:30;7958:34;7938:18;;;7931:62;-1:-1:-1;;;8009:18:12;;;8002:48;8067:19;;12742:60:5;7678:414:12;12696:266:5;12914:6;12908:13;12899:6;12895:2;12891:15;12884:38;12457:519;-1:-1:-1;;;;;;12583:51:5;-1:-1:-1;;;12583:51:5;;-1:-1:-1;12576:58:5;;12422:606;-1:-1:-1;13013:4:5;12256:778;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:12;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:12;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:196::-;493:20;;-1:-1:-1;;;;;542:54:12;;532:65;;522:93;;611:1;608;601:12;522:93;425:196;;;:::o;626:160::-;691:20;;747:13;;740:21;730:32;;720:60;;776:1;773;766:12;791:186;850:6;903:2;891:9;882:7;878:23;874:32;871:52;;;919:1;916;909:12;871:52;942:29;961:9;942:29;:::i;982:260::-;1050:6;1058;1111:2;1099:9;1090:7;1086:23;1082:32;1079:52;;;1127:1;1124;1117:12;1079:52;1150:29;1169:9;1150:29;:::i;:::-;1140:39;;1198:38;1232:2;1221:9;1217:18;1198:38;:::i;:::-;1188:48;;982:260;;;;;:::o;1247:328::-;1324:6;1332;1340;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1432:29;1451:9;1432:29;:::i;:::-;1422:39;;1480:38;1514:2;1503:9;1499:18;1480:38;:::i;:::-;1470:48;;1565:2;1554:9;1550:18;1537:32;1527:42;;1247:328;;;;;:::o;1580:666::-;1675:6;1683;1691;1699;1752:3;1740:9;1731:7;1727:23;1723:33;1720:53;;;1769:1;1766;1759:12;1720:53;1792:29;1811:9;1792:29;:::i;:::-;1782:39;;1840:38;1874:2;1863:9;1859:18;1840:38;:::i;:::-;1830:48;;1925:2;1914:9;1910:18;1897:32;1887:42;;1980:2;1969:9;1965:18;1952:32;2007:18;1999:6;1996:30;1993:50;;;2039:1;2036;2029:12;1993:50;2062:22;;2115:4;2107:13;;2103:27;-1:-1:-1;2093:55:12;;2144:1;2141;2134:12;2093:55;2167:73;2232:7;2227:2;2214:16;2209:2;2205;2201:11;2167:73;:::i;:::-;2157:83;;;1580:666;;;;;;;:::o;2251:254::-;2316:6;2324;2377:2;2365:9;2356:7;2352:23;2348:32;2345:52;;;2393:1;2390;2383:12;2345:52;2416:29;2435:9;2416:29;:::i;:::-;2406:39;;2464:35;2495:2;2484:9;2480:18;2464:35;:::i;2510:254::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:52;;;2655:1;2652;2645:12;2607:52;2678:29;2697:9;2678:29;:::i;:::-;2668:39;2754:2;2739:18;;;;2726:32;;-1:-1:-1;;;2510:254:12:o;2769:963::-;2853:6;2884:2;2927;2915:9;2906:7;2902:23;2898:32;2895:52;;;2943:1;2940;2933:12;2895:52;2983:9;2970:23;3012:18;3053:2;3045:6;3042:14;3039:34;;;3069:1;3066;3059:12;3039:34;3107:6;3096:9;3092:22;3082:32;;3152:7;3145:4;3141:2;3137:13;3133:27;3123:55;;3174:1;3171;3164:12;3123:55;3210:2;3197:16;3232:2;3228;3225:10;3222:36;;;3238:18;;:::i;:::-;3284:2;3281:1;3277:10;3267:20;;3307:28;3331:2;3327;3323:11;3307:28;:::i;:::-;3369:15;;;3400:12;;;;3432:11;;;3462;;;3458:20;;3455:33;-1:-1:-1;3452:53:12;;;3501:1;3498;3491:12;3452:53;3523:1;3514:10;;3533:169;3547:2;3544:1;3541:9;3533:169;;;3604:23;3623:3;3604:23;:::i;:::-;3592:36;;3565:1;3558:9;;;;;3648:12;;;;3680;;3533:169;;;-1:-1:-1;3721:5:12;2769:963;-1:-1:-1;;;;;;;;2769:963:12:o;3737:180::-;3793:6;3846:2;3834:9;3825:7;3821:23;3817:32;3814:52;;;3862:1;3859;3852:12;3814:52;3885:26;3901:9;3885:26;:::i;3922:245::-;3980:6;4033:2;4021:9;4012:7;4008:23;4004:32;4001:52;;;4049:1;4046;4039:12;4001:52;4088:9;4075:23;4107:30;4131:5;4107:30;:::i;4172:249::-;4241:6;4294:2;4282:9;4273:7;4269:23;4265:32;4262:52;;;4310:1;4307;4300:12;4262:52;4342:9;4336:16;4361:30;4385:5;4361:30;:::i;4426:450::-;4495:6;4548:2;4536:9;4527:7;4523:23;4519:32;4516:52;;;4564:1;4561;4554:12;4516:52;4604:9;4591:23;4637:18;4629:6;4626:30;4623:50;;;4669:1;4666;4659:12;4623:50;4692:22;;4745:4;4737:13;;4733:27;-1:-1:-1;4723:55:12;;4774:1;4771;4764:12;4723:55;4797:73;4862:7;4857:2;4844:16;4839:2;4835;4831:11;4797:73;:::i;4881:180::-;4940:6;4993:2;4981:9;4972:7;4968:23;4964:32;4961:52;;;5009:1;5006;4999:12;4961:52;-1:-1:-1;5032:23:12;;4881:180;-1:-1:-1;4881:180:12:o;5066:257::-;5107:3;5145:5;5139:12;5172:6;5167:3;5160:19;5188:63;5244:6;5237:4;5232:3;5228:14;5221:4;5214:5;5210:16;5188:63;:::i;:::-;5305:2;5284:15;-1:-1:-1;;5280:29:12;5271:39;;;;5312:4;5267:50;;5066:257;-1:-1:-1;;5066:257:12:o;5328:637::-;5608:3;5646:6;5640:13;5662:53;5708:6;5703:3;5696:4;5688:6;5684:17;5662:53;:::i;:::-;5778:13;;5737:16;;;;5800:57;5778:13;5737:16;5834:4;5822:17;;5800:57;:::i;:::-;-1:-1:-1;;;5879:20:12;;5908:22;;;5957:1;5946:13;;5328:637;-1:-1:-1;;;;5328:637:12:o;6411:511::-;6605:4;-1:-1:-1;;;;;6715:2:12;6707:6;6703:15;6692:9;6685:34;6767:2;6759:6;6755:15;6750:2;6739:9;6735:18;6728:43;;6807:6;6802:2;6791:9;6787:18;6780:34;6850:3;6845:2;6834:9;6830:18;6823:31;6871:45;6911:3;6900:9;6896:19;6888:6;6871:45;:::i;:::-;6863:53;6411:511;-1:-1:-1;;;;;;6411:511:12:o;7119:219::-;7268:2;7257:9;7250:21;7231:4;7288:44;7328:2;7317:9;7313:18;7305:6;7288:44;:::i;15189:275::-;15260:2;15254:9;15325:2;15306:13;;-1:-1:-1;;15302:27:12;15290:40;;15360:18;15345:34;;15381:22;;;15342:62;15339:88;;;15407:18;;:::i;:::-;15443:2;15436:22;15189:275;;-1:-1:-1;15189:275:12:o;15469:128::-;15509:3;15540:1;15536:6;15533:1;15530:13;15527:39;;;15546:18;;:::i;:::-;-1:-1:-1;15582:9:12;;15469:128::o;15602:120::-;15642:1;15668;15658:35;;15673:18;;:::i;:::-;-1:-1:-1;15707:9:12;;15602:120::o;15727:168::-;15767:7;15833:1;15829;15825:6;15821:14;15818:1;15815:21;15810:1;15803:9;15796:17;15792:45;15789:71;;;15840:18;;:::i;:::-;-1:-1:-1;15880:9:12;;15727:168::o;15900:125::-;15940:4;15968:1;15965;15962:8;15959:34;;;15973:18;;:::i;:::-;-1:-1:-1;16010:9:12;;15900:125::o;16030:258::-;16102:1;16112:113;16126:6;16123:1;16120:13;16112:113;;;16202:11;;;16196:18;16183:11;;;16176:39;16148:2;16141:10;16112:113;;;16243:6;16240:1;16237:13;16234:48;;;-1:-1:-1;;16278:1:12;16260:16;;16253:27;16030:258::o;16293:380::-;16372:1;16368:12;;;;16415;;;16436:61;;16490:4;16482:6;16478:17;16468:27;;16436:61;16543:2;16535:6;16532:14;16512:18;16509:38;16506:161;;;16589:10;16584:3;16580:20;16577:1;16570:31;16624:4;16621:1;16614:15;16652:4;16649:1;16642:15;16506:161;;16293:380;;;:::o;16678:135::-;16717:3;-1:-1:-1;;16738:17:12;;16735:43;;;16758:18;;:::i;:::-;-1:-1:-1;16805:1:12;16794:13;;16678:135::o;16818:112::-;16850:1;16876;16866:35;;16881:18;;:::i;:::-;-1:-1:-1;16915:9:12;;16818:112::o;16935:127::-;16996:10;16991:3;16987:20;16984:1;16977:31;17027:4;17024:1;17017:15;17051:4;17048:1;17041:15;17067:127;17128:10;17123:3;17119:20;17116:1;17109:31;17159:4;17156:1;17149:15;17183:4;17180:1;17173:15;17199:127;17260:10;17255:3;17251:20;17248:1;17241:31;17291:4;17288:1;17281:15;17315:4;17312:1;17305:15;17331:127;17392:10;17387:3;17383:20;17380:1;17373:31;17423:4;17420:1;17413:15;17447:4;17444:1;17437:15;17463:131;-1:-1:-1;;;;;;17537:32:12;;17527:43;;17517:71;;17584:1;17581;17574:12

Swarm Source

ipfs://449235a81815db6724052bbe21e5fbf4f2da15cd3533bac0cf9612f07340f074
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.