ERC-721
NFT
Overview
Max Total Supply
10,000 GROUPIE
Holders
2,869
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
8 GROUPIELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Groupies
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Multiple files format)
// 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(); } }
// 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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.