ETH Price: $3,175.89 (-8.22%)
Gas: 3 Gwei

Token

Shark Boy Fight Club VX (SBFCVX)
 

Overview

Max Total Supply

1,308 SBFCVX

Holders

407

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
boyibo.eth
Balance
10 SBFCVX
0x30d385e930ddc80052393ee152affc74b08b448f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SBFC X The SandBox. Edition 3888.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SBFC_VX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 2: MainNft.sol
//         _            _               _           _       _          _   _      _
//        / /\         / /\            /\ \       /\ \     /\ \    _ / /\/_/\    /\ \
//       / /  \       / /  \          /  \ \     /  \ \    \ \ \  /_/ / /\ \ \   \ \_\
//      / / /\ \__   / / /\ \        / /\ \ \   / /\ \ \    \ \ \ \___\/  \ \ \__/ / /
//     / / /\ \___\ / / /\ \ \      / / /\ \_\ / / /\ \ \   / / /  \ \ \   \ \__ \/_/
//     \ \ \ \/___// / /\ \_\ \    / /_/_ \/_// / /  \ \_\  \ \ \   \_\ \   \/_/\__/\
//      \ \ \     / / /\ \ \___\  / /____/\  / / /    \/_/   \ \ \  / / /    _/\/__\ \
//  _    \ \ \   / / /  \ \ \__/ / /\____\/ / / /             \ \ \/ / /    / _/_/\ \ \
// /_/\__/ / /  / / /____\_\ \  / / /      / / /________       \ \ \/ /    / / /   \ \ \
// \ \/___/ /  / / /__________\/ / /      / / /_________\       \ \  /    / / /    /_/ /
//  \_____\/   \/_____________/\/_/       \/____________/        \_\/     \/_/     \_\/
//
// SPDX-License-Identifier: MIT
// sharkboyfightclub.com

pragma solidity ^0.8.7;

import "./ERC721A.sol";

interface NFTContract {
  function ownerOf(uint256 tokenId) external view returns (address owner);
  function balanceOf(address owner) external view returns (uint256 balance);
  function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

}

interface LOXContract {
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

contract SBFC_VX is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public  PRICE_ETH_IN_PUBLICSALE = 15*10**16; //0.15 ether
  uint256 public  PRICE_ETH_IN_WHITELIST = 1*10**17; //0.1 ether

  uint256 public  PRICE_ETH_IN_PRESALE = 1*10**17; //0.1 ether
  uint256 public  PRICE_LOX_TILL_1_400 = 10*10**18; //10 lOX
  uint256 public  PRICE_LOX_401_2500 = 30*10**18; //30 lox
  uint256 public  PRICE_LOX_2501_8888 = 50*10**18; //50 lox

  uint256 private constant TotalCollectionSize_ = 8888;
  uint256 private constant MaxMintPerBatch_ = 50;

  string private _baseTokenURI;
  string private _URIExtension = ".json";

  bool public isPresaleOn = true;
  bool public isPublicSaleOn = false;
  bool public isWhitelistPriceOn = true;

  mapping(uint256=>uint256) public vxNftToSbfcNft;
  mapping(uint256=>bool) public isNftMintedForThisId;

  NFTContract private nftContract;
  LOXContract private loxContract;

  constructor(string memory _baseUri, address sbfcContractAddress, address loxContractAddress) ERC721A("Shark Boy Fight Club VX", "SBFCVX", MaxMintPerBatch_, TotalCollectionSize_) {
      _baseTokenURI = _baseUri;
      isPresaleOn = true;
      nftContract = NFTContract(sbfcContractAddress);
      loxContract = LOXContract(loxContractAddress);
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "Please mint at the official website");
    _;
  }


  function mintPresale(uint256[] memory sbfcNftIds,bool withLOX)
    external
    payable
    callerIsUser
  {
    require(isPresaleOn, "Minting will be starting shortly.");

    uint256 totalNft = totalSupply();
    for (uint256 i = 0; i < sbfcNftIds.length; i++) {
      require(nftContract.ownerOf(sbfcNftIds[i]) == msg.sender, "You don't own this NFT");
      require(!isNftMintedForThisId[sbfcNftIds[i]], "This Token ID is already minted");

      vxNftToSbfcNft[totalNft+i] = sbfcNftIds[i];
      isNftMintedForThisId[sbfcNftIds[i]] = true;

       if (withLOX) {
        if (sbfcNftIds[i] < 401) {
          require(loxContract.allowance(msg.sender, address(this)) >= PRICE_LOX_TILL_1_400);
          require(loxContract.transferFrom(msg.sender, address(this), PRICE_LOX_TILL_1_400));
        } else if (sbfcNftIds[i]  <= 2500) {
          require(loxContract.allowance(msg.sender, address(this)) >= PRICE_LOX_401_2500);
          require(loxContract.transferFrom(msg.sender, address(this), PRICE_LOX_401_2500));
        } else if (sbfcNftIds[i] <= 8888) {
          require(loxContract.allowance(msg.sender, address(this)) >= PRICE_LOX_2501_8888);
          require(loxContract.transferFrom(msg.sender, address(this), PRICE_LOX_2501_8888));
        }
      }

    }
    if (!withLOX) {
        require(msg.value >= PRICE_ETH_IN_PRESALE * sbfcNftIds.length, "You need more ETH to mint.");
      }
    _safeMint(msg.sender, sbfcNftIds.length);
  }


  function mintPublicSale(uint256[] memory sbfcNftIds)
    external
    payable
    callerIsUser
  {
    require(isPublicSaleOn, "Minting will be starting shortly.");

    uint256 totalNft = totalSupply();

    if (isWhitelistPriceOn) {
      require(msg.value >= PRICE_ETH_IN_WHITELIST * sbfcNftIds.length, "You need more ETH to mint.");
    } else {
      require(msg.value >= PRICE_ETH_IN_PUBLICSALE * sbfcNftIds.length, "You need more ETH to mint.");
    }
    for (uint256 i = 0; i < sbfcNftIds.length; i++) {
      require(!isNftMintedForThisId[sbfcNftIds[i]], "This Token ID is already minted");
      vxNftToSbfcNft[totalNft+i] = sbfcNftIds[i];
      isNftMintedForThisId[sbfcNftIds[i]] = true;
    }

    _safeMint(msg.sender, sbfcNftIds.length);
  }

   function mintPublicSaleDirect(uint256 howMuch)
    external
    payable
    callerIsUser
  {
    require(isPublicSaleOn, "Minting will be starting shortly.");

    if (isWhitelistPriceOn) {
      require(msg.value >= PRICE_ETH_IN_WHITELIST * howMuch, "You need more ETH to mint.");
    } else {
      require(msg.value >= PRICE_ETH_IN_PUBLICSALE * howMuch, "You need more ETH to mint.");
    }

    uint256 totalNft = totalSupply();
    uint256[] memory sbfcIdArray = getNotMintedIds(howMuch);
    for (uint256 i = 0; i < sbfcIdArray.length; i++) {
      require(!isNftMintedForThisId[sbfcIdArray[i]], "This Token ID is already minted");
      require(sbfcIdArray[i] > 0, "This Token ID is already minted");

      vxNftToSbfcNft[totalNft+i] = sbfcIdArray[i];
      isNftMintedForThisId[sbfcIdArray[i]] = true;
    }

    _safeMint(msg.sender, sbfcIdArray.length);
  }


  function getNotMintedIds(uint256 howMuch) public view returns(uint256[] memory) {
    uint256[] memory _a = new uint256[](howMuch);
    uint256 _id = 0;
    for (uint256 i = 1; i <= 8888; i++) {
      if (!isNftMintedForThisId[i]){
        _a[_id] = i;
        _id ++;
        if(_id >= howMuch){
          break;
        }
      }
    }
    return _a;
  }

  function getAllVxTokensIdOfUser(address _user) public view returns(uint256[] memory) {
    uint256 totalNftsUser = balanceOf(_user);
    uint256[] memory _allNftsArray = new uint256[](totalNftsUser);
    for (uint256 i = 0; i < totalNftsUser; i++) {
        uint256 _nft = tokenOfOwnerByIndex(_user,i);
        _allNftsArray[i] = _nft;
    }
    return _allNftsArray;
  }

  function getAllVxTokensSbfcIdOfUser(address _user) public view returns(uint256[] memory) {
    uint256 totalNftsUser = balanceOf(_user);
    uint256[] memory _allNftsArray = new uint256[](totalNftsUser);
    for (uint256 i = 0; i < totalNftsUser; i++) {
        uint256 _nft = tokenOfOwnerByIndex(_user,i);
        _allNftsArray[i] = vxNftToSbfcNft[_nft];
    }
    return _allNftsArray;
  }

   function getAllSbfcNftsUserHave(address _user) public view returns(uint256[] memory) {
    uint256 totalNftsUser = nftContract.balanceOf(_user);
    uint256[] memory _allNftsArray = new uint256[](totalNftsUser);
    for (uint256 i = 0; i < totalNftsUser; i++) {
        uint256 _nft = nftContract.tokenOfOwnerByIndex(_user,i);
        _allNftsArray[i] = _nft;
    }
    return _allNftsArray;
  }



  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, vxNftToSbfcNft[tokenId].toString(),_getUriExtension()))
        : "";
  }

  function _getUriExtension() internal view virtual override returns (string memory) {
    return _URIExtension;
  }

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


  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }

  function probablyNothing() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function LoxBack(LOXContract _tokenAddress, address _user,uint256 _amount) external onlyOwner nonReentrant {
    _tokenAddress.transfer(_user,_amount);
  }

    function FlipPublicSale() external onlyOwner
    {
        isPublicSaleOn = !isPublicSaleOn;
    }

    function FlipPreSale() external onlyOwner
    {
        isPresaleOn = !isPresaleOn;
    }

    function FlipWhitelistSystem() external onlyOwner
    {
        isWhitelistPriceOn = !isWhitelistPriceOn;
    }

     function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function setBaseURIExtension(NFTContract _address) external onlyOwner {
    nftContract = _address;
  }

  function setBaseURI(LOXContract  _address) external onlyOwner {
    loxContract = _address;
  }
}

File 1 of 2: ERC721A.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


/**
 * @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);
    }
}


/**
 * @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;
    }
}

/**
 * @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);
    }
}


/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
            }
        }
    }
}

/**
 * @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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


/**
 * @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);
}

/**
 * @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;
    }
}


/**
 * @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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)




/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.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: contracts/ERC721A.sol


















/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  }

  /**
   * @dev See {IERC721Enumerable-tokenByIndex}.
   */
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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(),_getUriExtension()))
        : "";
  }

  /**
   * @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 overriden in child contracts.
   */
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @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(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"address","name":"sbfcContractAddress","type":"address"},{"internalType":"address","name":"loxContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FlipPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FlipPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FlipWhitelistSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract LOXContract","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"LoxBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PRICE_ETH_IN_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_ETH_IN_PUBLICSALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_ETH_IN_WHITELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_LOX_2501_8888","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_LOX_401_2500","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_LOX_TILL_1_400","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_user","type":"address"}],"name":"getAllSbfcNftsUserHave","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAllVxTokensIdOfUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAllVxTokensSbfcIdOfUser","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":"uint256","name":"howMuch","type":"uint256"}],"name":"getNotMintedIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isNftMintedForThisId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistPriceOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"sbfcNftIds","type":"uint256[]"},{"internalType":"bool","name":"withLOX","type":"bool"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"sbfcNftIds","type":"uint256[]"}],"name":"mintPublicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"howMuch","type":"uint256"}],"name":"mintPublicSaleDirect","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"probablyNothing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract LOXContract","name":"_address","type":"address"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract NFTContract","name":"_address","type":"address"}],"name":"setBaseURIExtension","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vxNftToSbfcNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60006001819055600855670214e8348c4f0000600a5567016345785d8a0000600b819055600c55678ac7230489e80000600d556801a055690d9db80000600e556802b5e3af16b1880000600f55610100604052600560c081905264173539b7b760d91b60e0908152620000769160119190620002e1565b506012805462ffffff1916620100011790553480156200009557600080fd5b5060405162003be238038062003be2833981016040819052620000b891620003a4565b6040518060400160405280601781526020017f536861726b20426f7920466967687420436c7562205658000000000000000000815250604051806040016040528060068152602001650a6848c86acb60d31b81525060326122b86200012c620001266200028d60201b60201c565b62000291565b60008111620001995760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001fb5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000190565b835162000210906002906020870190620002e1565b50825162000226906003906020860190620002e1565b5060a0919091526080525050600160095582516200024c906010906020860190620002e1565b506012805460ff19166001179055601580546001600160a01b039384166001600160a01b0319918216179091556016805492909316911617905550620004fa565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620002ef90620004a7565b90600052602060002090601f0160209004810192826200031357600085556200035e565b82601f106200032e57805160ff19168380011785556200035e565b828001600101855582156200035e579182015b828111156200035e57825182559160200191906001019062000341565b506200036c92915062000370565b5090565b5b808211156200036c576000815560010162000371565b80516001600160a01b03811681146200039f57600080fd5b919050565b600080600060608486031215620003ba57600080fd5b83516001600160401b0380821115620003d257600080fd5b818601915086601f830112620003e757600080fd5b815181811115620003fc57620003fc620004e4565b604051601f8201601f19908116603f01168101908382118183101715620004275762000427620004e4565b816040528281526020935089848487010111156200044457600080fd5b600091505b8282101562000468578482018401518183018501529083019062000449565b828211156200047a5760008484830101525b96506200048c91505086820162000387565b935050506200049e6040850162000387565b90509250925092565b600181811c90821680620004bc57607f821691505b60208210811415620004de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a0516136b76200052b6000396000818161266b015281816126950152612b800152600050506136b76000f3fe6080604052600436106102935760003560e01c80637f8e1aa21161015a578063c040e15d116100c1578063dc33e6811161007a578063dc33e681146107c2578063e5e7781a146107e2578063e6df0a1e146107f5578063e985e9c51461080b578063ebd53c3f14610854578063f2fde38b1461087457600080fd5b8063c040e15d14610738578063c7141d001461074e578063c87b56dd14610764578063cb1070c614610784578063d7224ba014610799578063d754c28f146107af57600080fd5b80639231ab2a116101135780639231ab2a1461066d57806395d89b41146106ba578063a22cb465146106cf578063b068b898146106ef578063b88d4fde14610702578063bdb3e5a11461072257600080fd5b80637f8e1aa2146105ba57806386be53d3146105da578063882b08dd146105f45780638a706818146106245780638da5cb5b146106395780638e14ea931461065757600080fd5b80632f745c59116101fe578063581355bd116101b7578063581355bd146104f85780636352211e14610518578063644082e01461053857806370a0823114610558578063715018a6146105785780637bb76dab1461058d57600080fd5b80632f745c59146104395780633f5e47411461045957806342842e0e146104785780634f6ccce71461049857806355f804b3146104b8578063579d8542146104d857600080fd5b8063095ea7b311610250578063095ea7b31461038b5780630a2a6f8c146103ab57806315250a92146103cf57806318160ddd146103e457806323b872dd146103f95780632db32ba71461041957600080fd5b806301ffc9a714610298578063020deb66146102cd57806306fdde03146102e45780630783daaa14610306578063081812fc146103265780630899151a1461035e575b600080fd5b3480156102a457600080fd5b506102b86102b336600461312d565b610894565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610901565b005b3480156102f057600080fd5b506102f9610951565b6040516102c491906132d1565b34801561031257600080fd5b506102e2610321366004612f09565b6109e3565b34801561033257600080fd5b506103466103413660046131af565b610a2f565b6040516001600160a01b0390911681526020016102c4565b34801561036a57600080fd5b5061037e6103793660046131af565b610aba565b6040516102c4919061328d565b34801561039757600080fd5b506102e26103a636600461306a565b610b78565b3480156103b757600080fd5b506103c1600a5481565b6040519081526020016102c4565b3480156103db57600080fd5b506102e2610c90565b3480156103f057600080fd5b506001546103c1565b34801561040557600080fd5b506102e2610414366004612f7c565b610cce565b34801561042557600080fd5b5061037e610434366004612f09565b610cd9565b34801561044557600080fd5b506103c161045436600461306a565b610d80565b34801561046557600080fd5b506012546102b890610100900460ff1681565b34801561048457600080fd5b506102e2610493366004612f7c565b610ef8565b3480156104a457600080fd5b506103c16104b33660046131af565b610f13565b3480156104c457600080fd5b506102e26104d3366004613167565b610f7c565b3480156104e457600080fd5b506102e26104f3366004612f7c565b610fbd565b34801561050457600080fd5b506012546102b89062010000900460ff1681565b34801561052457600080fd5b506103466105333660046131af565b6110cc565b34801561054457600080fd5b506102e2610553366004612f09565b6110de565b34801561056457600080fd5b506103c1610573366004612f09565b61112a565b34801561058457600080fd5b506102e26111bb565b34801561059957600080fd5b506103c16105a83660046131af565b60136020526000908152604090205481565b3480156105c657600080fd5b5061037e6105d5366004612f09565b6111f1565b3480156105e657600080fd5b506012546102b89060ff1681565b34801561060057600080fd5b506102b861060f3660046131af565b60146020526000908152604090205460ff1681565b34801561063057600080fd5b506102e261137e565b34801561064557600080fd5b506000546001600160a01b0316610346565b34801561066357600080fd5b506103c1600d5481565b34801561067957600080fd5b5061068d6106883660046131af565b611493565b6040805182516001600160a01b031681526020928301516001600160401b031692810192909252016102c4565b3480156106c657600080fd5b506102f96114b0565b3480156106db57600080fd5b506102e26106ea36600461303c565b6114bf565b6102e26106fd3660046131af565b611584565b34801561070e57600080fd5b506102e261071d366004612fbd565b61178a565b34801561072e57600080fd5b506103c1600e5481565b34801561074457600080fd5b506103c1600b5481565b34801561075a57600080fd5b506103c1600c5481565b34801561077057600080fd5b506102f961077f3660046131af565b6117c3565b34801561079057600080fd5b506102e26118a9565b3480156107a557600080fd5b506103c160085481565b6102e26107bd3660046130ca565b6118f2565b3480156107ce57600080fd5b506103c16107dd366004612f09565b611eec565b6102e26107f0366004613096565b611ef7565b34801561080157600080fd5b506103c1600f5481565b34801561081757600080fd5b506102b8610826366004612f43565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561086057600080fd5b5061037e61086f366004612f09565b6120ba565b34801561088057600080fd5b506102e261088f366004612f09565b61216c565b60006001600160e01b031982166380ac58cd60e01b14806108c557506001600160e01b03198216635b5e139f60e01b145b806108e057506001600160e01b0319821663780e9d6360e01b145b806108fb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b90613352565b60405180910390fd5b6012805461ff001981166101009182900460ff1615909102179055565b60606002805461096090613586565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90613586565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a0d5760405162461bcd60e51b815260040161092b90613352565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3c826001541190565b610a9e5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b606482015260840161092b565b506000908152600660205260409020546001600160a01b031690565b60606000826001600160401b03811115610ad657610ad6613632565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050600060015b6122b88111610b6f5760008181526014602052604090205460ff16610b5d5780838381518110610b3957610b3961361c565b602090810291909101015281610b4e816135c1565b925050848210610b5d57610b6f565b80610b67816135c1565b915050610b07565b50909392505050565b6000610b83826110cc565b9050806001600160a01b0316836001600160a01b03161415610bf25760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161092b565b336001600160a01b0382161480610c0e5750610c0e8133610826565b610c805760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161092b565b610c8b838383612207565b505050565b6000546001600160a01b03163314610cba5760405162461bcd60e51b815260040161092b90613352565b6012805460ff19811660ff90911615179055565b610c8b838383612263565b60606000610ce68361112a565b90506000816001600160401b03811115610d0257610d02613632565b604051908082528060200260200182016040528015610d2b578160200160208202803683370190505b50905060005b82811015610d78576000610d458683610d80565b905080838381518110610d5a57610d5a61361c565b60209081029190910101525080610d70816135c1565b915050610d31565b509392505050565b6000610d8b8361112a565b8210610de45760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161092b565b6000610def60015490565b905060008060005b83811015610e98576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e4957805192505b876001600160a01b0316836001600160a01b03161415610e855786841415610e77575093506108fb92505050565b83610e81816135c1565b9450505b5080610e90816135c1565b915050610df7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161092b565b610c8b8383836040518060200160405280600081525061178a565b6000610f1e60015490565b8210610f785760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161092b565b5090565b6000546001600160a01b03163314610fa65760405162461bcd60e51b815260040161092b90613352565b8051610fb9906010906020840190612d9d565b5050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b815260040161092b90613352565b6002600954141561103a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b600260095560405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c19190613110565b505060016009555050565b60006110d7826125e9565b5192915050565b6000546001600160a01b031633146111085760405162461bcd60e51b815260040161092b90613352565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166111965760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161092b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146111e55760405162461bcd60e51b815260040161092b90613352565b6111ef6000612792565b565b6015546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127391906131c8565b90506000816001600160401b0381111561128f5761128f613632565b6040519080825280602002602001820160405280156112b8578160200160208202803683370190505b50905060005b82811015610d7857601554604051632f745c5960e01b81526001600160a01b038781166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b91906131c8565b9050808383815181106113605761136061361c565b60209081029190910101525080611376816135c1565b9150506112be565b6000546001600160a01b031633146113a85760405162461bcd60e51b815260040161092b90613352565b600260095414156113fb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b6002600955604051600090339047908381818185875af1925050503d8060008114611442576040519150601f19603f3d011682016040523d82523d6000602084013e611447565b606091505b505090508061148b5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161092b565b506001600955565b60408051808201909152600080825260208201526108fb826125e9565b60606003805461096090613586565b6001600160a01b0382163314156115185760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161092b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3233146115a35760405162461bcd60e51b815260040161092b90613387565b601254610100900460ff166115ca5760405162461bcd60e51b815260040161092b9061341d565b60125462010000900460ff161561160d5780600b546115e991906134e5565b3410156116085760405162461bcd60e51b815260040161092b906132e4565b61163a565b80600a5461161b91906134e5565b34101561163a5760405162461bcd60e51b815260040161092b906132e4565b600061164560015490565b9050600061165283610aba565b905060005b815181101561177e57601460008383815181106116765761167661361c565b60209081029190910181015182528101919091526040016000205460ff16156116b15760405162461bcd60e51b815260040161092b9061331b565b60008282815181106116c5576116c561361c565b6020026020010151116116ea5760405162461bcd60e51b815260040161092b9061331b565b8181815181106116fc576116fc61361c565b602002602001015160136000838661171491906134b9565b81526020019081526020016000208190555060016014600084848151811061173e5761173e61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611776906135c1565b915050611657565b50610c8b3382516127e2565b611795848484612263565b6117a1848484846127fc565b6117bd5760405162461bcd60e51b815260040161092b906133ca565b50505050565b60606117d0826001541190565b6118345760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161092b565b600061183e61290a565b9050600081511161185e57604051806020016040528060008152506118a2565b600083815260136020526040902054819061187890612919565b611880612a16565b6040516020016118929392919061320d565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146118d35760405162461bcd60e51b815260040161092b90613352565b6012805462ff0000198116620100009182900460ff1615909102179055565b3233146119115760405162461bcd60e51b815260040161092b90613387565b60125460ff166119335760405162461bcd60e51b815260040161092b9061341d565b600061193e60015490565b905060005b8351811015611ead57601554845133916001600160a01b031690636352211e908790859081106119755761197561361c565b60200260200101516040518263ffffffff1660e01b815260040161199b91815260200190565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612f26565b6001600160a01b031614611a3a5760405162461bcd60e51b8152602060048201526016602482015275165bdd48191bdb89dd081bdddb881d1a1a5cc813919560521b604482015260640161092b565b60146000858381518110611a5057611a5061361c565b60209081029190910181015182528101919091526040016000205460ff1615611a8b5760405162461bcd60e51b815260040161092b9061331b565b838181518110611a9d57611a9d61361c565b6020026020010151601360008385611ab591906134b9565b815260200190815260200160002081905550600160146000868481518110611adf57611adf61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508215611e9b57610191848281518110611b2757611b2761361c565b60200260200101511015611c6157600d54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb991906131c8565b1015611bc457600080fd5b601654600d546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd906064015b602060405180830381600087803b158015611c1b57600080fd5b505af1158015611c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c539190613110565b611c5c57600080fd5b611e9b565b6109c4848281518110611c7657611c7661361c565b602002602001015111611d5357600e54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906131c8565b1015611d1257600080fd5b601654600e546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401611c01565b6122b8848281518110611d6857611d6861361c565b602002602001015111611e9b57600f54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df991906131c8565b1015611e0457600080fd5b601654600f546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611e5a57600080fd5b505af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613110565b611e9b57600080fd5b80611ea5816135c1565b915050611943565b5081611ee1578251600c54611ec291906134e5565b341015611ee15760405162461bcd60e51b815260040161092b906132e4565b610c8b3384516127e2565b60006108fb82612a25565b323314611f165760405162461bcd60e51b815260040161092b90613387565b601254610100900460ff16611f3d5760405162461bcd60e51b815260040161092b9061341d565b6000611f4860015490565b60125490915062010000900460ff1615611f8f578151600b54611f6b91906134e5565b341015611f8a5760405162461bcd60e51b815260040161092b906132e4565b611fbd565b8151600a54611f9e91906134e5565b341015611fbd5760405162461bcd60e51b815260040161092b906132e4565b60005b82518110156120ae5760146000848381518110611fdf57611fdf61361c565b60209081029190910181015182528101919091526040016000205460ff161561201a5760405162461bcd60e51b815260040161092b9061331b565b82818151811061202c5761202c61361c565b602002602001015160136000838561204491906134b9565b81526020019081526020016000208190555060016014600085848151811061206e5761206e61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120a6906135c1565b915050611fc0565b50610fb93383516127e2565b606060006120c78361112a565b90506000816001600160401b038111156120e3576120e3613632565b60405190808252806020026020018201604052801561210c578160200160208202803683370190505b50905060005b82811015610d785760006121268683610d80565b9050601360008281526020019081526020016000205483838151811061214e5761214e61361c565b60209081029190910101525080612164816135c1565b915050612112565b6000546001600160a01b031633146121965760405162461bcd60e51b815260040161092b90613352565b6001600160a01b0381166121fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b61220481612792565b50565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061226e826125e9565b80519091506000906001600160a01b0316336001600160a01b031614806122a557503361229a84610a2f565b6001600160a01b0316145b806122b7575081516122b79033610826565b9050806123215760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161092b565b846001600160a01b031682600001516001600160a01b0316146123955760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161092b565b6001600160a01b0384166123f95760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161092b565b6124096000848460000151612207565b6001600160a01b038516600090815260056020526040812080546001929061243b9084906001600160801b0316613504565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260056020526040812080546001945090926124879185911661348e565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b0319909116919092161717905561250e8460016134b9565b6000818152600460205260409020549091506001600160a01b031661259f57612538816001541190565b1561259f5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152612608826001541190565b6126675760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161092b565b60007f000000000000000000000000000000000000000000000000000000000000000083106126c8576126ba7f00000000000000000000000000000000000000000000000000000000000000008461352c565b6126c59060016134b9565b90505b825b818110612731576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561271e57949350505050565b50806127298161356f565b9150506126ca565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161092b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fb9828260405180602001604052806000815250612ac3565b60006001600160a01b0384163b156128fe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612840903390899088908890600401613250565b602060405180830381600087803b15801561285a57600080fd5b505af192505050801561288a575060408051601f3d908101601f191682019092526128879181019061314a565b60015b6128e4573d8080156128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b5080516128dc5760405162461bcd60e51b815260040161092b906133ca565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612902565b5060015b949350505050565b60606010805461096090613586565b60608161293d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129675780612951816135c1565b91506129609050600a836134d1565b9150612941565b6000816001600160401b0381111561298157612981613632565b6040519080825280601f01601f1916602001820160405280156129ab576020820181803683370190505b5090505b8415612902576129c060018361352c565b91506129cd600a866135dc565b6129d89060306134b9565b60f81b8183815181106129ed576129ed61361c565b60200101906001600160f81b031916908160001a905350612a0f600a866134d1565b94506129af565b60606011805461096090613586565b60006001600160a01b038216612a975760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161092b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b038416612b265760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161092b565b612b31816001541190565b15612b7e5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161092b565b7f0000000000000000000000000000000000000000000000000000000000000000831115612bf95760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161092b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612c5590879061348e565b6001600160801b03168152602001858360200151612c73919061348e565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015612d925760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612d5660008884886127fc565b612d725760405162461bcd60e51b815260040161092b906133ca565b81612d7c816135c1565b9250508080612d8a906135c1565b915050612d09565b5060018190556125e1565b828054612da990613586565b90600052602060002090601f016020900481019282612dcb5760008555612e11565b82601f10612de457805160ff1916838001178555612e11565b82800160010185558215612e11579182015b82811115612e11578251825591602001919060010190612df6565b50610f789291505b80821115610f785760008155600101612e19565b60006001600160401b03831115612e4657612e46613632565b612e59601f8401601f191660200161345e565b9050828152838383011115612e6d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612e9557600080fd5b813560206001600160401b03821115612eb057612eb0613632565b8160051b612ebf82820161345e565b838152828101908684018388018501891015612eda57600080fd5b600093505b85841015612efd578035835260019390930192918401918401612edf565b50979650505050505050565b600060208284031215612f1b57600080fd5b81356118a281613648565b600060208284031215612f3857600080fd5b81516118a281613648565b60008060408385031215612f5657600080fd5b8235612f6181613648565b91506020830135612f7181613648565b809150509250929050565b600080600060608486031215612f9157600080fd5b8335612f9c81613648565b92506020840135612fac81613648565b929592945050506040919091013590565b60008060008060808587031215612fd357600080fd5b8435612fde81613648565b93506020850135612fee81613648565b92506040850135915060608501356001600160401b0381111561301057600080fd5b8501601f8101871361302157600080fd5b61303087823560208401612e2d565b91505092959194509250565b6000806040838503121561304f57600080fd5b823561305a81613648565b91506020830135612f718161365d565b6000806040838503121561307d57600080fd5b823561308881613648565b946020939093013593505050565b6000602082840312156130a857600080fd5b81356001600160401b038111156130be57600080fd5b61290284828501612e84565b600080604083850312156130dd57600080fd5b82356001600160401b038111156130f357600080fd5b6130ff85828601612e84565b9250506020830135612f718161365d565b60006020828403121561312257600080fd5b81516118a28161365d565b60006020828403121561313f57600080fd5b81356118a28161366b565b60006020828403121561315c57600080fd5b81516118a28161366b565b60006020828403121561317957600080fd5b81356001600160401b0381111561318f57600080fd5b8201601f810184136131a057600080fd5b61290284823560208401612e2d565b6000602082840312156131c157600080fd5b5035919050565b6000602082840312156131da57600080fd5b5051919050565b600081518084526131f9816020860160208601613543565b601f01601f19169290920160200192915050565b6000845161321f818460208901613543565b845190830190613233818360208901613543565b8451910190613246818360208801613543565b0195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613283908301846131e1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156132c5578351835292840192918401916001016132a9565b50909695505050505050565b6020815260006118a260208301846131e1565b6020808252601a908201527f596f75206e656564206d6f72652045544820746f206d696e742e000000000000604082015260600190565b6020808252601f908201527f5468697320546f6b656e20494420697320616c7265616479206d696e74656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f506c65617365206d696e7420617420746865206f6666696369616c207765627360408201526269746560e81b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60208082526021908201527f4d696e74696e672077696c6c206265207374617274696e672073686f72746c796040820152601760f91b606082015260800190565b604051601f8201601f191681016001600160401b038111828210171561348657613486613632565b604052919050565b60006001600160801b038083168185168083038211156134b0576134b06135f0565b01949350505050565b600082198211156134cc576134cc6135f0565b500190565b6000826134e0576134e0613606565b500490565b60008160001904831182151516156134ff576134ff6135f0565b500290565b60006001600160801b0383811690831681811015613524576135246135f0565b039392505050565b60008282101561353e5761353e6135f0565b500390565b60005b8381101561355e578181015183820152602001613546565b838111156117bd5750506000910152565b60008161357e5761357e6135f0565b506000190190565b600181811c9082168061359a57607f821691505b602082108114156135bb57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135d5576135d56135f0565b5060010190565b6000826135eb576135eb613606565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461220457600080fd5b801515811461220457600080fd5b6001600160e01b03198116811461220457600080fdfea26469706673582212209f91c25410f8d7a57cf4159c67007c3d6a4224308a08d37989fa2c252271afb064736f6c634300080700330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000759c55b14190ce6c5a74c15d62cd04a1ad9e49d700000000000000000000000000c9edb376e8c87e146f5af9ae023fb128e0ad4b000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f736861726b626f796669676874636c75622e636f6d2f76782f6a736f6e2f0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102935760003560e01c80637f8e1aa21161015a578063c040e15d116100c1578063dc33e6811161007a578063dc33e681146107c2578063e5e7781a146107e2578063e6df0a1e146107f5578063e985e9c51461080b578063ebd53c3f14610854578063f2fde38b1461087457600080fd5b8063c040e15d14610738578063c7141d001461074e578063c87b56dd14610764578063cb1070c614610784578063d7224ba014610799578063d754c28f146107af57600080fd5b80639231ab2a116101135780639231ab2a1461066d57806395d89b41146106ba578063a22cb465146106cf578063b068b898146106ef578063b88d4fde14610702578063bdb3e5a11461072257600080fd5b80637f8e1aa2146105ba57806386be53d3146105da578063882b08dd146105f45780638a706818146106245780638da5cb5b146106395780638e14ea931461065757600080fd5b80632f745c59116101fe578063581355bd116101b7578063581355bd146104f85780636352211e14610518578063644082e01461053857806370a0823114610558578063715018a6146105785780637bb76dab1461058d57600080fd5b80632f745c59146104395780633f5e47411461045957806342842e0e146104785780634f6ccce71461049857806355f804b3146104b8578063579d8542146104d857600080fd5b8063095ea7b311610250578063095ea7b31461038b5780630a2a6f8c146103ab57806315250a92146103cf57806318160ddd146103e457806323b872dd146103f95780632db32ba71461041957600080fd5b806301ffc9a714610298578063020deb66146102cd57806306fdde03146102e45780630783daaa14610306578063081812fc146103265780630899151a1461035e575b600080fd5b3480156102a457600080fd5b506102b86102b336600461312d565b610894565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610901565b005b3480156102f057600080fd5b506102f9610951565b6040516102c491906132d1565b34801561031257600080fd5b506102e2610321366004612f09565b6109e3565b34801561033257600080fd5b506103466103413660046131af565b610a2f565b6040516001600160a01b0390911681526020016102c4565b34801561036a57600080fd5b5061037e6103793660046131af565b610aba565b6040516102c4919061328d565b34801561039757600080fd5b506102e26103a636600461306a565b610b78565b3480156103b757600080fd5b506103c1600a5481565b6040519081526020016102c4565b3480156103db57600080fd5b506102e2610c90565b3480156103f057600080fd5b506001546103c1565b34801561040557600080fd5b506102e2610414366004612f7c565b610cce565b34801561042557600080fd5b5061037e610434366004612f09565b610cd9565b34801561044557600080fd5b506103c161045436600461306a565b610d80565b34801561046557600080fd5b506012546102b890610100900460ff1681565b34801561048457600080fd5b506102e2610493366004612f7c565b610ef8565b3480156104a457600080fd5b506103c16104b33660046131af565b610f13565b3480156104c457600080fd5b506102e26104d3366004613167565b610f7c565b3480156104e457600080fd5b506102e26104f3366004612f7c565b610fbd565b34801561050457600080fd5b506012546102b89062010000900460ff1681565b34801561052457600080fd5b506103466105333660046131af565b6110cc565b34801561054457600080fd5b506102e2610553366004612f09565b6110de565b34801561056457600080fd5b506103c1610573366004612f09565b61112a565b34801561058457600080fd5b506102e26111bb565b34801561059957600080fd5b506103c16105a83660046131af565b60136020526000908152604090205481565b3480156105c657600080fd5b5061037e6105d5366004612f09565b6111f1565b3480156105e657600080fd5b506012546102b89060ff1681565b34801561060057600080fd5b506102b861060f3660046131af565b60146020526000908152604090205460ff1681565b34801561063057600080fd5b506102e261137e565b34801561064557600080fd5b506000546001600160a01b0316610346565b34801561066357600080fd5b506103c1600d5481565b34801561067957600080fd5b5061068d6106883660046131af565b611493565b6040805182516001600160a01b031681526020928301516001600160401b031692810192909252016102c4565b3480156106c657600080fd5b506102f96114b0565b3480156106db57600080fd5b506102e26106ea36600461303c565b6114bf565b6102e26106fd3660046131af565b611584565b34801561070e57600080fd5b506102e261071d366004612fbd565b61178a565b34801561072e57600080fd5b506103c1600e5481565b34801561074457600080fd5b506103c1600b5481565b34801561075a57600080fd5b506103c1600c5481565b34801561077057600080fd5b506102f961077f3660046131af565b6117c3565b34801561079057600080fd5b506102e26118a9565b3480156107a557600080fd5b506103c160085481565b6102e26107bd3660046130ca565b6118f2565b3480156107ce57600080fd5b506103c16107dd366004612f09565b611eec565b6102e26107f0366004613096565b611ef7565b34801561080157600080fd5b506103c1600f5481565b34801561081757600080fd5b506102b8610826366004612f43565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561086057600080fd5b5061037e61086f366004612f09565b6120ba565b34801561088057600080fd5b506102e261088f366004612f09565b61216c565b60006001600160e01b031982166380ac58cd60e01b14806108c557506001600160e01b03198216635b5e139f60e01b145b806108e057506001600160e01b0319821663780e9d6360e01b145b806108fb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161092b90613352565b60405180910390fd5b6012805461ff001981166101009182900460ff1615909102179055565b60606002805461096090613586565b80601f016020809104026020016040519081016040528092919081815260200182805461098c90613586565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a0d5760405162461bcd60e51b815260040161092b90613352565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3c826001541190565b610a9e5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b606482015260840161092b565b506000908152600660205260409020546001600160a01b031690565b60606000826001600160401b03811115610ad657610ad6613632565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050600060015b6122b88111610b6f5760008181526014602052604090205460ff16610b5d5780838381518110610b3957610b3961361c565b602090810291909101015281610b4e816135c1565b925050848210610b5d57610b6f565b80610b67816135c1565b915050610b07565b50909392505050565b6000610b83826110cc565b9050806001600160a01b0316836001600160a01b03161415610bf25760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b606482015260840161092b565b336001600160a01b0382161480610c0e5750610c0e8133610826565b610c805760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161092b565b610c8b838383612207565b505050565b6000546001600160a01b03163314610cba5760405162461bcd60e51b815260040161092b90613352565b6012805460ff19811660ff90911615179055565b610c8b838383612263565b60606000610ce68361112a565b90506000816001600160401b03811115610d0257610d02613632565b604051908082528060200260200182016040528015610d2b578160200160208202803683370190505b50905060005b82811015610d78576000610d458683610d80565b905080838381518110610d5a57610d5a61361c565b60209081029190910101525080610d70816135c1565b915050610d31565b509392505050565b6000610d8b8361112a565b8210610de45760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161092b565b6000610def60015490565b905060008060005b83811015610e98576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e4957805192505b876001600160a01b0316836001600160a01b03161415610e855786841415610e77575093506108fb92505050565b83610e81816135c1565b9450505b5080610e90816135c1565b915050610df7565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b606482015260840161092b565b610c8b8383836040518060200160405280600081525061178a565b6000610f1e60015490565b8210610f785760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161092b565b5090565b6000546001600160a01b03163314610fa65760405162461bcd60e51b815260040161092b90613352565b8051610fb9906010906020840190612d9d565b5050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b815260040161092b90613352565b6002600954141561103a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b600260095560405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c19190613110565b505060016009555050565b60006110d7826125e9565b5192915050565b6000546001600160a01b031633146111085760405162461bcd60e51b815260040161092b90613352565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166111965760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161092b565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146111e55760405162461bcd60e51b815260040161092b90613352565b6111ef6000612792565b565b6015546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127391906131c8565b90506000816001600160401b0381111561128f5761128f613632565b6040519080825280602002602001820160405280156112b8578160200160208202803683370190505b50905060005b82811015610d7857601554604051632f745c5960e01b81526001600160a01b038781166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b91906131c8565b9050808383815181106113605761136061361c565b60209081029190910101525080611376816135c1565b9150506112be565b6000546001600160a01b031633146113a85760405162461bcd60e51b815260040161092b90613352565b600260095414156113fb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b6002600955604051600090339047908381818185875af1925050503d8060008114611442576040519150601f19603f3d011682016040523d82523d6000602084013e611447565b606091505b505090508061148b5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161092b565b506001600955565b60408051808201909152600080825260208201526108fb826125e9565b60606003805461096090613586565b6001600160a01b0382163314156115185760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604482015260640161092b565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3233146115a35760405162461bcd60e51b815260040161092b90613387565b601254610100900460ff166115ca5760405162461bcd60e51b815260040161092b9061341d565b60125462010000900460ff161561160d5780600b546115e991906134e5565b3410156116085760405162461bcd60e51b815260040161092b906132e4565b61163a565b80600a5461161b91906134e5565b34101561163a5760405162461bcd60e51b815260040161092b906132e4565b600061164560015490565b9050600061165283610aba565b905060005b815181101561177e57601460008383815181106116765761167661361c565b60209081029190910181015182528101919091526040016000205460ff16156116b15760405162461bcd60e51b815260040161092b9061331b565b60008282815181106116c5576116c561361c565b6020026020010151116116ea5760405162461bcd60e51b815260040161092b9061331b565b8181815181106116fc576116fc61361c565b602002602001015160136000838661171491906134b9565b81526020019081526020016000208190555060016014600084848151811061173e5761173e61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611776906135c1565b915050611657565b50610c8b3382516127e2565b611795848484612263565b6117a1848484846127fc565b6117bd5760405162461bcd60e51b815260040161092b906133ca565b50505050565b60606117d0826001541190565b6118345760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161092b565b600061183e61290a565b9050600081511161185e57604051806020016040528060008152506118a2565b600083815260136020526040902054819061187890612919565b611880612a16565b6040516020016118929392919061320d565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146118d35760405162461bcd60e51b815260040161092b90613352565b6012805462ff0000198116620100009182900460ff1615909102179055565b3233146119115760405162461bcd60e51b815260040161092b90613387565b60125460ff166119335760405162461bcd60e51b815260040161092b9061341d565b600061193e60015490565b905060005b8351811015611ead57601554845133916001600160a01b031690636352211e908790859081106119755761197561361c565b60200260200101516040518263ffffffff1660e01b815260040161199b91815260200190565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612f26565b6001600160a01b031614611a3a5760405162461bcd60e51b8152602060048201526016602482015275165bdd48191bdb89dd081bdddb881d1a1a5cc813919560521b604482015260640161092b565b60146000858381518110611a5057611a5061361c565b60209081029190910181015182528101919091526040016000205460ff1615611a8b5760405162461bcd60e51b815260040161092b9061331b565b838181518110611a9d57611a9d61361c565b6020026020010151601360008385611ab591906134b9565b815260200190815260200160002081905550600160146000868481518110611adf57611adf61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508215611e9b57610191848281518110611b2757611b2761361c565b60200260200101511015611c6157600d54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb991906131c8565b1015611bc457600080fd5b601654600d546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd906064015b602060405180830381600087803b158015611c1b57600080fd5b505af1158015611c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c539190613110565b611c5c57600080fd5b611e9b565b6109c4848281518110611c7657611c7661361c565b602002602001015111611d5357600e54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0791906131c8565b1015611d1257600080fd5b601654600e546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401611c01565b6122b8848281518110611d6857611d6861361c565b602002602001015111611e9b57600f54601654604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e9060440160206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df991906131c8565b1015611e0457600080fd5b601654600f546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611e5a57600080fd5b505af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190613110565b611e9b57600080fd5b80611ea5816135c1565b915050611943565b5081611ee1578251600c54611ec291906134e5565b341015611ee15760405162461bcd60e51b815260040161092b906132e4565b610c8b3384516127e2565b60006108fb82612a25565b323314611f165760405162461bcd60e51b815260040161092b90613387565b601254610100900460ff16611f3d5760405162461bcd60e51b815260040161092b9061341d565b6000611f4860015490565b60125490915062010000900460ff1615611f8f578151600b54611f6b91906134e5565b341015611f8a5760405162461bcd60e51b815260040161092b906132e4565b611fbd565b8151600a54611f9e91906134e5565b341015611fbd5760405162461bcd60e51b815260040161092b906132e4565b60005b82518110156120ae5760146000848381518110611fdf57611fdf61361c565b60209081029190910181015182528101919091526040016000205460ff161561201a5760405162461bcd60e51b815260040161092b9061331b565b82818151811061202c5761202c61361c565b602002602001015160136000838561204491906134b9565b81526020019081526020016000208190555060016014600085848151811061206e5761206e61361c565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120a6906135c1565b915050611fc0565b50610fb93383516127e2565b606060006120c78361112a565b90506000816001600160401b038111156120e3576120e3613632565b60405190808252806020026020018201604052801561210c578160200160208202803683370190505b50905060005b82811015610d785760006121268683610d80565b9050601360008281526020019081526020016000205483838151811061214e5761214e61361c565b60209081029190910101525080612164816135c1565b915050612112565b6000546001600160a01b031633146121965760405162461bcd60e51b815260040161092b90613352565b6001600160a01b0381166121fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b61220481612792565b50565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061226e826125e9565b80519091506000906001600160a01b0316336001600160a01b031614806122a557503361229a84610a2f565b6001600160a01b0316145b806122b7575081516122b79033610826565b9050806123215760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161092b565b846001600160a01b031682600001516001600160a01b0316146123955760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b606482015260840161092b565b6001600160a01b0384166123f95760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161092b565b6124096000848460000151612207565b6001600160a01b038516600090815260056020526040812080546001929061243b9084906001600160801b0316613504565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260056020526040812080546001945090926124879185911661348e565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b0319909116919092161717905561250e8460016134b9565b6000818152600460205260409020549091506001600160a01b031661259f57612538816001541190565b1561259f5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152612608826001541190565b6126675760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b606482015260840161092b565b60007f000000000000000000000000000000000000000000000000000000000000003283106126c8576126ba7f00000000000000000000000000000000000000000000000000000000000000328461352c565b6126c59060016134b9565b90505b825b818110612731576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561271e57949350505050565b50806127298161356f565b9150506126ca565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b606482015260840161092b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fb9828260405180602001604052806000815250612ac3565b60006001600160a01b0384163b156128fe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612840903390899088908890600401613250565b602060405180830381600087803b15801561285a57600080fd5b505af192505050801561288a575060408051601f3d908101601f191682019092526128879181019061314a565b60015b6128e4573d8080156128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b5080516128dc5760405162461bcd60e51b815260040161092b906133ca565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612902565b5060015b949350505050565b60606010805461096090613586565b60608161293d5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129675780612951816135c1565b91506129609050600a836134d1565b9150612941565b6000816001600160401b0381111561298157612981613632565b6040519080825280601f01601f1916602001820160405280156129ab576020820181803683370190505b5090505b8415612902576129c060018361352c565b91506129cd600a866135dc565b6129d89060306134b9565b60f81b8183815181106129ed576129ed61361c565b60200101906001600160f81b031916908160001a905350612a0f600a866134d1565b94506129af565b60606011805461096090613586565b60006001600160a01b038216612a975760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161092b565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b038416612b265760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161092b565b612b31816001541190565b15612b7e5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604482015260640161092b565b7f0000000000000000000000000000000000000000000000000000000000000032831115612bf95760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b606482015260840161092b565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612c5590879061348e565b6001600160801b03168152602001858360200151612c73919061348e565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b85811015612d925760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612d5660008884886127fc565b612d725760405162461bcd60e51b815260040161092b906133ca565b81612d7c816135c1565b9250508080612d8a906135c1565b915050612d09565b5060018190556125e1565b828054612da990613586565b90600052602060002090601f016020900481019282612dcb5760008555612e11565b82601f10612de457805160ff1916838001178555612e11565b82800160010185558215612e11579182015b82811115612e11578251825591602001919060010190612df6565b50610f789291505b80821115610f785760008155600101612e19565b60006001600160401b03831115612e4657612e46613632565b612e59601f8401601f191660200161345e565b9050828152838383011115612e6d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612e9557600080fd5b813560206001600160401b03821115612eb057612eb0613632565b8160051b612ebf82820161345e565b838152828101908684018388018501891015612eda57600080fd5b600093505b85841015612efd578035835260019390930192918401918401612edf565b50979650505050505050565b600060208284031215612f1b57600080fd5b81356118a281613648565b600060208284031215612f3857600080fd5b81516118a281613648565b60008060408385031215612f5657600080fd5b8235612f6181613648565b91506020830135612f7181613648565b809150509250929050565b600080600060608486031215612f9157600080fd5b8335612f9c81613648565b92506020840135612fac81613648565b929592945050506040919091013590565b60008060008060808587031215612fd357600080fd5b8435612fde81613648565b93506020850135612fee81613648565b92506040850135915060608501356001600160401b0381111561301057600080fd5b8501601f8101871361302157600080fd5b61303087823560208401612e2d565b91505092959194509250565b6000806040838503121561304f57600080fd5b823561305a81613648565b91506020830135612f718161365d565b6000806040838503121561307d57600080fd5b823561308881613648565b946020939093013593505050565b6000602082840312156130a857600080fd5b81356001600160401b038111156130be57600080fd5b61290284828501612e84565b600080604083850312156130dd57600080fd5b82356001600160401b038111156130f357600080fd5b6130ff85828601612e84565b9250506020830135612f718161365d565b60006020828403121561312257600080fd5b81516118a28161365d565b60006020828403121561313f57600080fd5b81356118a28161366b565b60006020828403121561315c57600080fd5b81516118a28161366b565b60006020828403121561317957600080fd5b81356001600160401b0381111561318f57600080fd5b8201601f810184136131a057600080fd5b61290284823560208401612e2d565b6000602082840312156131c157600080fd5b5035919050565b6000602082840312156131da57600080fd5b5051919050565b600081518084526131f9816020860160208601613543565b601f01601f19169290920160200192915050565b6000845161321f818460208901613543565b845190830190613233818360208901613543565b8451910190613246818360208801613543565b0195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613283908301846131e1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156132c5578351835292840192918401916001016132a9565b50909695505050505050565b6020815260006118a260208301846131e1565b6020808252601a908201527f596f75206e656564206d6f72652045544820746f206d696e742e000000000000604082015260600190565b6020808252601f908201527f5468697320546f6b656e20494420697320616c7265616479206d696e74656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f506c65617365206d696e7420617420746865206f6666696369616c207765627360408201526269746560e81b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60208082526021908201527f4d696e74696e672077696c6c206265207374617274696e672073686f72746c796040820152601760f91b606082015260800190565b604051601f8201601f191681016001600160401b038111828210171561348657613486613632565b604052919050565b60006001600160801b038083168185168083038211156134b0576134b06135f0565b01949350505050565b600082198211156134cc576134cc6135f0565b500190565b6000826134e0576134e0613606565b500490565b60008160001904831182151516156134ff576134ff6135f0565b500290565b60006001600160801b0383811690831681811015613524576135246135f0565b039392505050565b60008282101561353e5761353e6135f0565b500390565b60005b8381101561355e578181015183820152602001613546565b838111156117bd5750506000910152565b60008161357e5761357e6135f0565b506000190190565b600181811c9082168061359a57607f821691505b602082108114156135bb57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135d5576135d56135f0565b5060010190565b6000826135eb576135eb613606565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461220457600080fd5b801515811461220457600080fd5b6001600160e01b03198116811461220457600080fdfea26469706673582212209f91c25410f8d7a57cf4159c67007c3d6a4224308a08d37989fa2c252271afb064736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000759c55b14190ce6c5a74c15d62cd04a1ad9e49d700000000000000000000000000c9edb376e8c87e146f5af9ae023fb128e0ad4b000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f736861726b626f796669676874636c75622e636f6d2f76782f6a736f6e2f0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseUri (string): https://sharkboyfightclub.com/vx/json/
Arg [1] : sbfcContractAddress (address): 0x759c55B14190Ce6c5A74C15d62cd04a1Ad9e49d7
Arg [2] : loxContractAddress (address): 0x00C9Edb376E8c87e146F5aF9Ae023Fb128E0aD4B

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 000000000000000000000000759c55b14190ce6c5a74c15d62cd04a1ad9e49d7
Arg [2] : 00000000000000000000000000c9edb376e8c87e146f5af9ae023fb128e0ad4b
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [4] : 68747470733a2f2f736861726b626f796669676874636c75622e636f6d2f7678
Arg [5] : 2f6a736f6e2f0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

1699:8148:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28569:370:0;;;;;;;;;;-1:-1:-1;28569:370:0;;;;;:::i;:::-;;:::i;:::-;;;11076:14:2;;11069:22;11051:41;;11039:2;11024:18;28569:370:0;;;;;;;;9202:101:1;;;;;;;;;;;;;:::i;:::-;;30295:94:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9636:105:1:-;;;;;;;;;;-1:-1:-1;9636:105:1;;;;;:::i;:::-;;:::i;31941:204:0:-;;;;;;;;;;-1:-1:-1;31941:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8769:32:2;;;8751:51;;8739:2;8724:18;31941:204:0;8605:203:2;6329:369:1;;;;;;;;;;-1:-1:-1;6329:369:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31504:379:0:-;;;;;;;;;;-1:-1:-1;31504:379:0;;;;;:::i;:::-;;:::i;1794:51:1:-;;;;;;;;;;;;;;;;;;;22891:25:2;;;22879:2;22864:18;1794:51:1;22745:177:2;9311:92:1;;;;;;;;;;;;;:::i;27130:94:0:-;;;;;;;;;;-1:-1:-1;27206:12:0;;27130:94;;32791:142;;;;;;;;;;-1:-1:-1;32791:142:0;;;;;:::i;:::-;;:::i;6704:379:1:-;;;;;;;;;;-1:-1:-1;6704:379:1;;;;;:::i;:::-;;:::i;27761:744:0:-;;;;;;;;;;-1:-1:-1;27761:744:0;;;;;:::i;:::-;;:::i;2403:34:1:-;;;;;;;;;;-1:-1:-1;2403:34:1;;;;;;;;;;;32996:157:0;;;;;;;;;;-1:-1:-1;32996:157:0;;;;;:::i;:::-;;:::i;27293:177::-;;;;;;;;;;-1:-1:-1;27293:177:0;;;;;:::i;:::-;;:::i;9534:98:1:-;;;;;;;;;;-1:-1:-1;9534:98:1;;;;;:::i;:::-;;:::i;9037:157::-;;;;;;;;;;-1:-1:-1;9037:157:1;;;;;:::i;:::-;;:::i;2442:37::-;;;;;;;;;;-1:-1:-1;2442:37:1;;;;;;;;;;;30118:118:0;;;;;;;;;;-1:-1:-1;30118:118:0;;;;;:::i;:::-;;:::i;9747:97:1:-;;;;;;;;;;-1:-1:-1;9747:97:1;;;;;:::i;:::-;;:::i;28995:211:0:-;;;;;;;;;;-1:-1:-1;28995:211:0;;;;;:::i;:::-;;:::i;6971:103::-;;;;;;;;;;;;;:::i;2486:47:1:-;;;;;;;;;;-1:-1:-1;2486:47:1;;;;;:::i;:::-;;;;;;;;;;;;;;7495:403;;;;;;;;;;-1:-1:-1;7495:403:1;;;;;:::i;:::-;;:::i;2368:30::-;;;;;;;;;;-1:-1:-1;2368:30:1;;;;;;;;2538:50;;;;;;;;;;-1:-1:-1;2538:50:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;8848:183;;;;;;;;;;;;;:::i;6320:87:0:-;;;;;;;;;;-1:-1:-1;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;6320:87;;1995:48:1;;;;;;;;;;;;;;;;8695:147;;;;;;;;;;-1:-1:-1;8695:147:1;;;;;:::i;:::-;;:::i;:::-;;;;22610:13:2;;-1:-1:-1;;;;;22606:39:2;22588:58;;22706:4;22694:17;;;22688:24;-1:-1:-1;;;;;22684:49:2;22662:20;;;22655:79;;;;22561:18;8695:147:1;22380:360:2;30450:98:0;;;;;;;;;;;;;:::i;32209:274::-;;;;;;;;;;-1:-1:-1;32209:274:0;;;;;:::i;:::-;;:::i;5429:892:1:-;;;;;;:::i;:::-;;:::i;33216:311:0:-;;;;;;;;;;-1:-1:-1;33216:311:0;;;;;:::i;:::-;;:::i;2057:46:1:-;;;;;;;;;;;;;;;;1863:49;;;;;;;;;;;;;;;;1931:47;;;;;;;;;;;;;;;;7908:429;;;;;;;;;;-1:-1:-1;7908:429:1;;;;;:::i;:::-;;:::i;9411:114::-;;;;;;;;;;;;;:::i;37631:43:0:-;;;;;;;;;;;;;;;;3152:1484:1;;;;;;:::i;:::-;;:::i;8582:107::-;;;;;;;;;;-1:-1:-1;8582:107:1;;;;;:::i;:::-;;:::i;4644:778::-;;;;;;:::i;:::-;;:::i;2117:47::-;;;;;;;;;;;;;;;;32546:186:0;;;;;;;;;;-1:-1:-1;32546:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;32691:25:0;;;32668:4;32691:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32546:186;7089:399:1;;;;;;;;;;-1:-1:-1;7089:399:1;;;;;:::i;:::-;;:::i;7229:201:0:-;;;;;;;;;;-1:-1:-1;7229:201:0;;;;;:::i;:::-;;:::i;28569:370::-;28696:4;-1:-1:-1;;;;;;28726:40:0;;-1:-1:-1;;;28726:40:0;;:99;;-1:-1:-1;;;;;;;28777:48:0;;-1:-1:-1;;;28777:48:0;28726:99;:160;;;-1:-1:-1;;;;;;;28836:50:0;;-1:-1:-1;;;28836:50:0;28726:160;:207;;;-1:-1:-1;;;;;;;;;;18223:40:0;;;28897:36;28712:221;28569:370;-1:-1:-1;;28569:370:0:o;9202:101:1:-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;;;;;;;;;9281:14:1::1;::::0;;-1:-1:-1;;9263:32:1;::::1;9281:14;::::0;;;::::1;;;9280:15;9263:32:::0;;::::1;;::::0;;9202:101::o;30295:94:0:-;30349:13;30378:5;30371:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30295:94;:::o;9636:105:1:-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;9713:11:1::1;:22:::0;;-1:-1:-1;;;;;;9713:22:1::1;-1:-1:-1::0;;;;;9713:22:1;;;::::1;::::0;;;::::1;::::0;;9636:105::o;31941:204:0:-;32009:7;32033:16;32041:7;33853:12;;-1:-1:-1;33843:22:0;33766:105;32033:16;32025:74;;;;-1:-1:-1;;;32025:74:0;;21765:2:2;32025:74:0;;;21747:21:2;21804:2;21784:18;;;21777:30;21843:34;21823:18;;;21816:62;-1:-1:-1;;;21894:18:2;;;21887:43;21947:19;;32025:74:0;21563:409:2;32025:74:0;-1:-1:-1;32115:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32115:24:0;;31941:204::o;6329:369:1:-;6391:16;6416:19;6452:7;-1:-1:-1;;;;;6438:22:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6438:22:1;-1:-1:-1;6416:44:1;-1:-1:-1;6467:11:1;6506:1;6489:188;6514:4;6509:1;:9;6489:188;;6539:23;;;;:20;:23;;;;;;;;6534:136;;6584:1;6574:2;6577:3;6574:7;;;;;;;;:::i;:::-;;;;;;;;;;:11;6596:6;;;;:::i;:::-;;;;6623:7;6616:3;:14;6613:48;;6644:5;;6613:48;6520:3;;;;:::i;:::-;;;;6489:188;;;-1:-1:-1;6690:2:1;;6329:369;-1:-1:-1;;;6329:369:1:o;31504:379:0:-;31573:13;31589:24;31605:7;31589:15;:24::i;:::-;31573:40;;31634:5;-1:-1:-1;;;;;31628:11:0;:2;-1:-1:-1;;;;;31628:11:0;;;31620:58;;;;-1:-1:-1;;;31620:58:0;;18244:2:2;31620:58:0;;;18226:21:2;18283:2;18263:18;;;18256:30;18322:34;18302:18;;;18295:62;-1:-1:-1;;;18373:18:2;;;18366:32;18415:19;;31620:58:0;18042:398:2;31620:58:0;5267:10;-1:-1:-1;;;;;31703:21:0;;;;:62;;-1:-1:-1;31728:37:0;31745:5;5267:10;32546:186;:::i;31728:37::-;31687:153;;;;-1:-1:-1;;;31687:153:0;;15044:2:2;31687:153:0;;;15026:21:2;15083:2;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15193:27;15173:18;;;15166:55;15238:19;;31687:153:0;14842:421:2;31687:153:0;31849:28;31858:2;31862:7;31871:5;31849:8;:28::i;:::-;31566:317;31504:379;;:::o;9311:92:1:-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;9384:11:1::1;::::0;;-1:-1:-1;;9369:26:1;::::1;9384:11;::::0;;::::1;9383:12;9369:26;::::0;;9311:92::o;32791:142:0:-;32899:28;32909:4;32915:2;32919:7;32899:9;:28::i;6704:379:1:-;6771:16;6796:21;6820:16;6830:5;6820:9;:16::i;:::-;6796:40;;6843:30;6890:13;-1:-1:-1;;;;;6876:28:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6876:28:1;;6843:61;;6916:9;6911:140;6935:13;6931:1;:17;6911:140;;;6966:12;6981:28;7001:5;7007:1;6981:19;:28::i;:::-;6966:43;;7039:4;7020:13;7034:1;7020:16;;;;;;;;:::i;:::-;;;;;;;;;;:23;-1:-1:-1;6950:3:1;;;;:::i;:::-;;;;6911:140;;;-1:-1:-1;7064:13:1;6704:379;-1:-1:-1;;;6704:379:1:o;27761:744:0:-;27870:7;27905:16;27915:5;27905:9;:16::i;:::-;27897:5;:24;27889:71;;;;-1:-1:-1;;;27889:71:0;;11529:2:2;27889:71:0;;;11511:21:2;11568:2;11548:18;;;11541:30;11607:34;11587:18;;;11580:62;-1:-1:-1;;;11658:18:2;;;11651:32;11700:19;;27889:71:0;11327:398:2;27889:71:0;27967:22;27992:13;27206:12;;;27130:94;27992:13;27967:38;;28012:19;28042:25;28092:9;28087:350;28111:14;28107:1;:18;28087:350;;;28141:31;28175:14;;;:11;:14;;;;;;;;;28141:48;;;;;;;;;-1:-1:-1;;;;;28141:48:0;;;;;-1:-1:-1;;;28141:48:0;;;-1:-1:-1;;;;;28141:48:0;;;;;;;;28202:28;28198:89;;28263:14;;;-1:-1:-1;28198:89:0;28320:5;-1:-1:-1;;;;;28299:26:0;:17;-1:-1:-1;;;;;28299:26:0;;28295:135;;;28357:5;28342:11;:20;28338:59;;;-1:-1:-1;28384:1:0;-1:-1:-1;28377:8:0;;-1:-1:-1;;;28377:8:0;28338:59;28407:13;;;;:::i;:::-;;;;28295:135;-1:-1:-1;28127:3:0;;;;:::i;:::-;;;;28087:350;;;-1:-1:-1;28443:56:0;;-1:-1:-1;;;28443:56:0;;20574:2:2;28443:56:0;;;20556:21:2;20613:2;20593:18;;;20586:30;20652:34;20632:18;;;20625:62;-1:-1:-1;;;20703:18:2;;;20696:44;20757:19;;28443:56:0;20372:410:2;32996:157:0;33108:39;33125:4;33131:2;33135:7;33108:39;;;;;;;;;;;;:16;:39::i;27293:177::-;27360:7;27392:13;27206:12;;;27130:94;27392:13;27384:5;:21;27376:69;;;;-1:-1:-1;;;27376:69:0;;13465:2:2;27376:69:0;;;13447:21:2;13504:2;13484:18;;;13477:30;13543:34;13523:18;;;13516:62;-1:-1:-1;;;13594:18:2;;;13587:33;13637:19;;27376:69:0;13263:399:2;27376:69:0;-1:-1:-1;27459:5:0;27293:177::o;9534:98:1:-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;9603:23:1;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;9534:98:::0;:::o;9037:157::-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;1711:1:::1;2309:7;;:19;;2301:63;;;::::0;-1:-1:-1;;;2301:63:0;;20989:2:2;2301:63:0::1;::::0;::::1;20971:21:2::0;21028:2;21008:18;;;21001:30;21067:33;21047:18;;;21040:61;21118:18;;2301:63:0::1;20787:355:2::0;2301:63:0::1;1711:1;2442:7;:18:::0;9151:37:1::2;::::0;-1:-1:-1;;;9151:37:1;;-1:-1:-1;;;;;10187:32:2;;;9151:37:1::2;::::0;::::2;10169:51:2::0;10236:18;;;10229:34;;;9151:22:1;::::2;::::0;::::2;::::0;10142:18:2;;9151:37:1::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;1667:1:0::1;2621:7;:22:::0;-1:-1:-1;;9037:157:1:o;30118:118:0:-;30182:7;30205:20;30217:7;30205:11;:20::i;:::-;:25;;30118:118;-1:-1:-1;;30118:118:0:o;9747:97:1:-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;9816:11:1::1;:22:::0;;-1:-1:-1;;;;;;9816:22:1::1;-1:-1:-1::0;;;;;9816:22:1;;;::::1;::::0;;;::::1;::::0;;9747:97::o;28995:211:0:-;29059:7;-1:-1:-1;;;;;29083:19:0;;29075:75;;;;-1:-1:-1;;;29075:75:0;;15470:2:2;29075:75:0;;;15452:21:2;15509:2;15489:18;;;15482:30;15548:34;15528:18;;;15521:62;-1:-1:-1;;;15599:18:2;;;15592:41;15650:19;;29075:75:0;15268:407:2;29075:75:0;-1:-1:-1;;;;;;29172:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;29172:27:0;;28995:211::o;6971:103::-;6366:7;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;7036:30:::1;7063:1;7036:18;:30::i;:::-;6971:103::o:0;7495:403:1:-;7611:11;;:28;;-1:-1:-1;;;7611:28:1;;-1:-1:-1;;;;;8769:32:2;;;7611:28:1;;;8751:51:2;7562:16:1;;7587:21;;7611:11;;;:21;;8724:18:2;;7611:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7587:52;;7646:30;7693:13;-1:-1:-1;;;;;7679:28:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7679:28:1;;7646:61;;7719:9;7714:152;7738:13;7734:1;:17;7714:152;;;7784:11;;:40;;-1:-1:-1;;;7784:40:1;;-1:-1:-1;;;;;10187:32:2;;;7784:40:1;;;10169:51:2;10236:18;;;10229:34;;;7769:12:1;;7784:11;;:31;;10142:18:2;;7784:40:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7769:55;;7854:4;7835:13;7849:1;7835:16;;;;;;;;:::i;:::-;;;;;;;;;;:23;-1:-1:-1;7753:3:1;;;;:::i;:::-;;;;7714:152;;8848:183;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;1711:1:::1;2309:7;;:19;;2301:63;;;::::0;-1:-1:-1;;;2301:63:0;;20989:2:2;2301:63:0::1;::::0;::::1;20971:21:2::0;21028:2;21008:18;;;21001:30;21067:33;21047:18;;;21040:61;21118:18;;2301:63:0::1;20787:355:2::0;2301:63:0::1;1711:1;2442:7;:18:::0;8933:49:1::2;::::0;8915:12:::2;::::0;8933:10:::2;::::0;8956:21:::2;::::0;8915:12;8933:49;8915:12;8933:49;8956:21;8933:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8914:68;;;8997:7;8989:36;;;::::0;-1:-1:-1;;;8989:36:1;;18647:2:2;8989:36:1::2;::::0;::::2;18629:21:2::0;18686:2;18666:18;;;18659:30;-1:-1:-1;;;18705:18:2;;;18698:46;18761:18;;8989:36:1::2;18445:340:2::0;8989:36:1::2;-1:-1:-1::0;1667:1:0::1;2621:7;:22:::0;8848:183:1:o;8695:147::-;-1:-1:-1;;;;;;;;;;;;;;;;;8816:20:1;8828:7;8816:11;:20::i;30450:98:0:-;30506:13;30535:7;30528:14;;;;;:::i;32209:274::-;-1:-1:-1;;;;;32300:24:0;;5267:10;32300:24;;32292:63;;;;-1:-1:-1;;;32292:63:0;;17066:2:2;32292:63:0;;;17048:21:2;17105:2;17085:18;;;17078:30;17144:28;17124:18;;;17117:56;17190:18;;32292:63:0;16864:350:2;32292:63:0;5267:10;32364:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;32364:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;32364:53:0;;;;;;;;;;32429:48;;11051:41:2;;;32364:42:0;;5267:10;32429:48;;11024:18:2;32429:48:0;;;;;;;32209:274;;:::o;5429:892:1:-;3067:9;3080:10;3067:23;3059:71;;;;-1:-1:-1;;;3059:71:1;;;;;;;:::i;:::-;5539:14:::1;::::0;::::1;::::0;::::1;;;5531:60;;;;-1:-1:-1::0;;;5531:60:1::1;;;;;;;:::i;:::-;5604:18;::::0;;;::::1;;;5600:233;;;5679:7;5654:22;;:32;;;;:::i;:::-;5641:9;:45;;5633:84;;;;-1:-1:-1::0;;;5633:84:1::1;;;;;;;:::i;:::-;5600:233;;;5787:7;5761:23;;:33;;;;:::i;:::-;5748:9;:46;;5740:85;;;;-1:-1:-1::0;;;5740:85:1::1;;;;;;;:::i;:::-;5841:16;5860:13;27206:12:0::0;;;27130:94;5860:13:1::1;5841:32;;5880:28;5911:24;5927:7;5911:15;:24::i;:::-;5880:55;;5947:9;5942:324;5966:11;:18;5962:1;:22;5942:324;;;6009:20;:36;6030:11;6042:1;6030:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;6009:36;;;::::1;::::0;;;;;;-1:-1:-1;6009:36:1;;::::1;;6008:37;6000:81;;;;-1:-1:-1::0;;;6000:81:1::1;;;;;;;:::i;:::-;6115:1;6098:11;6110:1;6098:14;;;;;;;;:::i;:::-;;;;;;;:18;6090:62;;;;-1:-1:-1::0;;;6090:62:1::1;;;;;;;:::i;:::-;6192:11;6204:1;6192:14;;;;;;;;:::i;:::-;;;;;;;6163;:26;6187:1;6178:8;:10;;;;:::i;:::-;6163:26;;;;;;;;;;;:43;;;;6254:4;6215:20;:36;6236:11;6248:1;6236:14;;;;;;;;:::i;:::-;;;;;;;6215:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;5986:3;;;;;:::i;:::-;;;;5942:324;;;;6274:41;6284:10;6296:11;:18;6274:9;:41::i;33216:311:0:-:0;33353:28;33363:4;33369:2;33373:7;33353:9;:28::i;:::-;33404:48;33427:4;33433:2;33437:7;33446:5;33404:22;:48::i;:::-;33388:133;;;;-1:-1:-1;;;33388:133:0;;;;;;;:::i;:::-;33216:311;;;;:::o;7908:429:1:-;8006:13;8047:16;8055:7;33853:12:0;;-1:-1:-1;33843:22:0;33766:105;8047:16:1;8031:97;;;;-1:-1:-1;;;8031:97:1;;16650:2:2;8031:97:1;;;16632:21:2;16689:2;16669:18;;;16662:30;16728:34;16708:18;;;16701:62;-1:-1:-1;;;16779:18:2;;;16772:45;16834:19;;8031:97:1;16448:411:2;8031:97:1;8137:21;8161:10;:8;:10::i;:::-;8137:34;;8216:1;8198:7;8192:21;:25;:139;;;;;;;;;;;;;;;;;8262:23;;;;:14;:23;;;;;;8253:7;;8262:34;;:32;:34::i;:::-;8297:18;:16;:18::i;:::-;8236:80;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8192:139;8178:153;7908:429;-1:-1:-1;;;7908:429:1:o;9411:114::-;6366:7:0;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;9499:18:1::1;::::0;;-1:-1:-1;;9477:40:1;::::1;9499:18:::0;;;;::::1;;;9498:19;9477:40:::0;;::::1;;::::0;;9411:114::o;3152:1484::-;3067:9;3080:10;3067:23;3059:71;;;;-1:-1:-1;;;3059:71:1;;;;;;;:::i;:::-;3278:11:::1;::::0;::::1;;3270:57;;;;-1:-1:-1::0;;;3270:57:1::1;;;;;;;:::i;:::-;3336:16;3355:13;27206:12:0::0;;;27130:94;3355:13:1::1;3336:32;;3380:9;3375:1076;3399:10;:17;3395:1;:21;3375:1076;;;3440:11;::::0;3460:13;;3478:10:::1;::::0;-1:-1:-1;;;;;3440:11:1::1;::::0;:19:::1;::::0;3460:10;;3471:1;;3460:13;::::1;;;;;:::i;:::-;;;;;;;3440:34;;;;;;;;;;;;;22891:25:2::0;;22879:2;22864:18;;22745:177;3440:34:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3440:48:1::1;;3432:83;;;::::0;-1:-1:-1;;;3432:83:1;;14693:2:2;3432:83:1::1;::::0;::::1;14675:21:2::0;14732:2;14712:18;;;14705:30;-1:-1:-1;;;14751:18:2;;;14744:52;14813:18;;3432:83:1::1;14491:346:2::0;3432:83:1::1;3533:20;:35;3554:10;3565:1;3554:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;3533:35;;;::::1;::::0;;;;;;-1:-1:-1;3533:35:1;;::::1;;3532:36;3524:80;;;;-1:-1:-1::0;;;3524:80:1::1;;;;;;;:::i;:::-;3644:10;3655:1;3644:13;;;;;;;;:::i;:::-;;;;;;;3615:14;:26;3639:1;3630:8;:10;;;;:::i;:::-;3615:26;;;;;;;;;;;:42;;;;3704:4;3666:20;:35;3687:10;3698:1;3687:13;;;;;;;;:::i;:::-;;;;;;;3666:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3724:7;3720:722;;;3764:3;3748:10;3759:1;3748:13;;;;;;;;:::i;:::-;;;;;;;:19;3744:689;;;3842:20;::::0;3790:11:::1;::::0;:48:::1;::::0;-1:-1:-1;;;3790:48:1;;3812:10:::1;3790:48;::::0;::::1;9025:34:2::0;3832:4:1::1;9075:18:2::0;;;9068:43;-1:-1:-1;;;;;3790:11:1;;::::1;::::0;:21:::1;::::0;8960:18:2;;3790:48:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;3782:81;;;::::0;::::1;;3884:11;::::0;3936:20:::1;::::0;3884:73:::1;::::0;-1:-1:-1;;;3884:73:1;;3909:10:::1;3884:73;::::0;::::1;9362:34:2::0;3929:4:1::1;9412:18:2::0;;;9405:43;9464:18;;;9457:34;;;;-1:-1:-1;;;;;3884:11:1;;::::1;::::0;:24:::1;::::0;9297:18:2;;3884:73:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3876:82;;;::::0;::::1;;3744:689;;;3998:4;3980:10;3991:1;3980:13;;;;;;;;:::i;:::-;;;;;;;:22;3976:457;;4077:18;::::0;4025:11:::1;::::0;:48:::1;::::0;-1:-1:-1;;;4025:48:1;;4047:10:::1;4025:48;::::0;::::1;9025:34:2::0;4067:4:1::1;9075:18:2::0;;;9068:43;-1:-1:-1;;;;;4025:11:1;;::::1;::::0;:21:::1;::::0;8960:18:2;;4025:48:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;4017:79;;;::::0;::::1;;4117:11;::::0;4169:18:::1;::::0;4117:71:::1;::::0;-1:-1:-1;;;4117:71:1;;4142:10:::1;4117:71;::::0;::::1;9362:34:2::0;4162:4:1::1;9412:18:2::0;;;9405:43;9464:18;;;9457:34;;;;-1:-1:-1;;;;;4117:11:1;;::::1;::::0;:24:::1;::::0;9297:18:2;;4117:71:1::1;9122:375:2::0;3976:457:1::1;4228:4;4211:10;4222:1;4211:13;;;;;;;;:::i;:::-;;;;;;;:21;4207:226;;4307:19;::::0;4255:11:::1;::::0;:48:::1;::::0;-1:-1:-1;;;4255:48:1;;4277:10:::1;4255:48;::::0;::::1;9025:34:2::0;4297:4:1::1;9075:18:2::0;;;9068:43;-1:-1:-1;;;;;4255:11:1;;::::1;::::0;:21:::1;::::0;8960:18:2;;4255:48:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;4247:80;;;::::0;::::1;;4348:11;::::0;4400:19:::1;::::0;4348:72:::1;::::0;-1:-1:-1;;;4348:72:1;;4373:10:::1;4348:72;::::0;::::1;9362:34:2::0;4393:4:1::1;9412:18:2::0;;;9405:43;9464:18;;;9457:34;;;;-1:-1:-1;;;;;4348:11:1;;::::1;::::0;:24:::1;::::0;9297:18:2;;4348:72:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4340:81;;;::::0;::::1;;3418:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3375:1076;;;;4462:7;4457:127;;4526:10;:17;4503:20;;:40;;;;:::i;:::-;4490:9;:53;;4482:92;;;;-1:-1:-1::0;;;4482:92:1::1;;;;;;;:::i;:::-;4590:40;4600:10;4612;:17;4590:9;:40::i;8582:107::-:0;8640:7;8663:20;8677:5;8663:13;:20::i;4644:778::-;3067:9;3080:10;3067:23;3059:71;;;;-1:-1:-1;;;3059:71:1;;;;;;;:::i;:::-;4760:14:::1;::::0;::::1;::::0;::::1;;;4752:60;;;;-1:-1:-1::0;;;4752:60:1::1;;;;;;;:::i;:::-;4821:16;4840:13;27206:12:0::0;;;27130:94;4840:13:1::1;4866:18;::::0;4821:32;;-1:-1:-1;4866:18:1;;::::1;;;4862:253;;;4941:10;:17;4916:22;;:42;;;;:::i;:::-;4903:9;:55;;4895:94;;;;-1:-1:-1::0;;;4895:94:1::1;;;;;;;:::i;:::-;4862:253;;;5059:10;:17;5033:23;;:43;;;;:::i;:::-;5020:9;:56;;5012:95;;;;-1:-1:-1::0;;;5012:95:1::1;;;;;;;:::i;:::-;5126:9;5121:247;5145:10;:17;5141:1;:21;5121:247;;;5187:20;:35;5208:10;5219:1;5208:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;5187:35;;;::::1;::::0;;;;;;-1:-1:-1;5187:35:1;;::::1;;5186:36;5178:80;;;;-1:-1:-1::0;;;5178:80:1::1;;;;;;;:::i;:::-;5296:10;5307:1;5296:13;;;;;;;;:::i;:::-;;;;;;;5267:14;:26;5291:1;5282:8;:10;;;;:::i;:::-;5267:26;;;;;;;;;;;:42;;;;5356:4;5318:20;:35;5339:10;5350:1;5339:13;;;;;;;;:::i;:::-;;;;;;;5318:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;5164:3;;;;;:::i;:::-;;;;5121:247;;;;5376:40;5386:10;5398;:17;5376:9;:40::i;7089:399::-:0;7160:16;7185:21;7209:16;7219:5;7209:9;:16::i;:::-;7185:40;;7232:30;7279:13;-1:-1:-1;;;;;7265:28:1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7265:28:1;;7232:61;;7305:9;7300:156;7324:13;7320:1;:17;7300:156;;;7355:12;7370:28;7390:5;7396:1;7370:19;:28::i;:::-;7355:43;;7428:14;:20;7443:4;7428:20;;;;;;;;;;;;7409:13;7423:1;7409:16;;;;;;;;:::i;:::-;;;;;;;;;;:39;-1:-1:-1;7339:3:1;;;;:::i;:::-;;;;7300:156;;7229:201:0;6366:7;6393:6;-1:-1:-1;;;;;6393:6:0;5267:10;6540:23;6532:68;;;;-1:-1:-1;;;6532:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7318:22:0;::::1;7310:73;;;::::0;-1:-1:-1;;;7310:73:0;;11932:2:2;7310:73:0::1;::::0;::::1;11914:21:2::0;11971:2;11951:18;;;11944:30;12010:34;11990:18;;;11983:62;-1:-1:-1;;;12061:18:2;;;12054:36;12107:19;;7310:73:0::1;11730:402:2::0;7310:73:0::1;7394:28;7413:8;7394:18;:28::i;:::-;7229:201:::0;:::o;37453:172::-;37550:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;37550:29:0;-1:-1:-1;;;;;37550:29:0;;;;;;;;;37591:28;;37550:24;;37591:28;;;;;;;37453:172;;;:::o;35818:1529::-;35915:35;35953:20;35965:7;35953:11;:20::i;:::-;36024:18;;35915:58;;-1:-1:-1;35982:22:0;;-1:-1:-1;;;;;36008:34:0;5267:10;-1:-1:-1;;;;;36008:34:0;;:81;;;-1:-1:-1;5267:10:0;36053:20;36065:7;36053:11;:20::i;:::-;-1:-1:-1;;;;;36053:36:0;;36008:81;:142;;;-1:-1:-1;36117:18:0;;36100:50;;5267:10;32546:186;:::i;36100:50::-;35982:169;;36176:17;36160:101;;;;-1:-1:-1;;;36160:101:0;;17421:2:2;36160:101:0;;;17403:21:2;17460:2;17440:18;;;17433:30;17499:34;17479:18;;;17472:62;-1:-1:-1;;;17550:18:2;;;17543:48;17608:19;;36160:101:0;17219:414:2;36160:101:0;36308:4;-1:-1:-1;;;;;36286:26:0;:13;:18;;;-1:-1:-1;;;;;36286:26:0;;36270:98;;;;-1:-1:-1;;;36270:98:0;;15882:2:2;36270:98:0;;;15864:21:2;15921:2;15901:18;;;15894:30;15960:34;15940:18;;;15933:62;-1:-1:-1;;;16011:18:2;;;16004:36;16057:19;;36270:98:0;15680:402:2;36270:98:0;-1:-1:-1;;;;;36383:16:0;;36375:66;;;;-1:-1:-1;;;36375:66:0;;13869:2:2;36375:66:0;;;13851:21:2;13908:2;13888:18;;;13881:30;13947:34;13927:18;;;13920:62;-1:-1:-1;;;13998:18:2;;;13991:35;14043:19;;36375:66:0;13667:401:2;36375:66:0;36550:49;36567:1;36571:7;36580:13;:18;;;36550:8;:49::i;:::-;-1:-1:-1;;;;;36608:18:0;;;;;;:12;:18;;;;;:31;;36638:1;;36608:18;:31;;36638:1;;-1:-1:-1;;;;;36608:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36608:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36646:16:0;;-1:-1:-1;36646:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;36646:16:0;;:29;;-1:-1:-1;;36646:29:0;;:::i;:::-;;;-1:-1:-1;;;;;36646:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36705:43:0;;;;;;;;-1:-1:-1;;;;;36705:43:0;;;;;-1:-1:-1;;;;;36731:15:0;36705:43;;;;;;;;;-1:-1:-1;36682:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;36682:66:0;-1:-1:-1;;;;;;36682:66:0;;;;;;;;;;;36998:11;36694:7;-1:-1:-1;36998:11:0;:::i;:::-;37061:1;37020:24;;;:11;:24;;;;;:29;36976:33;;-1:-1:-1;;;;;;37020:29:0;37016:236;;37078:20;37086:11;33853:12;;-1:-1:-1;33843:22:0;33766:105;37078:20;37074:171;;;37138:97;;;;;;;;37165:18;;-1:-1:-1;;;;;37138:97:0;;;;;;37196:28;;;;-1:-1:-1;;;;;37138:97:0;;;;;;;;;-1:-1:-1;37111:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;37111:124:0;-1:-1:-1;;;;;;37111:124:0;;;;;;;;;;;;37074:171;37284:7;37280:2;-1:-1:-1;;;;;37265:27:0;37274:4;-1:-1:-1;;;;;37265:27:0;;;;;;;;;;;37299:42;35908:1439;;;35818:1529;;;:::o;29458:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;29575:16:0;29583:7;33853:12;;-1:-1:-1;33843:22:0;33766:105;29575:16;29567:71;;;;-1:-1:-1;;;29567:71:0;;12694:2:2;29567:71:0;;;12676:21:2;12733:2;12713:18;;;12706:30;12772:34;12752:18;;;12745:62;-1:-1:-1;;;12823:18:2;;;12816:40;12873:19;;29567:71:0;12492:406:2;29567:71:0;29647:26;29695:12;29684:7;:23;29680:93;;29739:22;29749:12;29739:7;:22;:::i;:::-;:26;;29764:1;29739:26;:::i;:::-;29718:47;;29680:93;29801:7;29781:212;29818:18;29810:4;:26;29781:212;;29855:31;29889:17;;;:11;:17;;;;;;;;;29855:51;;;;;;;;;-1:-1:-1;;;;;29855:51:0;;;;;-1:-1:-1;;;29855:51:0;;;-1:-1:-1;;;;;29855:51:0;;;;;;;;29919:28;29915:71;;29967:9;29458:606;-1:-1:-1;;;;29458:606:0:o;29915:71::-;-1:-1:-1;29838:6:0;;;;:::i;:::-;;;;29781:212;;;-1:-1:-1;30001:57:0;;-1:-1:-1;;;30001:57:0;;21349:2:2;30001:57:0;;;21331:21:2;21388:2;21368:18;;;21361:30;21427:34;21407:18;;;21400:62;-1:-1:-1;;;21478:18:2;;;21471:45;21533:19;;30001:57:0;21147:411:2;7590:191:0;7664:16;7683:6;;-1:-1:-1;;;;;7700:17:0;;;-1:-1:-1;;;;;;7700:17:0;;;;;;7733:40;;7683:6;;;;;;;7733:40;;7664:16;7733:40;7653:128;7590:191;:::o;33877:98::-;33942:27;33952:2;33956:8;33942:27;;;;;;;;;;;;:9;:27::i;39168:690::-;39305:4;-1:-1:-1;;;;;39322:13:0;;8794:20;8842:8;39318:535;;39361:72;;-1:-1:-1;;;39361:72:0;;-1:-1:-1;;;;;39361:36:0;;;;;:72;;5267:10;;39412:4;;39418:7;;39427:5;;39361:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39361:72:0;;;;;;;;-1:-1:-1;;39361:72:0;;;;;;;;;;;;:::i;:::-;;;39348:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39592:13:0;;39588:215;;39625:61;;-1:-1:-1;;;39625:61:0;;;;;;;:::i;39588:215::-;39771:6;39765:13;39756:6;39752:2;39748:15;39741:38;39348:464;-1:-1:-1;;;;;;39483:55:0;-1:-1:-1;;;39483:55:0;;-1:-1:-1;39476:62:0;;39318:535;-1:-1:-1;39841:4:0;39318:535;39168:690;;;;;;:::o;8466:108:1:-;8526:13;8555;8548:20;;;;;:::i;2886:723:0:-;2942:13;3163:10;3159:53;;-1:-1:-1;;3190:10:0;;;;;;;;;;;;-1:-1:-1;;;3190:10:0;;;;;2886:723::o;3159:53::-;3237:5;3222:12;3278:78;3285:9;;3278:78;;3311:8;;;;:::i;:::-;;-1:-1:-1;3334:10:0;;-1:-1:-1;3342:2:0;3334:10;;:::i;:::-;;;3278:78;;;3366:19;3398:6;-1:-1:-1;;;;;3388:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3388:17:0;;3366:39;;3416:154;3423:10;;3416:154;;3450:11;3460:1;3450:11;;:::i;:::-;;-1:-1:-1;3519:10:0;3527:2;3519:5;:10;:::i;:::-;3506:24;;:2;:24;:::i;:::-;3493:39;;3476:6;3483;3476:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3476:56:0;;;;;;;;-1:-1:-1;3547:11:0;3556:2;3547:11;;:::i;:::-;;;3416:154;;8343:116:1;8411:13;8440;8433:20;;;;;:::i;29212:240:0:-;29273:7;-1:-1:-1;;;;;29305:19:0;;29289:102;;;;-1:-1:-1;;;29289:102:0;;14275:2:2;29289:102:0;;;14257:21:2;14314:2;14294:18;;;14287:30;14353:34;14333:18;;;14326:62;-1:-1:-1;;;14404:18:2;;;14397:47;14461:19;;29289:102:0;14073:413:2;29289:102:0;-1:-1:-1;;;;;;29413:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;29413:32:0;;-1:-1:-1;;;;;29413:32:0;;29212:240::o;34314:1272::-;34442:12;;-1:-1:-1;;;;;34469:16:0;;34461:62;;;;-1:-1:-1;;;34461:62:0;;20172:2:2;34461:62:0;;;20154:21:2;20211:2;20191:18;;;20184:30;20250:34;20230:18;;;20223:62;-1:-1:-1;;;20301:18:2;;;20294:31;20342:19;;34461:62:0;19970:397:2;34461:62:0;34660:21;34668:12;33853;;-1:-1:-1;33843:22:0;33766:105;34660:21;34659:22;34651:64;;;;-1:-1:-1;;;34651:64:0;;19814:2:2;34651:64:0;;;19796:21:2;19853:2;19833:18;;;19826:30;19892:31;19872:18;;;19865:59;19941:18;;34651:64:0;19612:353:2;34651:64:0;34742:12;34730:8;:24;;34722:71;;;;-1:-1:-1;;;34722:71:0;;22179:2:2;34722:71:0;;;22161:21:2;22218:2;22198:18;;;22191:30;22257:34;22237:18;;;22230:62;-1:-1:-1;;;22308:18:2;;;22301:32;22350:19;;34722:71:0;21977:398:2;34722:71:0;-1:-1:-1;;;;;34905:16:0;;34872:30;34905:16;;;:12;:16;;;;;;;;;34872:49;;;;;;;;;-1:-1:-1;;;;;34872:49:0;;;;;-1:-1:-1;;;34872:49:0;;;;;;;;;;;34947:119;;;;;;;;34967:19;;34872:49;;34947:119;;;34967:39;;34997:8;;34967:39;:::i;:::-;-1:-1:-1;;;;;34947:119:0;;;;;35050:8;35015:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;34947:119:0;;;;;;-1:-1:-1;;;;;34928:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;34928:138:0;;;;;;;;;;;;35101:43;;;;;;;;;;-1:-1:-1;;;;;35127:15:0;35101:43;;;;;;;;35073:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;35073:71:0;-1:-1:-1;;;;;;35073:71:0;;;;;;;;;;;;;;;;;;35085:12;;35197:281;35221:8;35217:1;:12;35197:281;;;35250:38;;35275:12;;-1:-1:-1;;;;;35250:38:0;;;35267:1;;35250:38;;35267:1;;35250:38;35315:59;35346:1;35350:2;35354:12;35368:5;35315:22;:59::i;:::-;35297:150;;;;-1:-1:-1;;;35297:150:0;;;;;;;:::i;:::-;35456:14;;;;:::i;:::-;;;;35231:3;;;;;:::i;:::-;;;;35197:281;;;-1:-1:-1;35486:12:0;:27;;;35520:60;33216:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:2;78:5;-1:-1:-1;;;;;104:6:2;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:2;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:723::-;479:5;532:3;525:4;517:6;513:17;509:27;499:55;;550:1;547;540:12;499:55;586:6;573:20;612:4;-1:-1:-1;;;;;631:2:2;628:26;625:52;;;657:18;;:::i;:::-;703:2;700:1;696:10;726:28;750:2;746;742:11;726:28;:::i;:::-;788:15;;;819:12;;;;851:15;;;885;;;881:24;;878:33;-1:-1:-1;875:53:2;;;924:1;921;914:12;875:53;946:1;937:10;;956:163;970:2;967:1;964:9;956:163;;;1027:17;;1015:30;;988:1;981:9;;;;;1065:12;;;;1097;;956:163;;;-1:-1:-1;1137:5:2;425:723;-1:-1:-1;;;;;;;425:723:2:o;1153:247::-;1212:6;1265:2;1253:9;1244:7;1240:23;1236:32;1233:52;;;1281:1;1278;1271:12;1233:52;1320:9;1307:23;1339:31;1364:5;1339:31;:::i;1405:251::-;1475:6;1528:2;1516:9;1507:7;1503:23;1499:32;1496:52;;;1544:1;1541;1534:12;1496:52;1576:9;1570:16;1595:31;1620:5;1595:31;:::i;1661:388::-;1729:6;1737;1790:2;1778:9;1769:7;1765:23;1761:32;1758:52;;;1806:1;1803;1796:12;1758:52;1845:9;1832:23;1864:31;1889:5;1864:31;:::i;:::-;1914:5;-1:-1:-1;1971:2:2;1956:18;;1943:32;1984:33;1943:32;1984:33;:::i;:::-;2036:7;2026:17;;;1661:388;;;;;:::o;2054:456::-;2131:6;2139;2147;2200:2;2188:9;2179:7;2175:23;2171:32;2168:52;;;2216:1;2213;2206:12;2168:52;2255:9;2242:23;2274:31;2299:5;2274:31;:::i;:::-;2324:5;-1:-1:-1;2381:2:2;2366:18;;2353:32;2394:33;2353:32;2394:33;:::i;:::-;2054:456;;2446:7;;-1:-1:-1;;;2500:2:2;2485:18;;;;2472:32;;2054:456::o;2515:794::-;2610:6;2618;2626;2634;2687:3;2675:9;2666:7;2662:23;2658:33;2655:53;;;2704:1;2701;2694:12;2655:53;2743:9;2730:23;2762:31;2787:5;2762:31;:::i;:::-;2812:5;-1:-1:-1;2869:2:2;2854:18;;2841:32;2882:33;2841:32;2882:33;:::i;:::-;2934:7;-1:-1:-1;2988:2:2;2973:18;;2960:32;;-1:-1:-1;3043:2:2;3028:18;;3015:32;-1:-1:-1;;;;;3059:30:2;;3056:50;;;3102:1;3099;3092:12;3056:50;3125:22;;3178:4;3170:13;;3166:27;-1:-1:-1;3156:55:2;;3207:1;3204;3197:12;3156:55;3230:73;3295:7;3290:2;3277:16;3272:2;3268;3264:11;3230:73;:::i;:::-;3220:83;;;2515:794;;;;;;;:::o;3314:382::-;3379:6;3387;3440:2;3428:9;3419:7;3415:23;3411:32;3408:52;;;3456:1;3453;3446:12;3408:52;3495:9;3482:23;3514:31;3539:5;3514:31;:::i;:::-;3564:5;-1:-1:-1;3621:2:2;3606:18;;3593:32;3634:30;3593:32;3634:30;:::i;3701:315::-;3769:6;3777;3830:2;3818:9;3809:7;3805:23;3801:32;3798:52;;;3846:1;3843;3836:12;3798:52;3885:9;3872:23;3904:31;3929:5;3904:31;:::i;:::-;3954:5;4006:2;3991:18;;;;3978:32;;-1:-1:-1;;;3701:315:2:o;4021:348::-;4105:6;4158:2;4146:9;4137:7;4133:23;4129:32;4126:52;;;4174:1;4171;4164:12;4126:52;4214:9;4201:23;-1:-1:-1;;;;;4239:6:2;4236:30;4233:50;;;4279:1;4276;4269:12;4233:50;4302:61;4355:7;4346:6;4335:9;4331:22;4302:61;:::i;4374:477::-;4464:6;4472;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;-1:-1:-1;;;;;4606:6:2;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:61;4722:7;4713:6;4702:9;4698:22;4669:61;:::i;:::-;4659:71;;;4780:2;4769:9;4765:18;4752:32;4793:28;4815:5;4793:28;:::i;4856:245::-;4923:6;4976:2;4964:9;4955:7;4951:23;4947:32;4944:52;;;4992:1;4989;4982:12;4944:52;5024:9;5018:16;5043:28;5065:5;5043:28;:::i;5106:245::-;5164:6;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;5272:9;5259:23;5291:30;5315:5;5291:30;:::i;5356:249::-;5425:6;5478:2;5466:9;5457:7;5453:23;5449:32;5446:52;;;5494:1;5491;5484:12;5446:52;5526:9;5520:16;5545:30;5569:5;5545:30;:::i;6635:450::-;6704:6;6757:2;6745:9;6736:7;6732:23;6728:32;6725:52;;;6773:1;6770;6763:12;6725:52;6813:9;6800:23;-1:-1:-1;;;;;6838:6:2;6835:30;6832:50;;;6878:1;6875;6868:12;6832:50;6901:22;;6954:4;6946:13;;6942:27;-1:-1:-1;6932:55:2;;6983:1;6980;6973:12;6932:55;7006:73;7071:7;7066:2;7053:16;7048:2;7044;7040:11;7006:73;:::i;7090:180::-;7149:6;7202:2;7190:9;7181:7;7177:23;7173:32;7170:52;;;7218:1;7215;7208:12;7170:52;-1:-1:-1;7241:23:2;;7090:180;-1:-1:-1;7090:180:2:o;7275:184::-;7345:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:52;;;7414:1;7411;7404:12;7366:52;-1:-1:-1;7437:16:2;;7275:184;-1:-1:-1;7275:184:2:o;7464:257::-;7505:3;7543:5;7537:12;7570:6;7565:3;7558:19;7586:63;7642:6;7635:4;7630:3;7626:14;7619:4;7612:5;7608:16;7586:63;:::i;:::-;7703:2;7682:15;-1:-1:-1;;7678:29:2;7669:39;;;;7710:4;7665:50;;7464:257;-1:-1:-1;;7464:257:2:o;7726:664::-;7953:3;7991:6;7985:13;8007:53;8053:6;8048:3;8041:4;8033:6;8029:17;8007:53;:::i;:::-;8123:13;;8082:16;;;;8145:57;8123:13;8082:16;8179:4;8167:17;;8145:57;:::i;:::-;8269:13;;8224:20;;;8291:57;8269:13;8224:20;8325:4;8313:17;;8291:57;:::i;:::-;8364:20;;7726:664;-1:-1:-1;;;;;7726:664:2:o;9502:488::-;-1:-1:-1;;;;;9771:15:2;;;9753:34;;9823:15;;9818:2;9803:18;;9796:43;9870:2;9855:18;;9848:34;;;9918:3;9913:2;9898:18;;9891:31;;;9696:4;;9939:45;;9964:19;;9956:6;9939:45;:::i;:::-;9931:53;9502:488;-1:-1:-1;;;;;;9502:488:2:o;10274:632::-;10445:2;10497:21;;;10567:13;;10470:18;;;10589:22;;;10416:4;;10445:2;10668:15;;;;10642:2;10627:18;;;10416:4;10711:169;10725:6;10722:1;10719:13;10711:169;;;10786:13;;10774:26;;10855:15;;;;10820:12;;;;10747:1;10740:9;10711:169;;;-1:-1:-1;10897:3:2;;10274:632;-1:-1:-1;;;;;;10274:632:2:o;11103:219::-;11252:2;11241:9;11234:21;11215:4;11272:44;11312:2;11301:9;11297:18;11289:6;11272:44;:::i;12137:350::-;12339:2;12321:21;;;12378:2;12358:18;;;12351:30;12417:28;12412:2;12397:18;;12390:56;12478:2;12463:18;;12137:350::o;12903:355::-;13105:2;13087:21;;;13144:2;13124:18;;;13117:30;13183:33;13178:2;13163:18;;13156:61;13249:2;13234:18;;12903:355::o;16087:356::-;16289:2;16271:21;;;16308:18;;;16301:30;16367:34;16362:2;16347:18;;16340:62;16434:2;16419:18;;16087:356::o;17638:399::-;17840:2;17822:21;;;17879:2;17859:18;;;17852:30;17918:34;17913:2;17898:18;;17891:62;-1:-1:-1;;;17984:2:2;17969:18;;17962:33;18027:3;18012:19;;17638:399::o;18790:415::-;18992:2;18974:21;;;19031:2;19011:18;;;19004:30;19070:34;19065:2;19050:18;;19043:62;-1:-1:-1;;;19136:2:2;19121:18;;19114:49;19195:3;19180:19;;18790:415::o;19210:397::-;19412:2;19394:21;;;19451:2;19431:18;;;19424:30;19490:34;19485:2;19470:18;;19463:62;-1:-1:-1;;;19556:2:2;19541:18;;19534:31;19597:3;19582:19;;19210:397::o;22927:275::-;22998:2;22992:9;23063:2;23044:13;;-1:-1:-1;;23040:27:2;23028:40;;-1:-1:-1;;;;;23083:34:2;;23119:22;;;23080:62;23077:88;;;23145:18;;:::i;:::-;23181:2;23174:22;22927:275;;-1:-1:-1;22927:275:2:o;23207:253::-;23247:3;-1:-1:-1;;;;;23336:2:2;23333:1;23329:10;23366:2;23363:1;23359:10;23397:3;23393:2;23389:12;23384:3;23381:21;23378:47;;;23405:18;;:::i;:::-;23441:13;;23207:253;-1:-1:-1;;;;23207:253:2:o;23465:128::-;23505:3;23536:1;23532:6;23529:1;23526:13;23523:39;;;23542:18;;:::i;:::-;-1:-1:-1;23578:9:2;;23465:128::o;23598:120::-;23638:1;23664;23654:35;;23669:18;;:::i;:::-;-1:-1:-1;23703:9:2;;23598:120::o;23723:168::-;23763:7;23829:1;23825;23821:6;23817:14;23814:1;23811:21;23806:1;23799:9;23792:17;23788:45;23785:71;;;23836:18;;:::i;:::-;-1:-1:-1;23876:9:2;;23723:168::o;23896:246::-;23936:4;-1:-1:-1;;;;;24049:10:2;;;;24019;;24071:12;;;24068:38;;;24086:18;;:::i;:::-;24123:13;;23896:246;-1:-1:-1;;;23896:246:2:o;24147:125::-;24187:4;24215:1;24212;24209:8;24206:34;;;24220:18;;:::i;:::-;-1:-1:-1;24257:9:2;;24147:125::o;24277:258::-;24349:1;24359:113;24373:6;24370:1;24367:13;24359:113;;;24449:11;;;24443:18;24430:11;;;24423:39;24395:2;24388:10;24359:113;;;24490:6;24487:1;24484:13;24481:48;;;-1:-1:-1;;24525:1:2;24507:16;;24500:27;24277:258::o;24540:136::-;24579:3;24607:5;24597:39;;24616:18;;:::i;:::-;-1:-1:-1;;;24652:18:2;;24540:136::o;24681:380::-;24760:1;24756:12;;;;24803;;;24824:61;;24878:4;24870:6;24866:17;24856:27;;24824:61;24931:2;24923:6;24920:14;24900:18;24897:38;24894:161;;;24977:10;24972:3;24968:20;24965:1;24958:31;25012:4;25009:1;25002:15;25040:4;25037:1;25030:15;24894:161;;24681:380;;;:::o;25066:135::-;25105:3;-1:-1:-1;;25126:17:2;;25123:43;;;25146:18;;:::i;:::-;-1:-1:-1;25193:1:2;25182:13;;25066:135::o;25206:112::-;25238:1;25264;25254:35;;25269:18;;:::i;:::-;-1:-1:-1;25303:9:2;;25206:112::o;25323:127::-;25384:10;25379:3;25375:20;25372:1;25365:31;25415:4;25412:1;25405:15;25439:4;25436:1;25429:15;25455:127;25516:10;25511:3;25507:20;25504:1;25497:31;25547:4;25544:1;25537:15;25571:4;25568:1;25561:15;25587:127;25648:10;25643:3;25639:20;25636:1;25629:31;25679:4;25676:1;25669:15;25703:4;25700:1;25693:15;25719:127;25780:10;25775:3;25771:20;25768:1;25761:31;25811:4;25808:1;25801:15;25835:4;25832:1;25825:15;25851:131;-1:-1:-1;;;;;25926:31:2;;25916:42;;25906:70;;25972:1;25969;25962:12;25987:118;26073:5;26066:13;26059:21;26052:5;26049:32;26039:60;;26095:1;26092;26085:12;26110:131;-1:-1:-1;;;;;;26184:32:2;;26174:43;;26164:71;;26231:1;26228;26221:12

Swarm Source

ipfs://9f91c25410f8d7a57cf4159c67007c3d6a4224308a08d37989fa2c252271afb0
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.