ETH Price: $3,326.33 (-4.08%)

Token

Groupies (GROUPIE)
 

Overview

Max Total Supply

10,000 GROUPIE

Holders

2,867

Market

Volume (24H)

0.0977 ETH

Min Price (24H)

$22.62 @ 0.006800 ETH

Max Price (24H)

$50.23 @ 0.015100 ETH

Other Info

Filtered by Token Holder
jstjr.eth
Balance
2 GROUPIE
0x8ed1374ee2601eb3fd635978b17de61b2a7b3b82
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

PEACEFUL GROUPIES is a collection of 10000 unique and crazy characters. These peaceful creatures will follow you on your adventures through this digital psychedelic experience called the PEACEVOID.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Groupies

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: Groupies.sol
// SPDX-License-Identifier: MIT
/// @title PEACEFUL GROUPIES

pragma solidity ^0.8.6;

import { PaymentSplitter, ERC721, Ownable, ProxyRegistry } from './OpenZeppelinDependencies.sol';

contract Groupies is ERC721, PaymentSplitter, Ownable {
  uint public constant START_PRICE = 1.9608 ether;

  uint public constant END_PRICE = 0.06 ether;

  uint public startTime;

  uint public immutable DURATION;

  uint public immutable PRICE_PER_SECOND;

  uint public constant MAX_SUPPLY = 10_000;

  uint public constant MAX_MINT_AMOUNT = 10;

  uint public ownerMintsRemaining = 420;

  string private _contractURI = "https://gateway.pinata.cloud/ipfs/QmUX8Dami6mt2EdyNu6czA5bohAdQUuMAG1SRw5LvzZWHw";

  string public baseURI = "https://api.peacevoid.world/";

  address public immutable proxyRegistryAddress;

  uint public constant decimals = 0;

  uint public totalSupply = 0;

  event Log(address indexed to, uint price, uint amount, uint cost, uint sent, uint change);

  constructor(
    uint durationInHours,
    address _proxyRegistryAddress,
    address[] memory addresses,
    uint256[] memory amounts
  ) ERC721('Groupies', 'GROUPIE')
    PaymentSplitter(addresses, amounts) {
    DURATION = durationInHours * 60 * 60;
    PRICE_PER_SECOND = (START_PRICE - END_PRICE) / (durationInHours * 60 * 60);
    proxyRegistryAddress = _proxyRegistryAddress;
  }

  /**
   * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
   */
  function isApprovedForAll(address owner, address operator) public view override(ERC721) returns (bool) {

      ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);

      // Whitelist OpenSea proxy contract for easy trading.
      if (proxyRegistry.proxies(owner) == operator) {
          return true;
      }
      return super.isApprovedForAll(owner, operator);
  }

  function start() public onlyOwner {
    require(startTime == 0, 'Groupies: Already started');
    startTime = block.timestamp;
  }

  /// @notice Reserved for owner to mint
  function ownerMint(address to, uint amount) public onlyOwner {

    uint mintsRemaining = ownerMintsRemaining;

    /// @notice Owner mints cannot be minted after the maximum has been reached
    require(mintsRemaining > 0, "Groupies: Max owner mint limit reached");

    if (amount > mintsRemaining){
      amount = mintsRemaining;
    }

    uint currentTotalSupply = totalSupply;

    _mintAmountTo(to, amount, currentTotalSupply);

    ownerMintsRemaining = mintsRemaining - amount;

    totalSupply = currentTotalSupply + amount;
  }

  /// @notice Batch owner minting
  function batchOwnerMint(address[] calldata addresses, uint[] calldata amounts) public onlyOwner {
    require(addresses.length == amounts.length, "Groupies: batch length mismatch");

    for (uint i=0; i<addresses.length; i++){
      ownerMint(addresses[i], amounts[i]);
    }
  }

  /// @notice Public mints
  function mint(uint amount) public payable {
    require(startTime > 0, 'Groupies: not yet launched');

    /// @notice public can mint a maximum quantity at a time.
    require(amount <= MAX_MINT_AMOUNT, 'Groupies: mint amount exceeds maximum');

    uint currentTotalSupply = totalSupply;

    /// @notice Cannot exceed maximum supply
    require(currentTotalSupply+amount+ownerMintsRemaining <= MAX_SUPPLY, "Groupies: Not enough mints remaining");

    uint price = priceAtTime(block.timestamp);

    uint cost = amount * price;

    /// @notice public must send in correct funds
    require(msg.value > 0 && msg.value >= cost, "Groupies: Not enough value sent");

    if (msg.value > cost){
      uint change = msg.value - cost;
      (bool success, ) = msg.sender.call{value: change}("");
      require(success, "Groupies: Change send unsuccessful");
      emit Log(msg.sender, price, amount, cost, msg.value, change);
    } else {
      emit Log(msg.sender, price, amount, cost, msg.value, 0);
    }

    _mintAmountTo(msg.sender, amount, currentTotalSupply);

    totalSupply = currentTotalSupply + amount;
  }

  function _mintAmountTo(address to, uint amount, uint startId) internal {
    for (uint i = 1; i<=amount; i++){
      _mint(to, startId+i);
    }
  }

  function setBaseURI(string memory newBaseURI) external onlyOwner {
    baseURI = newBaseURI;
  }

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

  function setContractURI(string memory newContractURI) external onlyOwner {
    _contractURI = newContractURI;
  }

  function contractURI() external view returns (string memory){
    return _contractURI;
  }

  function currentPrice() public view returns (uint){
    return priceAtTime(block.timestamp);
  }

  function priceAtTime(uint time) public view returns (uint){
    uint _startTime = startTime;

    if (_startTime == 0 || time <= _startTime) return START_PRICE;

    if (time >= _startTime + DURATION) return END_PRICE;

    /// @notice Calculate the price decrease since start and subtract it from the starting price
    return START_PRICE - (PRICE_PER_SECOND * (time - _startTime));
  }

  function endTime() public view returns (uint){
    if (startTime == 0) return 0;
    return startTime + DURATION;
  }

  function details() public view returns(uint _startTime, uint _endTime, uint _duration, uint _startPrice, uint _endPrice, uint _priceSecond, uint _priceAtBlock, uint _blockTimestamp){
    return (startTime, endTime(), DURATION, START_PRICE, END_PRICE, PRICE_PER_SECOND, priceAtTime(block.timestamp), block.timestamp);
  }

  /// @notice PaymentSplitter introduces a `receive()` function that we do not need.
  receive() external payable override {
    revert();
  }

}

File 2 of 2: OpenZeppelinDependencies.sol
// Sources flattened with hardhat v2.6.1 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/utils/[email protected]


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

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


// File @openzeppelin/contracts/utils/math/[email protected]


// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


// File @openzeppelin/contracts/finance/[email protected]




/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + _totalReleased;
        uint256 payment = (totalReceived * _shares[account]) / _totalShares - _released[account];

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] = _released[account] + payment;
        _totalReleased = _totalReleased + payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/[email protected]


/**
 * @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/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


/**
 * @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 @openzeppelin/contracts/utils/[email protected]


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


// File @openzeppelin/contracts/utils/introspection/[email protected]


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


// File @openzeppelin/contracts/token/ERC721/[email protected]








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


// File @openzeppelin/contracts/access/[email protected]


/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/ProxyRegistry.sol


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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"durationInHours","type":"uint256"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"Log","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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","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":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"END_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_SECOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_PRICE","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchOwnerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"details","outputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_startPrice","type":"uint256"},{"internalType":"uint256","name":"_endPrice","type":"uint256"},{"internalType":"uint256","name":"_priceSecond","type":"uint256"},{"internalType":"uint256","name":"_priceAtBlock","type":"uint256"},{"internalType":"uint256","name":"_blockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerMintsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"priceAtTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

6101a4600d55610160604052605060e081815290620038656101003980516200003191600e9160209091019062000526565b5060408051808201909152601c8082527f68747470733a2f2f6170692e7065616365766f69642e776f726c642f0000000060209092019182526200007891600f9162000526565b5060006010553480156200008b57600080fd5b50604051620038b5380380620038b5833981016040819052620000ae9162000663565b604080518082018252600881526747726f757069657360c01b60208083019182528351808501909452600784526647524f5550494560c81b90840152815185938593929091620001019160009162000526565b5080516200011790600190602084019062000526565b50505080518251146200018c5760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620001df5760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604482015260640162000183565b60005b82518110156200024b57620002368382815181106200020557620002056200089b565b60200260200101518383815181106200022257620002226200089b565b6020026020010151620002e260201b60201c565b80620002428162000867565b915050620001e2565b5050506200026862000262620004d060201b60201c565b620004d4565b6200027584603c620007ee565b6200028290603c620007ee565b6080526200029284603c620007ee565b6200029f90603c620007ee565b620002ba66d529ae9e860000671b3629361396000062000810565b620002c69190620007cb565b60a052505060601b6001600160601b03191660c05250620008c7565b6001600160a01b0382166200034f5760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b606482015260840162000183565b60008111620003a15760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604482015260640162000183565b6001600160a01b038216600090815260086020526040902054156200041d5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b606482015260840162000183565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416908117909155600090815260086020526040902081905560065462000487908290620007b0565b600655604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000534906200082a565b90600052602060002090601f016020900481019282620005585760008555620005a3565b82601f106200057357805160ff1916838001178555620005a3565b82800160010185558215620005a3579182015b82811115620005a357825182559160200191906001019062000586565b50620005b1929150620005b5565b5090565b5b80821115620005b15760008155600101620005b6565b80516001600160a01b0381168114620005e457600080fd5b919050565b600082601f830112620005fb57600080fd5b81516020620006146200060e836200078a565b62000757565b80838252828201915082860187848660051b89010111156200063557600080fd5b60005b85811015620006565781518452928401929084019060010162000638565b5090979650505050505050565b600080600080608085870312156200067a57600080fd5b8451935060206200068d818701620005cc565b60408701519094506001600160401b0380821115620006ab57600080fd5b818801915088601f830112620006c057600080fd5b8151620006d16200060e826200078a565b8082825285820191508585018c878560051b8801011115620006f257600080fd5b600095505b8386101562000720576200070b81620005cc565b835260019590950194918601918601620006f7565b5060608b015190975094505050808311156200073b57600080fd5b50506200074b87828801620005e9565b91505092959194509250565b604051601f8201601f191681016001600160401b0381118282101715620007825762000782620008b1565b604052919050565b60006001600160401b03821115620007a657620007a6620008b1565b5060051b60200190565b60008219821115620007c657620007c662000885565b500190565b600082620007e957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200080b576200080b62000885565b500290565b60008282101562000825576200082562000885565b500390565b600181811c908216806200083f57607f821691505b602082108114156200086157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200087e576200087e62000885565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160601c612f41620009246000396000818161077d0152611c49015260008181610802015281816110bf0152611bc901526000818161040c01528181610ead0152818161108d0152611b7f0152612f416000f3fe6080604052600436106102f65760003560e01c806378e979251161018f578063c87b56dd116100e1578063e33b7de31161008a578063e985e9c511610064578063e985e9c51461086e578063f2fde38b1461088e578063fa9b7018146108ae57600080fd5b8063e33b7de314610824578063e754974814610839578063e8a3d4851461085957600080fd5b8063ce7c2ac2116100bb578063ce7c2ac21461079f578063da460977146107d5578063de9666bd146107f057600080fd5b8063c87b56dd1461072b578063cb02b9021461074b578063cd7c03261461076b57600080fd5b80639852595c11610143578063a22cb4651161011d578063a22cb465146106d6578063b88d4fde146106f6578063be9a65551461071657600080fd5b80639852595c146106785780639d1b464a146106ae578063a0712d68146106c357600080fd5b80638da5cb5b116101745780638da5cb5b14610625578063938e3d7b1461064357806395d89b411461066357600080fd5b806378e97925146105ef5780638b83209b1461060557600080fd5b80633609ac8f11610248578063565974d3116101fc5780636c0360eb116101d65780636c0360eb146105a557806370a08231146105ba578063715018a6146105da57600080fd5b8063565974d31461051f5780635743bdff1461056f5780636352211e1461058557600080fd5b806342842e0e1161022d57806342842e0e146104bf578063484b973c146104df57806355f804b3146104ff57600080fd5b80633609ac8f1461048e5780633a98ef39146104aa57600080fd5b806319165587116102aa578063313ce56711610284578063313ce5671461044e5780633197cbb61461046357806332cb6b0c1461047857600080fd5b806319165587146103da5780631be05289146103fa57806323b872dd1461042e57600080fd5b8063081812fc116102db578063081812fc1461035c578063095ea7b31461039457806318160ddd146103b657600080fd5b806301ffc9a71461030557806306fdde031461033a57600080fd5b3661030057600080fd5b600080fd5b34801561031157600080fd5b50610325610320366004612b5b565b6108c3565b60405190151581526020015b60405180910390f35b34801561034657600080fd5b5061034f6109a8565b6040516103319190612cac565b34801561036857600080fd5b5061037c610377366004612bde565b610a3a565b6040516001600160a01b039091168152602001610331565b3480156103a057600080fd5b506103b46103af366004612ac3565b610ae5565b005b3480156103c257600080fd5b506103cc60105481565b604051908152602001610331565b3480156103e657600080fd5b506103b46103f536600461295c565b610c17565b34801561040657600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043a57600080fd5b506103b46104493660046129cf565b610e11565b34801561045a57600080fd5b506103cc600081565b34801561046f57600080fd5b506103cc610e98565b34801561048457600080fd5b506103cc61271081565b34801561049a57600080fd5b506103cc671b3629361396000081565b3480156104b657600080fd5b506006546103cc565b3480156104cb57600080fd5b506103b46104da3660046129cf565b610ede565b3480156104eb57600080fd5b506103b46104fa366004612ac3565b610ef9565b34801561050b57600080fd5b506103b461051a366004612b95565b611003565b34801561052b57600080fd5b50610534611074565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610331565b34801561057b57600080fd5b506103cc600d5481565b34801561059157600080fd5b5061037c6105a0366004612bde565b611100565b3480156105b157600080fd5b5061034f61118b565b3480156105c657600080fd5b506103cc6105d536600461295c565b611219565b3480156105e657600080fd5b506103b46112b3565b3480156105fb57600080fd5b506103cc600c5481565b34801561061157600080fd5b5061037c610620366004612bde565b611319565b34801561063157600080fd5b50600b546001600160a01b031661037c565b34801561064f57600080fd5b506103b461065e366004612b95565b611349565b34801561066f57600080fd5b5061034f6113b6565b34801561068457600080fd5b506103cc61069336600461295c565b6001600160a01b031660009081526009602052604090205490565b3480156106ba57600080fd5b506103cc6113c5565b6103b46106d1366004612bde565b6113d0565b3480156106e257600080fd5b506103b46106f1366004612a90565b611733565b34801561070257600080fd5b506103b4610711366004612a10565b611816565b34801561072257600080fd5b506103b46118a4565b34801561073757600080fd5b5061034f610746366004612bde565b611954565b34801561075757600080fd5b506103b4610766366004612aef565b611a3d565b34801561077757600080fd5b5061037c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ab57600080fd5b506103cc6107ba36600461295c565b6001600160a01b031660009081526008602052604090205490565b3480156107e157600080fd5b506103cc66d529ae9e86000081565b3480156107fc57600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561083057600080fd5b506007546103cc565b34801561084557600080fd5b506103cc610854366004612bde565b611b52565b34801561086557600080fd5b5061034f611bff565b34801561087a57600080fd5b50610325610889366004612996565b611c0e565b34801561089a57600080fd5b506103b46108a936600461295c565b611d15565b3480156108ba57600080fd5b506103cc600a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061095657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600080546109b790612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612d6b565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610af082611100565b9050806001600160a01b0316836001600160a01b03161415610b7a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b336001600160a01b0382161480610b965750610b968133611c0e565b610c085760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ac0565b610c128383611df7565b505050565b6001600160a01b038116600090815260086020526040902054610ca25760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201527f73686172657300000000000000000000000000000000000000000000000000006064820152608401610ac0565b600060075447610cb29190612cbf565b6001600160a01b0383166000908152600960209081526040808320546006546008909352908320549394509192610ce99085612ceb565b610cf39190612cd7565b610cfd9190612d28565b905080610d725760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201527f647565207061796d656e740000000000000000000000000000000000000000006064820152608401610ac0565b6001600160a01b038316600090815260096020526040902054610d96908290612cbf565b6001600160a01b038416600090815260096020526040902055600754610dbd908290612cbf565b600755610dca8382611e7d565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610e1b3382611f96565b610e8d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610ac0565b610c12838383612076565b6000600c5460001415610eab5750600090565b7f0000000000000000000000000000000000000000000000000000000000000000600c54610ed99190612cbf565b905090565b610c1283838360405180602001604052806000815250611816565b600b546001600160a01b03163314610f535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b600d5480610fc95760405162461bcd60e51b815260206004820152602660248201527f47726f75706965733a204d6178206f776e6572206d696e74206c696d6974207260448201527f65616368656400000000000000000000000000000000000000000000000000006064820152608401610ac0565b80821115610fd5578091505b601054610fe384848361225b565b610fed8383612d28565b600d55610ffa8382612cbf565b60105550505050565b600b546001600160a01b0316331461105d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b805161107090600f9060208401906127e3565b5050565b600080600080600080600080600c5461108b610e98565b7f0000000000000000000000000000000000000000000000000000000000000000671b3629361396000066d529ae9e8600007f00000000000000000000000000000000000000000000000000000000000000006110e742611b52565b959e949d50929b50909950975095509093504292509050565b6000818152600260205260408120546001600160a01b0316806109a25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610ac0565b600f805461119890612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546111c490612d6b565b80156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050505081565b60006001600160a01b0382166112975760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610ac0565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0316331461130d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b611317600061228a565b565b6000600a828154811061132e5761132e612e6a565b6000918252602090912001546001600160a01b031692915050565b600b546001600160a01b031633146113a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b805161107090600e9060208401906127e3565b6060600180546109b790612d6b565b6000610ed942611b52565b6000600c54116114225760405162461bcd60e51b815260206004820152601a60248201527f47726f75706965733a206e6f7420796574206c61756e636865640000000000006044820152606401610ac0565b600a8111156114995760405162461bcd60e51b815260206004820152602560248201527f47726f75706965733a206d696e7420616d6f756e742065786365656473206d6160448201527f78696d756d0000000000000000000000000000000000000000000000000000006064820152608401610ac0565b601054600d54612710906114ad8484612cbf565b6114b79190612cbf565b111561152a5760405162461bcd60e51b8152602060048201526024808201527f47726f75706965733a204e6f7420656e6f756768206d696e74732072656d616960448201527f6e696e67000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b600061153542611b52565b905060006115438285612ceb565b90506000341180156115555750803410155b6115a15760405162461bcd60e51b815260206004820152601f60248201527f47726f75706965733a204e6f7420656e6f7567682076616c75652073656e74006044820152606401610ac0565b803411156116cd5760006115b58234612d28565b604051909150600090339083908381818185875af1925050503d80600081146115fa576040519150601f19603f3d011682016040523d82523d6000602084013e6115ff565b606091505b50509050806116765760405162461bcd60e51b815260206004820152602260248201527f47726f75706965733a204368616e67652073656e6420756e737563636573736660448201527f756c0000000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b60408051858152602081018890529081018490523460608201526080810183905233907f44d8b4fd383eeab25a87ec80ee90bb01654f94506272fd1ea6fe85a0464107e09060a00160405180910390a2505061171e565b60408051838152602081018690529081018290523460608201526000608082015233907f44d8b4fd383eeab25a87ec80ee90bb01654f94506272fd1ea6fe85a0464107e09060a00160405180910390a25b61172933858561225b565b610ffa8484612cbf565b6001600160a01b03821633141561178c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ac0565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118203383611f96565b6118925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610ac0565b61189e848484846122f4565b50505050565b600b546001600160a01b031633146118fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b600c541561194e5760405162461bcd60e51b815260206004820152601960248201527f47726f75706965733a20416c72656164792073746172746564000000000000006044820152606401610ac0565b42600c55565b6000818152600260205260409020546060906001600160a01b03166119e15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610ac0565b60006119eb61237d565b90506000815111611a0b5760405180602001604052806000815250611a36565b80611a158461238c565b604051602001611a26929190612c41565b6040516020818303038152906040525b9392505050565b600b546001600160a01b03163314611a975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b828114611ae65760405162461bcd60e51b815260206004820152601f60248201527f47726f75706965733a206261746368206c656e677468206d69736d61746368006044820152606401610ac0565b60005b83811015611b4b57611b39858583818110611b0657611b06612e6a565b9050602002016020810190611b1b919061295c565b848484818110611b2d57611b2d612e6a565b90506020020135610ef9565b80611b4381612dbf565b915050611ae9565b5050505050565b600c54600090801580611b655750808311155b15611b7a5750671b3629361396000092915050565b611ba47f000000000000000000000000000000000000000000000000000000000000000082612cbf565b8310611bb9575066d529ae9e86000092915050565b611bc38184612d28565b611bed907f0000000000000000000000000000000000000000000000000000000000000000612ceb565b611a3690671b36293613960000612d28565b6060600e80546109b790612d6b565b6040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000091848116919083169063c45527919060240160206040518083038186803b158015611c9257600080fd5b505afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cca9190612979565b6001600160a01b03161415611ce35760019150506109a2565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b600b546001600160a01b03163314611d6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b6001600160a01b038116611deb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ac0565b611df48161228a565b50565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611e4482611100565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015611ecd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ac0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f1a576040519150601f19603f3d011682016040523d82523d6000602084013e611f1f565b606091505b5050905080610c125760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ac0565b6000818152600260205260408120546001600160a01b03166120205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610ac0565b600061202b83611100565b9050806001600160a01b0316846001600160a01b031614806120665750836001600160a01b031661205b84610a3a565b6001600160a01b0316145b80611d0d5750611d0d8185611c0e565b826001600160a01b031661208982611100565b6001600160a01b0316146121055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610ac0565b6001600160a01b0382166121805760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b61218b600082611df7565b6001600160a01b03831660009081526003602052604081208054600192906121b4908490612d28565b90915550506001600160a01b03821660009081526003602052604081208054600192906121e2908490612cbf565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60015b82811161189e57612278846122738385612cbf565b6124be565b8061228281612dbf565b91505061225e565b600b80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6122ff848484612076565b61230b84848484612618565b61189e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ac0565b6060600f80546109b790612d6b565b6060816123cc57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156123f657806123e081612dbf565b91506123ef9050600a83612cd7565b91506123d0565b60008167ffffffffffffffff81111561241157612411612e99565b6040519080825280601f01601f19166020018201604052801561243b576020820181803683370190505b5090505b8415611d0d57612450600183612d28565b915061245d600a86612df8565b612468906030612cbf565b60f81b81838151811061247d5761247d612e6a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124b7600a86612cd7565b945061243f565b6001600160a01b0382166125145760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ac0565b6000818152600260205260409020546001600160a01b0316156125795760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ac0565b6001600160a01b03821660009081526003602052604081208054600192906125a2908490612cbf565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156127d8576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612675903390899088908890600401612c70565b602060405180830381600087803b15801561268f57600080fd5b505af19250505080156126dd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126da91810190612b78565b60015b61278d573d80801561270b576040519150601f19603f3d011682016040523d82523d6000602084013e612710565b606091505b5080516127855760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ac0565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d0d565b506001949350505050565b8280546127ef90612d6b565b90600052602060002090601f0160209004810192826128115760008555612857565b82601f1061282a57805160ff1916838001178555612857565b82800160010185558215612857579182015b8281111561285757825182559160200191906001019061283c565b50612863929150612867565b5090565b5b808211156128635760008155600101612868565b600067ffffffffffffffff8084111561289757612897612e99565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156128dd576128dd612e99565b816040528093508581528686860111156128f657600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261292257600080fd5b50813567ffffffffffffffff81111561293a57600080fd5b6020830191508360208260051b850101111561295557600080fd5b9250929050565b60006020828403121561296e57600080fd5b8135611a3681612ec8565b60006020828403121561298b57600080fd5b8151611a3681612ec8565b600080604083850312156129a957600080fd5b82356129b481612ec8565b915060208301356129c481612ec8565b809150509250929050565b6000806000606084860312156129e457600080fd5b83356129ef81612ec8565b925060208401356129ff81612ec8565b929592945050506040919091013590565b60008060008060808587031215612a2657600080fd5b8435612a3181612ec8565b93506020850135612a4181612ec8565b925060408501359150606085013567ffffffffffffffff811115612a6457600080fd5b8501601f81018713612a7557600080fd5b612a848782356020840161287c565b91505092959194509250565b60008060408385031215612aa357600080fd5b8235612aae81612ec8565b9150602083013580151581146129c457600080fd5b60008060408385031215612ad657600080fd5b8235612ae181612ec8565b946020939093013593505050565b60008060008060408587031215612b0557600080fd5b843567ffffffffffffffff80821115612b1d57600080fd5b612b2988838901612910565b90965094506020870135915080821115612b4257600080fd5b50612b4f87828801612910565b95989497509550505050565b600060208284031215612b6d57600080fd5b8135611a3681612edd565b600060208284031215612b8a57600080fd5b8151611a3681612edd565b600060208284031215612ba757600080fd5b813567ffffffffffffffff811115612bbe57600080fd5b8201601f81018413612bcf57600080fd5b611d0d8482356020840161287c565b600060208284031215612bf057600080fd5b5035919050565b60008151808452612c0f816020860160208601612d3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008351612c53818460208801612d3f565b835190830190612c67818360208801612d3f565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612ca26080830184612bf7565b9695505050505050565b602081526000611a366020830184612bf7565b60008219821115612cd257612cd2612e0c565b500190565b600082612ce657612ce6612e3b565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d2357612d23612e0c565b500290565b600082821015612d3a57612d3a612e0c565b500390565b60005b83811015612d5a578181015183820152602001612d42565b8381111561189e5750506000910152565b600181811c90821680612d7f57607f821691505b60208210811415612db9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612df157612df1612e0c565b5060010190565b600082612e0757612e07612e3b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114611df457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611df457600080fdfea2646970667358221220ecc474e7d4e621268e8f318915149705b84dc02961447c22a73a57c96195d30864736f6c6343000806003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d55583844616d69366d74324564794e7536637a4135626f6841645155754d414731535277354c767a5a5748770000000000000000000000000000000000000000000000000000000000000030000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a4d0add0058d26916b6e449f9375e9af8f6c1eb4000000000000000000000000c572b6b3bdf1f4dd143bca832ad4385634fd3dd50000000000000000000000008273e41cb61efdb5bf690c8e082eb3f8212cae2800000000000000000000000085cd14af3c106d2eaf282482e8aca2c53eb966c700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000005

Deployed Bytecode

0x6080604052600436106102f65760003560e01c806378e979251161018f578063c87b56dd116100e1578063e33b7de31161008a578063e985e9c511610064578063e985e9c51461086e578063f2fde38b1461088e578063fa9b7018146108ae57600080fd5b8063e33b7de314610824578063e754974814610839578063e8a3d4851461085957600080fd5b8063ce7c2ac2116100bb578063ce7c2ac21461079f578063da460977146107d5578063de9666bd146107f057600080fd5b8063c87b56dd1461072b578063cb02b9021461074b578063cd7c03261461076b57600080fd5b80639852595c11610143578063a22cb4651161011d578063a22cb465146106d6578063b88d4fde146106f6578063be9a65551461071657600080fd5b80639852595c146106785780639d1b464a146106ae578063a0712d68146106c357600080fd5b80638da5cb5b116101745780638da5cb5b14610625578063938e3d7b1461064357806395d89b411461066357600080fd5b806378e97925146105ef5780638b83209b1461060557600080fd5b80633609ac8f11610248578063565974d3116101fc5780636c0360eb116101d65780636c0360eb146105a557806370a08231146105ba578063715018a6146105da57600080fd5b8063565974d31461051f5780635743bdff1461056f5780636352211e1461058557600080fd5b806342842e0e1161022d57806342842e0e146104bf578063484b973c146104df57806355f804b3146104ff57600080fd5b80633609ac8f1461048e5780633a98ef39146104aa57600080fd5b806319165587116102aa578063313ce56711610284578063313ce5671461044e5780633197cbb61461046357806332cb6b0c1461047857600080fd5b806319165587146103da5780631be05289146103fa57806323b872dd1461042e57600080fd5b8063081812fc116102db578063081812fc1461035c578063095ea7b31461039457806318160ddd146103b657600080fd5b806301ffc9a71461030557806306fdde031461033a57600080fd5b3661030057600080fd5b600080fd5b34801561031157600080fd5b50610325610320366004612b5b565b6108c3565b60405190151581526020015b60405180910390f35b34801561034657600080fd5b5061034f6109a8565b6040516103319190612cac565b34801561036857600080fd5b5061037c610377366004612bde565b610a3a565b6040516001600160a01b039091168152602001610331565b3480156103a057600080fd5b506103b46103af366004612ac3565b610ae5565b005b3480156103c257600080fd5b506103cc60105481565b604051908152602001610331565b3480156103e657600080fd5b506103b46103f536600461295c565b610c17565b34801561040657600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000002a30081565b34801561043a57600080fd5b506103b46104493660046129cf565b610e11565b34801561045a57600080fd5b506103cc600081565b34801561046f57600080fd5b506103cc610e98565b34801561048457600080fd5b506103cc61271081565b34801561049a57600080fd5b506103cc671b3629361396000081565b3480156104b657600080fd5b506006546103cc565b3480156104cb57600080fd5b506103b46104da3660046129cf565b610ede565b3480156104eb57600080fd5b506103b46104fa366004612ac3565b610ef9565b34801561050b57600080fd5b506103b461051a366004612b95565b611003565b34801561052b57600080fd5b50610534611074565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610331565b34801561057b57600080fd5b506103cc600d5481565b34801561059157600080fd5b5061037c6105a0366004612bde565b611100565b3480156105b157600080fd5b5061034f61118b565b3480156105c657600080fd5b506103cc6105d536600461295c565b611219565b3480156105e657600080fd5b506103b46112b3565b3480156105fb57600080fd5b506103cc600c5481565b34801561061157600080fd5b5061037c610620366004612bde565b611319565b34801561063157600080fd5b50600b546001600160a01b031661037c565b34801561064f57600080fd5b506103b461065e366004612b95565b611349565b34801561066f57600080fd5b5061034f6113b6565b34801561068457600080fd5b506103cc61069336600461295c565b6001600160a01b031660009081526009602052604090205490565b3480156106ba57600080fd5b506103cc6113c5565b6103b46106d1366004612bde565b6113d0565b3480156106e257600080fd5b506103b46106f1366004612a90565b611733565b34801561070257600080fd5b506103b4610711366004612a10565b611816565b34801561072257600080fd5b506103b46118a4565b34801561073757600080fd5b5061034f610746366004612bde565b611954565b34801561075757600080fd5b506103b4610766366004612aef565b611a3d565b34801561077757600080fd5b5061037c7f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c181565b3480156107ab57600080fd5b506103cc6107ba36600461295c565b6001600160a01b031660009081526008602052604090205490565b3480156107e157600080fd5b506103cc66d529ae9e86000081565b3480156107fc57600080fd5b506103cc7f00000000000000000000000000000000000000000000000000000a012317b00081565b34801561083057600080fd5b506007546103cc565b34801561084557600080fd5b506103cc610854366004612bde565b611b52565b34801561086557600080fd5b5061034f611bff565b34801561087a57600080fd5b50610325610889366004612996565b611c0e565b34801561089a57600080fd5b506103b46108a936600461295c565b611d15565b3480156108ba57600080fd5b506103cc600a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061095657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600080546109b790612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546109e390612d6b565b8015610a305780601f10610a0557610100808354040283529160200191610a30565b820191906000526020600020905b815481529060010190602001808311610a1357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ac95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610af082611100565b9050806001600160a01b0316836001600160a01b03161415610b7a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b336001600160a01b0382161480610b965750610b968133611c0e565b610c085760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ac0565b610c128383611df7565b505050565b6001600160a01b038116600090815260086020526040902054610ca25760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201527f73686172657300000000000000000000000000000000000000000000000000006064820152608401610ac0565b600060075447610cb29190612cbf565b6001600160a01b0383166000908152600960209081526040808320546006546008909352908320549394509192610ce99085612ceb565b610cf39190612cd7565b610cfd9190612d28565b905080610d725760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201527f647565207061796d656e740000000000000000000000000000000000000000006064820152608401610ac0565b6001600160a01b038316600090815260096020526040902054610d96908290612cbf565b6001600160a01b038416600090815260096020526040902055600754610dbd908290612cbf565b600755610dca8382611e7d565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b610e1b3382611f96565b610e8d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610ac0565b610c12838383612076565b6000600c5460001415610eab5750600090565b7f000000000000000000000000000000000000000000000000000000000002a300600c54610ed99190612cbf565b905090565b610c1283838360405180602001604052806000815250611816565b600b546001600160a01b03163314610f535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b600d5480610fc95760405162461bcd60e51b815260206004820152602660248201527f47726f75706965733a204d6178206f776e6572206d696e74206c696d6974207260448201527f65616368656400000000000000000000000000000000000000000000000000006064820152608401610ac0565b80821115610fd5578091505b601054610fe384848361225b565b610fed8383612d28565b600d55610ffa8382612cbf565b60105550505050565b600b546001600160a01b0316331461105d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b805161107090600f9060208401906127e3565b5050565b600080600080600080600080600c5461108b610e98565b7f000000000000000000000000000000000000000000000000000000000002a300671b3629361396000066d529ae9e8600007f00000000000000000000000000000000000000000000000000000a012317b0006110e742611b52565b959e949d50929b50909950975095509093504292509050565b6000818152600260205260408120546001600160a01b0316806109a25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610ac0565b600f805461119890612d6b565b80601f01602080910402602001604051908101604052809291908181526020018280546111c490612d6b565b80156112115780601f106111e657610100808354040283529160200191611211565b820191906000526020600020905b8154815290600101906020018083116111f457829003601f168201915b505050505081565b60006001600160a01b0382166112975760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610ac0565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0316331461130d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b611317600061228a565b565b6000600a828154811061132e5761132e612e6a565b6000918252602090912001546001600160a01b031692915050565b600b546001600160a01b031633146113a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b805161107090600e9060208401906127e3565b6060600180546109b790612d6b565b6000610ed942611b52565b6000600c54116114225760405162461bcd60e51b815260206004820152601a60248201527f47726f75706965733a206e6f7420796574206c61756e636865640000000000006044820152606401610ac0565b600a8111156114995760405162461bcd60e51b815260206004820152602560248201527f47726f75706965733a206d696e7420616d6f756e742065786365656473206d6160448201527f78696d756d0000000000000000000000000000000000000000000000000000006064820152608401610ac0565b601054600d54612710906114ad8484612cbf565b6114b79190612cbf565b111561152a5760405162461bcd60e51b8152602060048201526024808201527f47726f75706965733a204e6f7420656e6f756768206d696e74732072656d616960448201527f6e696e67000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b600061153542611b52565b905060006115438285612ceb565b90506000341180156115555750803410155b6115a15760405162461bcd60e51b815260206004820152601f60248201527f47726f75706965733a204e6f7420656e6f7567682076616c75652073656e74006044820152606401610ac0565b803411156116cd5760006115b58234612d28565b604051909150600090339083908381818185875af1925050503d80600081146115fa576040519150601f19603f3d011682016040523d82523d6000602084013e6115ff565b606091505b50509050806116765760405162461bcd60e51b815260206004820152602260248201527f47726f75706965733a204368616e67652073656e6420756e737563636573736660448201527f756c0000000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b60408051858152602081018890529081018490523460608201526080810183905233907f44d8b4fd383eeab25a87ec80ee90bb01654f94506272fd1ea6fe85a0464107e09060a00160405180910390a2505061171e565b60408051838152602081018690529081018290523460608201526000608082015233907f44d8b4fd383eeab25a87ec80ee90bb01654f94506272fd1ea6fe85a0464107e09060a00160405180910390a25b61172933858561225b565b610ffa8484612cbf565b6001600160a01b03821633141561178c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ac0565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6118203383611f96565b6118925760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610ac0565b61189e848484846122f4565b50505050565b600b546001600160a01b031633146118fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b600c541561194e5760405162461bcd60e51b815260206004820152601960248201527f47726f75706965733a20416c72656164792073746172746564000000000000006044820152606401610ac0565b42600c55565b6000818152600260205260409020546060906001600160a01b03166119e15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610ac0565b60006119eb61237d565b90506000815111611a0b5760405180602001604052806000815250611a36565b80611a158461238c565b604051602001611a26929190612c41565b6040516020818303038152906040525b9392505050565b600b546001600160a01b03163314611a975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b828114611ae65760405162461bcd60e51b815260206004820152601f60248201527f47726f75706965733a206261746368206c656e677468206d69736d61746368006044820152606401610ac0565b60005b83811015611b4b57611b39858583818110611b0657611b06612e6a565b9050602002016020810190611b1b919061295c565b848484818110611b2d57611b2d612e6a565b90506020020135610ef9565b80611b4381612dbf565b915050611ae9565b5050505050565b600c54600090801580611b655750808311155b15611b7a5750671b3629361396000092915050565b611ba47f000000000000000000000000000000000000000000000000000000000002a30082612cbf565b8310611bb9575066d529ae9e86000092915050565b611bc38184612d28565b611bed907f00000000000000000000000000000000000000000000000000000a012317b000612ceb565b611a3690671b36293613960000612d28565b6060600e80546109b790612d6b565b6040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000917f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c191848116919083169063c45527919060240160206040518083038186803b158015611c9257600080fd5b505afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cca9190612979565b6001600160a01b03161415611ce35760019150506109a2565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b600b546001600160a01b03163314611d6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac0565b6001600160a01b038116611deb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ac0565b611df48161228a565b50565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611e4482611100565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015611ecd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ac0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f1a576040519150601f19603f3d011682016040523d82523d6000602084013e611f1f565b606091505b5050905080610c125760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ac0565b6000818152600260205260408120546001600160a01b03166120205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610ac0565b600061202b83611100565b9050806001600160a01b0316846001600160a01b031614806120665750836001600160a01b031661205b84610a3a565b6001600160a01b0316145b80611d0d5750611d0d8185611c0e565b826001600160a01b031661208982611100565b6001600160a01b0316146121055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610ac0565b6001600160a01b0382166121805760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ac0565b61218b600082611df7565b6001600160a01b03831660009081526003602052604081208054600192906121b4908490612d28565b90915550506001600160a01b03821660009081526003602052604081208054600192906121e2908490612cbf565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60015b82811161189e57612278846122738385612cbf565b6124be565b8061228281612dbf565b91505061225e565b600b80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6122ff848484612076565b61230b84848484612618565b61189e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ac0565b6060600f80546109b790612d6b565b6060816123cc57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156123f657806123e081612dbf565b91506123ef9050600a83612cd7565b91506123d0565b60008167ffffffffffffffff81111561241157612411612e99565b6040519080825280601f01601f19166020018201604052801561243b576020820181803683370190505b5090505b8415611d0d57612450600183612d28565b915061245d600a86612df8565b612468906030612cbf565b60f81b81838151811061247d5761247d612e6a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124b7600a86612cd7565b945061243f565b6001600160a01b0382166125145760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ac0565b6000818152600260205260409020546001600160a01b0316156125795760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ac0565b6001600160a01b03821660009081526003602052604081208054600192906125a2908490612cbf565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156127d8576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612675903390899088908890600401612c70565b602060405180830381600087803b15801561268f57600080fd5b505af19250505080156126dd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126da91810190612b78565b60015b61278d573d80801561270b576040519150601f19603f3d011682016040523d82523d6000602084013e612710565b606091505b5080516127855760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ac0565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d0d565b506001949350505050565b8280546127ef90612d6b565b90600052602060002090601f0160209004810192826128115760008555612857565b82601f1061282a57805160ff1916838001178555612857565b82800160010185558215612857579182015b8281111561285757825182559160200191906001019061283c565b50612863929150612867565b5090565b5b808211156128635760008155600101612868565b600067ffffffffffffffff8084111561289757612897612e99565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156128dd576128dd612e99565b816040528093508581528686860111156128f657600080fd5b858560208301376000602087830101525050509392505050565b60008083601f84011261292257600080fd5b50813567ffffffffffffffff81111561293a57600080fd5b6020830191508360208260051b850101111561295557600080fd5b9250929050565b60006020828403121561296e57600080fd5b8135611a3681612ec8565b60006020828403121561298b57600080fd5b8151611a3681612ec8565b600080604083850312156129a957600080fd5b82356129b481612ec8565b915060208301356129c481612ec8565b809150509250929050565b6000806000606084860312156129e457600080fd5b83356129ef81612ec8565b925060208401356129ff81612ec8565b929592945050506040919091013590565b60008060008060808587031215612a2657600080fd5b8435612a3181612ec8565b93506020850135612a4181612ec8565b925060408501359150606085013567ffffffffffffffff811115612a6457600080fd5b8501601f81018713612a7557600080fd5b612a848782356020840161287c565b91505092959194509250565b60008060408385031215612aa357600080fd5b8235612aae81612ec8565b9150602083013580151581146129c457600080fd5b60008060408385031215612ad657600080fd5b8235612ae181612ec8565b946020939093013593505050565b60008060008060408587031215612b0557600080fd5b843567ffffffffffffffff80821115612b1d57600080fd5b612b2988838901612910565b90965094506020870135915080821115612b4257600080fd5b50612b4f87828801612910565b95989497509550505050565b600060208284031215612b6d57600080fd5b8135611a3681612edd565b600060208284031215612b8a57600080fd5b8151611a3681612edd565b600060208284031215612ba757600080fd5b813567ffffffffffffffff811115612bbe57600080fd5b8201601f81018413612bcf57600080fd5b611d0d8482356020840161287c565b600060208284031215612bf057600080fd5b5035919050565b60008151808452612c0f816020860160208601612d3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008351612c53818460208801612d3f565b835190830190612c67818360208801612d3f565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612ca26080830184612bf7565b9695505050505050565b602081526000611a366020830184612bf7565b60008219821115612cd257612cd2612e0c565b500190565b600082612ce657612ce6612e3b565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d2357612d23612e0c565b500290565b600082821015612d3a57612d3a612e0c565b500390565b60005b83811015612d5a578181015183820152602001612d42565b8381111561189e5750506000910152565b600181811c90821680612d7f57607f821691505b60208210811415612db9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612df157612df1612e0c565b5060010190565b600082612e0757612e07612e3b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b0381168114611df457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611df457600080fdfea2646970667358221220ecc474e7d4e621268e8f318915149705b84dc02961447c22a73a57c96195d30864736f6c63430008060033

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

0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a4d0add0058d26916b6e449f9375e9af8f6c1eb4000000000000000000000000c572b6b3bdf1f4dd143bca832ad4385634fd3dd50000000000000000000000008273e41cb61efdb5bf690c8e082eb3f8212cae2800000000000000000000000085cd14af3c106d2eaf282482e8aca2c53eb966c700000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000005

-----Decoded View---------------
Arg [0] : durationInHours (uint256): 48
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [2] : addresses (address[]): 0xA4D0aDD0058d26916b6e449F9375E9Af8f6C1Eb4,0xC572B6b3bDF1f4Dd143BcA832AD4385634fD3Dd5,0x8273E41cB61efDb5Bf690c8E082Eb3F8212Cae28,0x85cD14aF3C106D2eAf282482e8aCA2c53eB966C7
Arg [3] : amounts (uint256[]): 70,14,11,5

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000030
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 000000000000000000000000a4d0add0058d26916b6e449f9375e9af8f6c1eb4
Arg [6] : 000000000000000000000000c572b6b3bdf1f4dd143bca832ad4385634fd3dd5
Arg [7] : 0000000000000000000000008273e41cb61efdb5bf690c8e082eb3f8212cae28
Arg [8] : 00000000000000000000000085cd14af3c106d2eaf282482e8aca2c53eb966c7
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [12] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005


Deployed Bytecode Sourcemap

186:5495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5665:8;;;186:5495;;;;31666:300:1;;;;;;;;;;-1:-1:-1;31666:300:1;;;;;:::i;:::-;;:::i;:::-;;;8393:14:2;;8386:22;8368:41;;8356:2;8341:18;31666:300:1;;;;;;;;32584:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34095:217::-;;;;;;;;;;-1:-1:-1;34095:217:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7335:55:2;;;7317:74;;7305:2;7290:18;34095:217:1;7272:125:2;33633:401:1;;;;;;;;;;-1:-1:-1;33633:401:1;;;;;:::i;:::-;;:::i;:::-;;845:27:0;;;;;;;;;;;;;;;;;;;19826:25:2;;;19814:2;19799:18;845:27:0;19781:76:2;19219:600:1;;;;;;;;;;-1:-1:-1;19219:600:1;;;;;:::i;:::-;;:::i;370:30:0:-;;;;;;;;;;;;;;;34959:330:1;;;;;;;;;;-1:-1:-1;34959:330:1;;;;;:::i;:::-;;:::i;807:33:0:-;;;;;;;;;;;;839:1;807:33;;5093:117;;;;;;;;;;;;;:::i;448:40::-;;;;;;;;;;;;482:6;448:40;;244:47;;;;;;;;;;;;279:12;244:47;;18180:89:1;;;;;;;;;;-1:-1:-1;18250:12:1;;18180:89;;35355:179;;;;;;;;;;-1:-1:-1;35355:179:1;;;;;:::i;:::-;;:::i;2037:538:0:-;;;;;;;;;;-1:-1:-1;2037:538:0;;;;;:::i;:::-;;:::i;4196:96::-;;;;;;;;;;-1:-1:-1;4196:96:0;;;;;:::i;:::-;;:::i;5214:320::-;;;;;;;;;;;;;:::i;:::-;;;;21149:25:2;;;21205:2;21190:18;;21183:34;;;;21233:18;;;21226:34;;;;21291:2;21276:18;;21269:34;;;;21334:3;21319:19;;21312:35;21378:3;21363:19;;21356:35;21422:3;21407:19;;21400:35;21466:3;21451:19;;21444:35;21136:3;21121:19;5214:320:0;21103:382:2;539:37:0;;;;;;;;;;;;;;;;32287:235:1;;;;;;;;;;-1:-1:-1;32287:235:1;;;;;:::i;:::-;;:::i;698:54:0:-;;;;;;;;;;;;;:::i;32025:205:1:-;;;;;;;;;;-1:-1:-1;32025:205:1;;;;;:::i;:::-;;:::i;45003:92::-;;;;;;;;;;;;;:::i;344:21:0:-;;;;;;;;;;;;;;;;18927:98:1;;;;;;;;;;-1:-1:-1;18927:98:1;;;;;:::i;:::-;;:::i;44371:85::-;;;;;;;;;;-1:-1:-1;44443:6:1;;-1:-1:-1;;;;;44443:6:1;44371:85;;4391:113:0;;;;;;;;;;-1:-1:-1;4391:113:0;;;;;:::i;:::-;;:::i;32746:102:1:-;;;;;;;;;;;;;:::i;18734:107::-;;;;;;;;;;-1:-1:-1;18734:107:1;;;;;:::i;:::-;-1:-1:-1;;;;;18816:18:1;18790:7;18816:18;;;:9;:18;;;;;;;18734:107;4602:96:0;;;;;;;;;;;;;:::i;2924:1116::-;;;;;;:::i;:::-;;:::i;34379:290:1:-;;;;;;;;;;-1:-1:-1;34379:290:1;;;;;:::i;:::-;;:::i;35600:320::-;;;;;;;;;;-1:-1:-1;35600:320:1;;;;;:::i;:::-;;:::i;1862:130:0:-;;;;;;;;;;;;;:::i;32914:329:1:-;;;;;;;;;;-1:-1:-1;32914:329:1;;;;;:::i;:::-;;:::i;2613:280:0:-;;;;;;;;;;-1:-1:-1;2613:280:0;;;;;:::i;:::-;;:::i;757:45::-;;;;;;;;;;;;;;;18537:103:1;;;;;;;;;;-1:-1:-1;18537:103:1;;;;;:::i;:::-;-1:-1:-1;;;;;18617:16:1;18591:7;18617:16;;;:7;:16;;;;;;;18537:103;296:43:0;;;;;;;;;;;;329:10;296:43;;405:38;;;;;;;;;;;;;;;18358:93:1;;;;;;;;;;-1:-1:-1;18430:14:1;;18358:93;;4702:387:0;;;;;;;;;;-1:-1:-1;4702:387:0;;;;;:::i;:::-;;:::i;4508:90::-;;;;;;;;;;;;;:::i;1476:382::-;;;;;;;;;;-1:-1:-1;1476:382:0;;;;;:::i;:::-;;:::i;45244:189:1:-;;;;;;;;;;-1:-1:-1;45244:189:1;;;;;:::i;:::-;;:::i;493:41:0:-;;;;;;;;;;;;532:2;493:41;;31666:300:1;31768:4;31803:40;;;31818:25;31803:40;;:104;;-1:-1:-1;31859:48:1;;;31874:33;31859:48;31803:104;:156;;;-1:-1:-1;30369:25:1;30354:40;;;;31923:36;31784:175;31666:300;-1:-1:-1;;31666:300:1:o;32584:98::-;32638:13;32670:5;32663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32584:98;:::o;34095:217::-;34171:7;37480:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37480:16:1;34190:73;;;;-1:-1:-1;;;34190:73:1;;15937:2:2;34190:73:1;;;15919:21:2;15976:2;15956:18;;;15949:30;16015:34;15995:18;;;15988:62;16086:14;16066:18;;;16059:42;16118:19;;34190:73:1;;;;;;;;;-1:-1:-1;34281:24:1;;;;:15;:24;;;;;;-1:-1:-1;;;;;34281:24:1;;34095:217::o;33633:401::-;33713:13;33729:23;33744:7;33729:14;:23::i;:::-;33713:39;;33776:5;-1:-1:-1;;;;;33770:11:1;:2;-1:-1:-1;;;;;33770:11:1;;;33762:57;;;;-1:-1:-1;;;33762:57:1;;17944:2:2;33762:57:1;;;17926:21:2;17983:2;17963:18;;;17956:30;18022:34;18002:18;;;17995:62;18093:3;18073:18;;;18066:31;18114:19;;33762:57:1;17916:223:2;33762:57:1;8645:10;-1:-1:-1;;;;;33851:21:1;;;;:62;;-1:-1:-1;33876:37:1;33893:5;8645:10;1476:382:0;:::i;33876:37:1:-;33830:165;;;;-1:-1:-1;;;33830:165:1;;13924:2:2;33830:165:1;;;13906:21:2;13963:2;13943:18;;;13936:30;14002:34;13982:18;;;13975:62;14073:26;14053:18;;;14046:54;14117:19;;33830:165:1;13896:246:2;33830:165:1;34006:21;34015:2;34019:7;34006:8;:21::i;:::-;33703:331;33633:401;;:::o;19219:600::-;-1:-1:-1;;;;;19294:16:1;;19313:1;19294:16;;;:7;:16;;;;;;19286:71;;;;-1:-1:-1;;;19286:71:1;;11148:2:2;19286:71:1;;;11130:21:2;11187:2;11167:18;;;11160:30;11226:34;11206:18;;;11199:62;11297:8;11277:18;;;11270:36;11323:19;;19286:71:1;11120:228:2;19286:71:1;19368:21;19416:14;;19392:21;:38;;;;:::i;:::-;-1:-1:-1;;;;;19510:18:1;;19440:15;19510:18;;;:9;:18;;;;;;;;;19495:12;;19475:7;:16;;;;;;;19368:62;;-1:-1:-1;19440:15:1;;19459:32;;19368:62;19459:32;:::i;:::-;19458:49;;;;:::i;:::-;:70;;;;:::i;:::-;19440:88;-1:-1:-1;19547:12:1;19539:68;;;;-1:-1:-1;;;19539:68:1;;13512:2:2;19539:68:1;;;13494:21:2;13551:2;13531:18;;;13524:30;13590:34;13570:18;;;13563:62;13661:13;13641:18;;;13634:41;13692:19;;19539:68:1;13484:233:2;19539:68:1;-1:-1:-1;;;;;19639:18:1;;;;;;:9;:18;;;;;;:28;;19660:7;;19639:28;:::i;:::-;-1:-1:-1;;;;;19618:18:1;;;;;;:9;:18;;;;;:49;19694:14;;:24;;19711:7;;19694:24;:::i;:::-;19677:14;:41;19729:35;19747:7;19756;19729:17;:35::i;:::-;19779:33;;;-1:-1:-1;;;;;7602:55:2;;7584:74;;7689:2;7674:18;;7667:34;;;19779:33:1;;7557:18:2;19779:33:1;;;;;;;19276:543;;19219:600;:::o;34959:330::-;35148:41;8645:10;35181:7;35148:18;:41::i;:::-;35140:103;;;;-1:-1:-1;;;35140:103:1;;18346:2:2;35140:103:1;;;18328:21:2;18385:2;18365:18;;;18358:30;18424:34;18404:18;;;18397:62;18495:19;18475:18;;;18468:47;18532:19;;35140:103:1;18318:239:2;35140:103:1;35254:28;35264:4;35270:2;35274:7;35254:9;:28::i;5093:117:0:-;5133:4;5148:9;;5161:1;5148:14;5144:28;;;-1:-1:-1;5171:1:0;;5093:117::o;5144:28::-;5197:8;5185:9;;:20;;;;:::i;:::-;5178:27;;5093:117;:::o;35355:179:1:-;35488:39;35505:4;35511:2;35515:7;35488:39;;;;;;;;;;;;:16;:39::i;2037:538:0:-;44443:6:1;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;2127:19:0::1;::::0;2241:18;2233:69:::1;;;::::0;-1:-1:-1;;;2233:69:0;;16350:2:2;2233:69:0::1;::::0;::::1;16332:21:2::0;16389:2;16369:18;;;16362:30;16428:34;16408:18;;;16401:62;16499:8;16479:18;;;16472:36;16525:19;;2233:69:0::1;16322:228:2::0;2233:69:0::1;2322:14;2313:6;:23;2309:66;;;2354:14;2345:23;;2309:66;2407:11;::::0;2425:45:::1;2439:2:::0;2443:6;2407:11;2425:13:::1;:45::i;:::-;2499:23;2516:6:::0;2499:14;:23:::1;:::i;:::-;2477:19;:45:::0;2543:27:::1;2564:6:::0;2543:18;:27:::1;:::i;:::-;2529:11;:41:::0;-1:-1:-1;;;;2037:538:0:o;4196:96::-;44443:6:1;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;4267:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;4196:96:::0;:::o;5214:320::-;5253:15;5270:13;5285:14;5301:16;5319:14;5335:17;5354:18;5374:20;5409:9;;5420;:7;:9::i;:::-;5431:8;279:12;329:10;5465:16;5483:28;5495:15;5483:11;:28::i;:::-;5401:128;;;;-1:-1:-1;5401:128:0;;-1:-1:-1;5401:128:0;;-1:-1:-1;5401:128:0;-1:-1:-1;5401:128:0;-1:-1:-1;5401:128:0;;-1:-1:-1;5513:15:0;;-1:-1:-1;5214:320:0;-1:-1:-1;5214:320:0:o;32287:235:1:-;32359:7;32394:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32394:16:1;32428:19;32420:73;;;;-1:-1:-1;;;32420:73:1;;14760:2:2;32420:73:1;;;14742:21:2;14799:2;14779:18;;;14772:30;14838:34;14818:18;;;14811:62;14909:11;14889:18;;;14882:39;14938:19;;32420:73:1;14732:231:2;698:54:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32025:205:1:-;32097:7;-1:-1:-1;;;;;32124:19:1;;32116:74;;;;-1:-1:-1;;;32116:74:1;;14349:2:2;32116:74:1;;;14331:21:2;14388:2;14368:18;;;14361:30;14427:34;14407:18;;;14400:62;14498:12;14478:18;;;14471:40;14528:19;;32116:74:1;14321:232:2;32116:74:1;-1:-1:-1;;;;;;32207:16:1;;;;;:9;:16;;;;;;;32025:205::o;45003:92::-;44443:6;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;45067:21:::1;45085:1;45067:9;:21::i;:::-;45003:92::o:0;18927:98::-;18978:7;19004;19012:5;19004:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19004:14:1;;18927:98;-1:-1:-1;;18927:98:1:o;4391:113:0:-;44443:6:1;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;4470:29:0;;::::1;::::0;:12:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;32746:102:1:-:0;32802:13;32834:7;32827:14;;;;;:::i;4602:96:0:-;4647:4;4665:28;4677:15;4665:11;:28::i;2924:1116::-;2992:1;2980:9;;:13;2972:52;;;;-1:-1:-1;;;2972:52:0;;19527:2:2;2972:52:0;;;19509:21:2;19566:2;19546:18;;;19539:30;19605:28;19585:18;;;19578:56;19651:18;;2972:52:0;19499:176:2;2972:52:0;532:2;3101:6;:25;;3093:75;;;;-1:-1:-1;;;3093:75:0;;15531:2:2;3093:75:0;;;15513:21:2;15570:2;15550:18;;;15543:30;15609:34;15589:18;;;15582:62;15680:7;15660:18;;;15653:35;15705:19;;3093:75:0;15503:227:2;3093:75:0;3201:11;;3298:19;;482:6;;3272:25;3291:6;3201:11;3272:25;:::i;:::-;:45;;;;:::i;:::-;:59;;3264:108;;;;-1:-1:-1;;;3264:108:0;;10743:2:2;3264:108:0;;;10725:21:2;10782:2;10762:18;;;10755:30;10821:34;10801:18;;;10794:62;10892:6;10872:18;;;10865:34;10916:19;;3264:108:0;10715:226:2;3264:108:0;3379:10;3392:28;3404:15;3392:11;:28::i;:::-;3379:41;-1:-1:-1;3427:9:0;3439:14;3379:41;3439:6;:14;:::i;:::-;3427:26;;3530:1;3518:9;:13;:34;;;;;3548:4;3535:9;:17;;3518:34;3510:78;;;;-1:-1:-1;;;3510:78:0;;19167:2:2;3510:78:0;;;19149:21:2;19206:2;19186:18;;;19179:30;19245:33;19225:18;;;19218:61;19296:18;;3510:78:0;19139:181:2;3510:78:0;3611:4;3599:9;:16;3595:333;;;3624:11;3638:16;3650:4;3638:9;:16;:::i;:::-;3681:34;;3624:30;;-1:-1:-1;3663:12:0;;3681:10;;3624:30;;3663:12;3681:34;3663:12;3681:34;3624:30;3681:10;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3662:53;;;3731:7;3723:54;;;;-1:-1:-1;;;3723:54:0;;18764:2:2;3723:54:0;;;18746:21:2;18803:2;18783:18;;;18776:30;18842:34;18822:18;;;18815:62;18913:4;18893:18;;;18886:32;18935:19;;3723:54:0;18736:224:2;3723:54:0;3790:55;;;20129:25:2;;;20185:2;20170:18;;20163:34;;;20213:18;;;20206:34;;;3827:9:0;20271:2:2;20256:18;;20249:34;20314:3;20299:19;;20292:35;;;3794:10:0;;3790:55;;20116:3:2;20101:19;3790:55:0;;;;;;;3616:236;;3595:333;;;3871:50;;;20129:25:2;;;20185:2;20170:18;;20163:34;;;20213:18;;;20206:34;;;3908:9:0;20271:2:2;20256:18;;20249:34;3919:1:0;20314:3:2;20299:19;;20292:35;3875:10:0;;3871:50;;20116:3:2;20101:19;3871:50:0;;;;;;;3595:333;3934:53;3948:10;3960:6;3968:18;3934:13;:53::i;:::-;4008:27;4029:6;4008:18;:27;:::i;34379:290:1:-;-1:-1:-1;;;;;34481:24:1;;8645:10;34481:24;;34473:62;;;;-1:-1:-1;;;34473:62:1;;11960:2:2;34473:62:1;;;11942:21:2;11999:2;11979:18;;;11972:30;12038:27;12018:18;;;12011:55;12083:18;;34473:62:1;11932:175:2;34473:62:1;8645:10;34546:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;34546:42:1;;;;;;;;;;;;:53;;;;;;;;;;;;;34614:48;;8368:41:2;;;34546:42:1;;8645:10;34614:48;;8341:18:2;34614:48:1;;;;;;;34379:290;;:::o;35600:320::-;35769:41;8645:10;35802:7;35769:18;:41::i;:::-;35761:103;;;;-1:-1:-1;;;35761:103:1;;18346:2:2;35761:103:1;;;18328:21:2;18385:2;18365:18;;;18358:30;18424:34;18404:18;;;18397:62;18495:19;18475:18;;;18468:47;18532:19;;35761:103:1;18318:239:2;35761:103:1;35874:39;35888:4;35894:2;35898:7;35907:5;35874:13;:39::i;:::-;35600:320;;;;:::o;1862:130:0:-;44443:6:1;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;1910:9:0::1;::::0;:14;1902:52:::1;;;::::0;-1:-1:-1;;;1902:52:0;;8846:2:2;1902:52:0::1;::::0;::::1;8828:21:2::0;8885:2;8865:18;;;8858:30;8924:27;8904:18;;;8897:55;8969:18;;1902:52:0::1;8818:175:2::0;1902:52:0::1;1972:15;1960:9;:27:::0;1862:130::o;32914:329:1:-;37457:4;37480:16;;;:7;:16;;;;;;32987:13;;-1:-1:-1;;;;;37480:16:1;33012:76;;;;-1:-1:-1;;;33012:76:1;;17528:2:2;33012:76:1;;;17510:21:2;17567:2;17547:18;;;17540:30;17606:34;17586:18;;;17579:62;17677:17;17657:18;;;17650:45;17712:19;;33012:76:1;17500:237:2;33012:76:1;33099:21;33123:10;:8;:10::i;:::-;33099:34;;33174:1;33156:7;33150:21;:25;:86;;;;;;;;;;;;;;;;;33202:7;33211:18;:7;:16;:18::i;:::-;33185:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33150:86;33143:93;32914:329;-1:-1:-1;;;32914:329:1:o;2613:280:0:-;44443:6:1;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;2723:34:0;;::::1;2715:78;;;::::0;-1:-1:-1;;;2715:78:0;;9200:2:2;2715:78:0::1;::::0;::::1;9182:21:2::0;9239:2;9219:18;;;9212:30;9278:33;9258:18;;;9251:61;9329:18;;2715:78:0::1;9172:181:2::0;2715:78:0::1;2805:6;2800:89;2815:18:::0;;::::1;2800:89;;;2847:35;2857:9;;2867:1;2857:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2871:7;;2879:1;2871:10;;;;;;;:::i;:::-;;;;;;;2847:9;:35::i;:::-;2835:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2800:89;;;;2613:280:::0;;;;:::o;4702:387::-;4784:9;;4755:4;;4804:15;;;:37;;;4831:10;4823:4;:18;;4804:37;4800:61;;;-1:-1:-1;279:12:0;;4702:387;-1:-1:-1;;4702:387:0:o;4800:61::-;4880:21;4893:8;4880:10;:21;:::i;:::-;4872:4;:29;4868:51;;-1:-1:-1;329:10:0;;4702:387;-1:-1:-1;;4702:387:0:o;4868:51::-;5065:17;5072:10;5065:4;:17;:::i;:::-;5045:38;;:16;:38;:::i;:::-;5030:54;;279:12;5030:54;:::i;4508:90::-;4554:13;4581:12;4574:19;;;;;:::i;1476:382::-;1726:28;;;;;-1:-1:-1;;;;;7335:55:2;;;1726:28:0;;;7317:74:2;1573:4:0;;1632:20;;1726:40;;;;:21;;;;;;7290:18:2;;1726:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1726:40:0;;1722:78;;;1787:4;1780:11;;;;;1722:78;-1:-1:-1;;;;;34855:25:1;;;34832:4;34855:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;1814:39:0;1807:46;1476:382;-1:-1:-1;;;;1476:382:0:o;45244:189:1:-;44443:6;;-1:-1:-1;;;;;44443:6:1;8645:10;44583:23;44575:68;;;;-1:-1:-1;;;44575:68:1;;16757:2:2;44575:68:1;;;16739:21:2;;;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;16887:18;;44575:68:1;16729:182:2;44575:68:1;-1:-1:-1;;;;;45332:22:1;::::1;45324:73;;;::::0;-1:-1:-1;;;45324:73:1;;9979:2:2;45324:73:1::1;::::0;::::1;9961:21:2::0;10018:2;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;10128:8;10108:18;;;10101:36;10154:19;;45324:73:1::1;9951:228:2::0;45324:73:1::1;45407:19;45417:8;45407:9;:19::i;:::-;45244:189:::0;:::o;41243:171::-;41317:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;41317:29:1;;;;;;;;:24;;41370:23;41317:24;41370:14;:23::i;:::-;-1:-1:-1;;;;;41361:46:1;;;;;;;;;;;41243:171;;:::o;2132:312::-;2246:6;2221:21;:31;;2213:73;;;;-1:-1:-1;;;2213:73:1;;12741:2:2;2213:73:1;;;12723:21:2;12780:2;12760:18;;;12753:30;12819:31;12799:18;;;12792:59;12868:18;;2213:73:1;12713:179:2;2213:73:1;2298:12;2316:9;-1:-1:-1;;;;;2316:14:1;2338:6;2316:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2297:52;;;2367:7;2359:78;;;;-1:-1:-1;;;2359:78:1;;12314:2:2;2359:78:1;;;12296:21:2;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;12463:28;12443:18;;;12436:56;12509:19;;2359:78:1;12286:248:2;37675:344:1;37768:4;37480:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37480:16:1;37784:73;;;;-1:-1:-1;;;37784:73:1;;13099:2:2;37784:73:1;;;13081:21:2;13138:2;13118:18;;;13111:30;13177:34;13157:18;;;13150:62;13248:14;13228:18;;;13221:42;13280:19;;37784:73:1;13071:234:2;37784:73:1;37867:13;37883:23;37898:7;37883:14;:23::i;:::-;37867:39;;37935:5;-1:-1:-1;;;;;37924:16:1;:7;-1:-1:-1;;;;;37924:16:1;;:51;;;;37968:7;-1:-1:-1;;;;;37944:31:1;:20;37956:7;37944:11;:20::i;:::-;-1:-1:-1;;;;;37944:31:1;;37924:51;:87;;;;37979:32;37996:5;38003:7;37979:16;:32::i;40572:560::-;40726:4;-1:-1:-1;;;;;40699:31:1;:23;40714:7;40699:14;:23::i;:::-;-1:-1:-1;;;;;40699:31:1;;40691:85;;;;-1:-1:-1;;;40691:85:1;;17118:2:2;40691:85:1;;;17100:21:2;17157:2;17137:18;;;17130:30;17196:34;17176:18;;;17169:62;17267:11;17247:18;;;17240:39;17296:19;;40691:85:1;17090:231:2;40691:85:1;-1:-1:-1;;;;;40794:16:1;;40786:65;;;;-1:-1:-1;;;40786:65:1;;11555:2:2;40786:65:1;;;11537:21:2;11594:2;11574:18;;;11567:30;11633:34;11613:18;;;11606:62;11704:6;11684:18;;;11677:34;11728:19;;40786:65:1;11527:226:2;40786:65:1;40963:29;40980:1;40984:7;40963:8;:29::i;:::-;-1:-1:-1;;;;;41003:15:1;;;;;;:9;:15;;;;;:20;;41022:1;;41003:15;:20;;41022:1;;41003:20;:::i;:::-;;;;-1:-1:-1;;;;;;;41033:13:1;;;;;;:9;:13;;;;;:18;;41050:1;;41033:13;:18;;41050:1;;41033:18;:::i;:::-;;;;-1:-1:-1;;41061:16:1;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;41061:21:1;;;;;;;;;41098:27;;41061:16;;41098:27;;;;;;;40572:560;;;:::o;4044:148:0:-;4135:1;4121:67;4141:6;4138:1;:9;4121:67;;4161:20;4167:2;4171:9;4179:1;4171:7;:9;:::i;:::-;4161:5;:20::i;:::-;4149:3;;;;:::i;:::-;;;;4121:67;;45439:169:1;45513:6;;;-1:-1:-1;;;;;45529:17:1;;;;;;;;;;;45561:40;;45513:6;;;45529:17;45513:6;;45561:40;;45494:16;;45561:40;45484:124;45439:169;:::o;36782:307::-;36933:28;36943:4;36949:2;36953:7;36933:9;:28::i;:::-;36979:48;37002:4;37008:2;37012:7;37021:5;36979:22;:48::i;:::-;36971:111;;;;-1:-1:-1;;;36971:111:1;;9560:2:2;36971:111:1;;;9542:21:2;9599:2;9579:18;;;9572:30;9638:34;9618:18;;;9611:62;9709:20;9689:18;;;9682:48;9747:19;;36971:111:1;9532:240:2;4296:91:0;4348:13;4375:7;4368:14;;;;;:::i;27788:703:1:-;27844:13;28061:10;28057:51;;-1:-1:-1;;28087:10:1;;;;;;;;;;;;;;;;;;27788:703::o;28057:51::-;28132:5;28117:12;28171:75;28178:9;;28171:75;;28203:8;;;;:::i;:::-;;-1:-1:-1;28225:10:1;;-1:-1:-1;28233:2:1;28225:10;;:::i;:::-;;;28171:75;;;28255:19;28287:6;28277:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28277:17:1;;28255:39;;28304:150;28311:10;;28304:150;;28337:11;28347:1;28337:11;;:::i;:::-;;-1:-1:-1;28405:10:1;28413:2;28405:5;:10;:::i;:::-;28392:24;;:2;:24;:::i;:::-;28379:39;;28362:6;28369;28362:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;28432:11:1;28441:2;28432:11;;:::i;:::-;;;28304:150;;39311:372;-1:-1:-1;;;;;39390:16:1;;39382:61;;;;-1:-1:-1;;;39382:61:1;;15170:2:2;39382:61:1;;;15152:21:2;;;15189:18;;;15182:30;15248:34;15228:18;;;15221:62;15300:18;;39382:61:1;15142:182:2;39382:61:1;37457:4;37480:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37480:16:1;:30;39453:58;;;;-1:-1:-1;;;39453:58:1;;10386:2:2;39453:58:1;;;10368:21:2;10425:2;10405:18;;;10398:30;10464;10444:18;;;10437:58;10512:18;;39453:58:1;10358:178:2;39453:58:1;-1:-1:-1;;;;;39578:13:1;;;;;;:9;:13;;;;;:18;;39595:1;;39578:13;:18;;39595:1;;39578:18;:::i;:::-;;;;-1:-1:-1;;39606:16:1;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;39606:21:1;;;;;;;;39643:33;;39606:16;;;39643:33;;39606:16;;39643:33;39311:372;;:::o;41967:778::-;42117:4;-1:-1:-1;;;;;42137:13:1;;1154:20;1200:8;42133:606;;42172:72;;;;;-1:-1:-1;;;;;42172:36:1;;;;;:72;;8645:10;;42223:4;;42229:7;;42238:5;;42172:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42172:72:1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42168:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42411:13:1;;42407:266;;42453:60;;-1:-1:-1;;;42453:60:1;;9560:2:2;42453:60:1;;;9542:21:2;9599:2;9579:18;;;9572:30;9638:34;9618:18;;;9611:62;9709:20;9689:18;;;9682:48;9747:19;;42453:60:1;9532:240:2;42407:266:1;42625:6;42619:13;42610:6;42606:2;42602:15;42595:38;42168:519;42294:51;;42304:41;42294:51;;-1:-1:-1;42287:58:1;;42133:606;-1:-1:-1;42724:4:1;41967:778;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:690:2;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:2;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:2;;;591:1;588;581:12;550:2;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;88:616;;;;;:::o;709:367::-;772:8;782:6;836:3;829:4;821:6;817:17;813:27;803:2;;854:1;851;844:12;803:2;-1:-1:-1;877:20:2;;920:18;909:30;;906:2;;;952:1;949;942:12;906:2;989:4;981:6;977:17;965:29;;1049:3;1042:4;1032:6;1029:1;1025:14;1017:6;1013:27;1009:38;1006:47;1003:2;;;1066:1;1063;1056:12;1003:2;793:283;;;;;:::o;1081:247::-;1140:6;1193:2;1181:9;1172:7;1168:23;1164:32;1161:2;;;1209:1;1206;1199:12;1161:2;1248:9;1235:23;1267:31;1292:5;1267:31;:::i;1333:251::-;1403:6;1456:2;1444:9;1435:7;1431:23;1427:32;1424:2;;;1472:1;1469;1462:12;1424:2;1504:9;1498:16;1523:31;1548:5;1523:31;:::i;1849:388::-;1917:6;1925;1978:2;1966:9;1957:7;1953:23;1949:32;1946:2;;;1994:1;1991;1984:12;1946:2;2033:9;2020:23;2052:31;2077:5;2052:31;:::i;:::-;2102:5;-1:-1:-1;2159:2:2;2144:18;;2131:32;2172:33;2131:32;2172:33;:::i;:::-;2224:7;2214:17;;;1936:301;;;;;:::o;2242:456::-;2319:6;2327;2335;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2443:9;2430:23;2462:31;2487:5;2462:31;:::i;:::-;2512:5;-1:-1:-1;2569:2:2;2554:18;;2541:32;2582:33;2541:32;2582:33;:::i;:::-;2346:352;;2634:7;;-1:-1:-1;;;2688:2:2;2673:18;;;;2660:32;;2346:352::o;2703:794::-;2798:6;2806;2814;2822;2875:3;2863:9;2854:7;2850:23;2846:33;2843:2;;;2892:1;2889;2882:12;2843:2;2931:9;2918:23;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:2;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;3122:7;-1:-1:-1;3176:2:2;3161:18;;3148:32;;-1:-1:-1;3231:2:2;3216:18;;3203:32;3258:18;3247:30;;3244:2;;;3290:1;3287;3280:12;3244:2;3313:22;;3366:4;3358:13;;3354:27;-1:-1:-1;3344:2:2;;3395:1;3392;3385:12;3344:2;3418:73;3483:7;3478:2;3465:16;3460:2;3456;3452:11;3418:73;:::i;:::-;3408:83;;;2833:664;;;;;;;:::o;3502:416::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:2;;;3644:1;3641;3634:12;3596:2;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;:::-;3752:5;-1:-1:-1;3809:2:2;3794:18;;3781:32;3851:15;;3844:23;3832:36;;3822:2;;3882:1;3879;3872:12;3923:315;3991:6;3999;4052:2;4040:9;4031:7;4027:23;4023:32;4020:2;;;4068:1;4065;4058:12;4020:2;4107:9;4094:23;4126:31;4151:5;4126:31;:::i;:::-;4176:5;4228:2;4213:18;;;;4200:32;;-1:-1:-1;;;4010:228:2:o;4243:773::-;4365:6;4373;4381;4389;4442:2;4430:9;4421:7;4417:23;4413:32;4410:2;;;4458:1;4455;4448:12;4410:2;4498:9;4485:23;4527:18;4568:2;4560:6;4557:14;4554:2;;;4584:1;4581;4574:12;4554:2;4623:70;4685:7;4676:6;4665:9;4661:22;4623:70;:::i;:::-;4712:8;;-1:-1:-1;4597:96:2;-1:-1:-1;4800:2:2;4785:18;;4772:32;;-1:-1:-1;4816:16:2;;;4813:2;;;4845:1;4842;4835:12;4813:2;;4884:72;4948:7;4937:8;4926:9;4922:24;4884:72;:::i;:::-;4400:616;;;;-1:-1:-1;4975:8:2;-1:-1:-1;;;;4400:616:2:o;5021:245::-;5079:6;5132:2;5120:9;5111:7;5107:23;5103:32;5100:2;;;5148:1;5145;5138:12;5100:2;5187:9;5174:23;5206:30;5230:5;5206:30;:::i;5271:249::-;5340:6;5393:2;5381:9;5372:7;5368:23;5364:32;5361:2;;;5409:1;5406;5399:12;5361:2;5441:9;5435:16;5460:30;5484:5;5460:30;:::i;5525:450::-;5594:6;5647:2;5635:9;5626:7;5622:23;5618:32;5615:2;;;5663:1;5660;5653:12;5615:2;5703:9;5690:23;5736:18;5728:6;5725:30;5722:2;;;5768:1;5765;5758:12;5722:2;5791:22;;5844:4;5836:13;;5832:27;-1:-1:-1;5822:2:2;;5873:1;5870;5863:12;5822:2;5896:73;5961:7;5956:2;5943:16;5938:2;5934;5930:11;5896:73;:::i;5980:180::-;6039:6;6092:2;6080:9;6071:7;6067:23;6063:32;6060:2;;;6108:1;6105;6098:12;6060:2;-1:-1:-1;6131:23:2;;6050:110;-1:-1:-1;6050:110:2:o;6165:316::-;6206:3;6244:5;6238:12;6271:6;6266:3;6259:19;6287:63;6343:6;6336:4;6331:3;6327:14;6320:4;6313:5;6309:16;6287:63;:::i;:::-;6395:2;6383:15;6400:66;6379:88;6370:98;;;;6470:4;6366:109;;6214:267;-1:-1:-1;;6214:267:2:o;6486:470::-;6665:3;6703:6;6697:13;6719:53;6765:6;6760:3;6753:4;6745:6;6741:17;6719:53;:::i;:::-;6835:13;;6794:16;;;;6857:57;6835:13;6794:16;6891:4;6879:17;;6857:57;:::i;:::-;6930:20;;6673:283;-1:-1:-1;;;;6673:283:2:o;7712:511::-;7906:4;-1:-1:-1;;;;;8016:2:2;8008:6;8004:15;7993:9;7986:34;8068:2;8060:6;8056:15;8051:2;8040:9;8036:18;8029:43;;8108:6;8103:2;8092:9;8088:18;8081:34;8151:3;8146:2;8135:9;8131:18;8124:31;8172:45;8212:3;8201:9;8197:19;8189:6;8172:45;:::i;:::-;8164:53;7915:308;-1:-1:-1;;;;;;7915:308:2:o;8420:219::-;8569:2;8558:9;8551:21;8532:4;8589:44;8629:2;8618:9;8614:18;8606:6;8589:44;:::i;21490:128::-;21530:3;21561:1;21557:6;21554:1;21551:13;21548:2;;;21567:18;;:::i;:::-;-1:-1:-1;21603:9:2;;21538:80::o;21623:120::-;21663:1;21689;21679:2;;21694:18;;:::i;:::-;-1:-1:-1;21728:9:2;;21669:74::o;21748:228::-;21788:7;21914:1;21846:66;21842:74;21839:1;21836:81;21831:1;21824:9;21817:17;21813:105;21810:2;;;21921:18;;:::i;:::-;-1:-1:-1;21961:9:2;;21800:176::o;21981:125::-;22021:4;22049:1;22046;22043:8;22040:2;;;22054:18;;:::i;:::-;-1:-1:-1;22091:9:2;;22030:76::o;22111:258::-;22183:1;22193:113;22207:6;22204:1;22201:13;22193:113;;;22283:11;;;22277:18;22264:11;;;22257:39;22229:2;22222:10;22193:113;;;22324:6;22321:1;22318:13;22315:2;;;-1:-1:-1;;22359:1:2;22341:16;;22334:27;22164:205::o;22374:437::-;22453:1;22449:12;;;;22496;;;22517:2;;22571:4;22563:6;22559:17;22549:27;;22517:2;22624;22616:6;22613:14;22593:18;22590:38;22587:2;;;22661:77;22658:1;22651:88;22762:4;22759:1;22752:15;22790:4;22787:1;22780:15;22587:2;;22429:382;;;:::o;22816:195::-;22855:3;22886:66;22879:5;22876:77;22873:2;;;22956:18;;:::i;:::-;-1:-1:-1;23003:1:2;22992:13;;22863:148::o;23016:112::-;23048:1;23074;23064:2;;23079:18;;:::i;:::-;-1:-1:-1;23113:9:2;;23054:74::o;23133:184::-;23185:77;23182:1;23175:88;23282:4;23279:1;23272:15;23306:4;23303:1;23296:15;23322:184;23374:77;23371:1;23364:88;23471:4;23468:1;23461:15;23495:4;23492:1;23485:15;23511:184;23563:77;23560:1;23553:88;23660:4;23657:1;23650:15;23684:4;23681:1;23674:15;23700:184;23752:77;23749:1;23742:88;23849:4;23846:1;23839:15;23873:4;23870:1;23863:15;23889:154;-1:-1:-1;;;;;23968:5:2;23964:54;23957:5;23954:65;23944:2;;24033:1;24030;24023:12;24048:177;24133:66;24126:5;24122:78;24115:5;24112:89;24102:2;;24215:1;24212;24205:12

Swarm Source

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