Contract
0x3ece98cbcebd5bd8011a04af348987c2502a6e7d
1
Contract Overview
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x58c55af60d175cef23de2e46c739544e6207199a7e710ec5a4175856061f4500 | 3011528 | 681 days 11 hrs ago | 0x3ece98cbcebd5bd8011a04af348987c2502a6e7d | Contract Creation | 0 FTM | ||
0xf1f9c879655fc84158a664a944993e0f7dd5377caa99128d129d9d31867b4ab7 | 3010987 | 681 days 12 hrs ago | 0x1337136fc465ae8cf57d018ebf0d4d12e0364b55 | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
CoordinapeCircle
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2021-03-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.2; // Part: Coordinape library Coordinape { uint8 public constant EXTERNAL = 0; // 000 uint8 public constant PARTICIPANT = 1; // 001 uint8 public constant RECEIVER = 2; // 010 uint8 public constant GIVER = 4; // 100 } // Part: OpenZeppelin/[email protected]/Address /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // Part: OpenZeppelin/[email protected]/Context /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // Part: OpenZeppelin/[email protected]/Counters /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } // Part: OpenZeppelin/[email protected]/IERC165 /** * @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); } // Part: OpenZeppelin/[email protected]/IERC20 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // Part: OpenZeppelin/[email protected]/IERC721Receiver /** * @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); } // Part: OpenZeppelin/[email protected]/Strings /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // Part: OpenZeppelin/[email protected]/ERC165 /** * @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; } } // Part: OpenZeppelin/[email protected]/ERC20 /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overloaded; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens 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 amount) internal virtual { } } // Part: OpenZeppelin/[email protected]/IERC721 /** * @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; } // Part: OpenZeppelin/[email protected]/Ownable /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // Part: CoordinapeEpoch contract CoordinapeEpoch is ERC20, Ownable { using Counters for Counters.Counter; uint256 private _start; uint256 private _end; Counters.Counter private _participantsIds; mapping(uint256 => address) private _participantsAddresses; mapping(address => uint8) private _participants; mapping(address => uint256) private _unspent; mapping(address => mapping(address => string)) private _notes; uint256 private _amount; constructor(uint256 amount, uint256 end) ERC20("Give", "GIVE") { require(block.number < end, "end block must be in the future."); _amount = amount; _start = block.number; _end = end; } function addParticipant(address recipient, uint8 permissions) public onlyOwner { require( permissions & Coordinape.PARTICIPANT != 0, "permissions must contain at least 'PARTICIPANT'." ); require( _participants[recipient] == Coordinape.EXTERNAL, "recipient is already a participant." ); _participantsAddresses[Counters.current(_participantsIds)] = recipient; _participants[recipient] = permissions; _unspent[recipient] = _amount; _mint(recipient, _amount); Counters.increment(_participantsIds); } function removeParticipant(address recipient) public onlyOwner { require( _participants[recipient] & Coordinape.RECEIVER != 0, "sender is already a non-receiver participant." ); _participants[recipient] = Coordinape.PARTICIPANT; _burn(recipient, balanceOf(recipient)); } function editParticipant(address recipient, uint8 permissions) public onlyOwner { require( permissions != Coordinape.EXTERNAL, "call removeParticipant to remove participant." ); require( permissions & Coordinape.PARTICIPANT != 0, "permissions must contain at least 'PARTICIPANT'." ); _participants[recipient] = permissions; } function addNote(address recipient, string memory note) public onlyParticipant beforeEnd { require(_msgSender() != recipient, "cannot add a note to self."); require( _participants[recipient] & Coordinape.PARTICIPANT != 0, "recipient is not a participant." ); _notes[recipient][_msgSender()] = note; } function stopReceiving() public onlyParticipant { require( _participants[_msgSender()] & Coordinape.RECEIVER != 0, "sender is already a non-receiver participant." ); _participants[_msgSender()] = _participants[_msgSender()] & ~Coordinape.PARTICIPANT; } function leave() public onlyParticipant { stopReceiving(); _burn(_msgSender(), balanceOf(_msgSender())); } function receivedOf(address recipient) public view returns (uint256) { return balanceOf(recipient) - _unspent[recipient]; } function permissionsOf(address recipient) public view returns (uint8) { return _participants[recipient]; } function isParticipant(address recipient) public view returns (bool) { return _participants[recipient] & Coordinape.PARTICIPANT != 0; } function startBlock() public view returns (uint256) { return _start; } function endBlock() public view returns (uint256) { return _end; } function ended() public view returns (bool) { return block.number >= _end; } modifier onlyParticipant() { require( _participants[_msgSender()] & Coordinape.PARTICIPANT != 0, "method can only be called by a registered participant." ); _; } modifier beforeEnd() { require(!ended(), "method can only be called before the end of the epoch."); _; } modifier afterEnd() { require(ended(), "method can only be called after the end of the epoch."); _; } function decimals() public pure override returns (uint8) { return 0; } function _beforeTokenTransfer( address sender, address recipient, uint256 amount ) internal override { if (sender == address(0) || recipient == address(0)) return; require( _participants[sender] & Coordinape.PARTICIPANT != 0 && _participants[sender] & Coordinape.GIVER != 0, "sender must be a giver participant" ); require( _participants[recipient] & Coordinape.PARTICIPANT != 0 && _participants[recipient] & Coordinape.RECEIVER != 0, "recipient must be a receiver participant" ); if (_unspent[sender] >= amount) { _unspent[sender] -= amount; } } } // Part: OpenZeppelin/[email protected]/IERC721Metadata /** * @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); } // Part: OpenZeppelin/[email protected]/ERC721 /** * @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}. 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 || ERC721.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 || ERC721.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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * 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: CoordinapeCircle.sol contract CoordinapeCircle is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _inviteIds; mapping(address => uint256) private _invites; mapping(uint256 => uint8) private _invitePermissions; Counters.Counter private _inviteBurned; Counters.Counter private _epochIds; mapping(uint256 => address) private _epochs; uint256 private _minimumVouches = 2**256 - 1; mapping(address => uint256) private _vouches; mapping(address => mapping(address => bool)) private _vouchedFor; event EpochCreated(uint256 indexed id, address epoch, uint256 end); event VouchCreated(address indexed recipient, address indexed sender); event InviteIssued(address indexed recipient, uint8 permissions); event InviteRevoked(address indexed recipient); string private _uri; constructor( string memory name, string memory id, string memory uri ) ERC721(name, id) { _uri = uri; } function invite(address recipient) public onlyOwner { require(balanceOf(recipient) == 0, "recipient is already invited."); _vouches[recipient] = _minimumVouches; _issueInvite(recipient, Coordinape.PARTICIPANT); } function revoke(address recipient) public onlyOwner { require(balanceOf(recipient) >= 1, "recipient is not invited."); _revokeInvite(recipient); } function edit(address recipient, uint8 permissions) public onlyOwner { require(balanceOf(recipient) >= 1, "recipient is not invited."); require(permissions != Coordinape.EXTERNAL, "call revoke to remove user."); require( permissions & Coordinape.PARTICIPANT != 0, "permissions must contain at least 'PARTICIPANT'." ); uint256 inviteId = _invites[recipient]; _invitePermissions[inviteId] = permissions; } function setMinimumVouches(uint256 value) public onlyOwner { _minimumVouches = value; } function startEpoch(uint256 amount, uint256 end) public onlyOwner returns (address epoch) { require(!_epochInProgress(), "another epoch is already in progress."); require(block.number < end, "end block must be in the future."); bytes memory creationCode = type(CoordinapeEpoch).creationCode; bytes memory bytecode = abi.encodePacked(creationCode, abi.encode(amount, end)); Counters.increment(_epochIds); uint256 epochId = Counters.current(_epochIds); bytes32 salt = keccak256(abi.encodePacked(name(), symbol(), epochId)); assembly { epoch := create2(0, add(bytecode, 32), mload(bytecode), salt) } _epochs[epochId] = epoch; emit EpochCreated(epochId, epoch, end); return epoch; } function joinCurrentEpoch() public onlyInvited onlyInProgress { CoordinapeEpoch epoch = CoordinapeEpoch(currentEpochAddress()); uint256 tokenId = _invites[_msgSender()]; uint8 permissions = _invitePermissions[tokenId]; epoch.addParticipant(_msgSender(), permissions); } function leaveCurrentEpoch() public onlyInvited onlyInProgress { CoordinapeEpoch epoch = CoordinapeEpoch(currentEpochAddress()); epoch.removeParticipant(_msgSender()); } function vouch(address recipient) public onlyInvited { require(balanceOf(recipient) == 0, "recipient is already invited."); require(!_vouchedFor[_msgSender()][recipient], "sender already vouched for recipient."); _vouches[recipient] += 1; _vouchedFor[_msgSender()][recipient] = true; emit VouchCreated(recipient, _msgSender()); } function enter() public { require(balanceOf(_msgSender()) == 0, "sender is already invited."); require( _vouches[_msgSender()] >= _minimumVouches, "sender didn't receive minimum vouches." ); _issueInvite(_msgSender(), Coordinape.PARTICIPANT); } function members() public view returns (address[] memory) { address[] memory addresses = new address[](membersCount()); uint256 j = 0; for (uint256 i = 1; i <= Counters.current(_inviteIds); i++) { if (_exists(i)) { address owner = ownerOf(i); addresses[j++] = owner; } } return addresses; } function membersCount() public view returns (uint256) { return totalSupply(); } function inviteOf(address recipient) public view returns (uint256) { return _invites[recipient]; } function permissionsOf(address recipient) public view returns (uint8) { return _invitePermissions[inviteOf(recipient)]; } function vouchesOf(address recipient) public view returns (uint256) { return _vouches[recipient]; } function minimumVouches() public view returns (uint256) { return _minimumVouches; } function currentEpochAddress() public view returns (address) { return epochAddress(currentEpochId()); } function currentEpochId() public view returns (uint256) { return Counters.current(_epochIds); } function epochAddress(uint256 id) public view returns (address) { return _epochs[id]; } function _epochInProgress() internal view returns (bool) { uint256 epochId = Counters.current(_epochIds); return epochId > 0 && !CoordinapeEpoch(_epochs[epochId]).ended(); } function _issueInvite(address recipient, uint8 permissions) internal { Counters.increment(_inviteIds); uint256 tokenId = Counters.current(_inviteIds); _mint(recipient, tokenId); _invitePermissions[tokenId] = permissions; _invites[recipient] = tokenId; _vouches[recipient] = 0; emit InviteIssued(recipient, permissions); } function _revokeInvite(address recipient) internal { uint256 tokenId = _invites[recipient]; _burn(tokenId); _invitePermissions[tokenId] = 0; _invites[recipient] = 0; emit InviteRevoked(recipient); } modifier onlyInvited() { require(balanceOf(_msgSender()) >= 1, "method can only be called by an invited user."); _; } modifier onlyInProgress() { require(_epochInProgress(), "no epoch currently in progress."); _; } function totalSupply() public view returns (uint256) { return Counters.current(_inviteIds) - Counters.current(_inviteBurned); } function _baseURI() internal view override returns (string memory) { return _uri; } function _beforeTokenTransfer( address sender, address recipient, uint256 tokenId ) internal override { require( recipient == address(0) || balanceOf(recipient) == 0, "recipient is already invited." ); require( recipient == address(0) || _vouches[recipient] >= _minimumVouches, "recipient didn't receive minimum vouches." ); _invites[sender] = 0; _invites[recipient] = tokenId; if (recipient == address(0)) { Counters.increment(_inviteBurned); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"id","type":"string"},{"internalType":"string","name":"uri","type":"string"}],"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":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"epoch","type":"address"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"}],"name":"EpochCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint8","name":"permissions","type":"uint8"}],"name":"InviteIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"InviteRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"VouchCreated","type":"event"},{"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":"currentEpochAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEpochId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint8","name":"permissions","type":"uint8"}],"name":"edit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"epochAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"recipient","type":"address"}],"name":"invite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"inviteOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joinCurrentEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leaveCurrentEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"members","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"membersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumVouches","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"permissionsOf","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"revoke","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":"uint256","name":"value","type":"uint256"}],"name":"setMinimumVouches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"startEpoch","outputs":[{"internalType":"address","name":"epoch","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"vouch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"vouchesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600019600d553480156200001757600080fd5b50604051620047cd380380620047cd8339810160408190526200003a9162000248565b82518390839062000053906000906020850190620000ef565b50805162000069906001906020840190620000ef565b50505060006200007e620000eb60201b60201c565b600680546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508051620000e1906010906020840190620000ef565b5050505062000328565b3390565b828054620000fd90620002d5565b90600052602060002090601f0160209004810192826200012157600085556200016c565b82601f106200013c57805160ff19168380011785556200016c565b828001600101855582156200016c579182015b828111156200016c5782518255916020019190600101906200014f565b506200017a9291506200017e565b5090565b5b808211156200017a57600081556001016200017f565b600082601f830112620001a6578081fd5b81516001600160401b0380821115620001c357620001c362000312565b604051601f8301601f19908116603f01168101908282118183101715620001ee57620001ee62000312565b816040528381526020925086838588010111156200020a578485fd5b8491505b838210156200022d57858201830151818301840152908201906200020e565b838211156200023e57848385830101525b9695505050505050565b6000806000606084860312156200025d578283fd5b83516001600160401b038082111562000274578485fd5b620002828783880162000195565b9450602086015191508082111562000298578384fd5b620002a68783880162000195565b93506040860151915080821115620002bc578283fd5b50620002cb8682870162000195565b9150509250925092565b600281046001821680620002ea57607f821691505b602082108114156200030c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61449580620003386000396000f3fe60806040523480156200001157600080fd5b5060043610620002445760003560e01c806374a8f1031162000141578063d50011f711620000bd578063e97dcb621162000087578063e97dcb621462000522578063e985e9c5146200052c578063eacdc5ff146200056b578063f2fde38b1462000575578063fb8afa7f146200058c5762000244565b8063d50011f714620004bf578063dd66e16b14620004d6578063e8436b3814620004ed578063e8d9a76b14620004f65762000244565b8063a22cb465116200010b578063a22cb4651462000457578063b88d4fde146200046e578063ba2e88361462000485578063bdd4d18d146200048f578063c87b56dd14620004a85762000244565b806374a8f103146200041a5780638da5cb5b146200043157806395d89b4114620004435780639fa7f243146200044d5762000244565b806328cfcf4111620001d15780634b77c468116200019b5780634b77c46814620003b4578063609d8daf14620003cb5780636352211e14620003e257806370a0823114620003f9578063715018a614620004105762000244565b806328cfcf41146200033b578063297f9af0146200036757806342842e0e14620003715780634ac9e9d914620003885762000244565b80630aa582a311620002135780630aa582a314620002d757806318160ddd14620003015780631e29fbba146200031a57806323b872dd14620003245762000244565b806301ffc9a7146200024957806306fdde031462000275578063081812fc146200028e578063095ea7b314620002be575b600080fd5b620002606200025a366004620024fe565b620005a3565b60405190151581526020015b60405180910390f35b6200027f620005f9565b6040516200026c91906200269f565b620002a56200029f3660046200253c565b62000693565b6040516001600160a01b0390911681526020016200026c565b620002d5620002cf3660046200247f565b6200072e565b005b620002ee620002e8366004620022cd565b6200084f565b60405160ff90911681526020016200026c565b6200030b6200088f565b6040519081526020016200026c565b620002d5620008af565b620002d56200033536600462002321565b620009b1565b6200030b6200034c366004620022cd565b6001600160a01b031660009081526008602052604090205490565b6200030b620009e9565b620002d56200038236600462002321565b620009f5565b6200030b62000399366004620022cd565b6001600160a01b03166000908152600e602052604090205490565b620002d5620003c5366004620022cd565b62000a12565b620002d5620003dc366004620024ab565b62000a96565b620002a5620003f33660046200253c565b62000c13565b6200030b6200040a366004620022cd565b62000c8c565b620002d562000d15565b620002d56200042b366004620022cd565b62000d8c565b6006546001600160a01b0316620002a5565b6200027f62000e1d565b620002a562000e2e565b620002d56200046836600462002444565b62000e3e565b620002d56200047f36600462002361565b62000f13565b620002d562000f52565b6200049962001075565b6040516200026c919062002650565b6200027f620004b93660046200253c565b62001181565b620002d5620004d03660046200253c565b62001266565b620002d5620004e7366004620022cd565b62001298565b600d546200030b565b620002a5620005073660046200253c565b6000908152600c60205260409020546001600160a01b031690565b620002d5620013fd565b620002606200053d366004620022ea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6200030b620014d8565b620002d562000586366004620022cd565b620014e4565b620002a56200059d36600462002555565b620015d4565b60006001600160e01b031982166380ac58cd60e01b1480620005d557506001600160e01b03198216635b5e139f60e01b145b80620005f157506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b6060600080546200060a906200288b565b80601f016020809104026020016040519081016040528092919081815260200182805462000638906200288b565b8015620006895780601f106200065d5761010080835404028352916020019162000689565b820191906000526020600020905b8154815290600101906020018083116200066b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316620007125760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006200073b8262000c13565b9050806001600160a01b0316836001600160a01b03161415620007ab5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840162000709565b336001600160a01b0382161480620007ca5750620007ca81336200053d565b6200083e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840162000709565b6200084a83836200180a565b505050565b60006009600062000875846001600160a01b031660009081526008602052604090205490565b815260208101919091526040016000205460ff1692915050565b60006200089b600a5490565b600754620008aa919062002842565b905090565b6001620008bc336200040a565b1015620008dd5760405162461bcd60e51b815260040162000709906200273d565b620008e76200187a565b620009355760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f63682063757272656e746c7920696e2070726f67726573732e00604482015260640162000709565b60006200094162000e2e565b90506001600160a01b03811663668a2001336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200099557600080fd5b505af1158015620009aa573d6000803e3d6000fd5b5050505050565b620009bd338262001928565b620009dc5760405162461bcd60e51b81526004016200070990620027bf565b6200084a83838362001a27565b6000620008aa6200088f565b6200084a8383836040518060200160405280600081525062000f13565b6006546001600160a01b0316331462000a3f5760405162461bcd60e51b815260040162000709906200278a565b62000a4a8162000c8c565b1562000a6a5760405162461bcd60e51b8152600401620007099062002706565b600d546001600160a01b0382166000908152600e602052604090205562000a9381600162001be0565b50565b6006546001600160a01b0316331462000ac35760405162461bcd60e51b815260040162000709906200278a565b600162000ad08362000c8c565b101562000b1c5760405162461bcd60e51b81526020600482015260196024820152783932b1b4b834b2b73a1034b9903737ba1034b73b34ba32b21760391b604482015260640162000709565b60ff811662000b6e5760405162461bcd60e51b815260206004820152601b60248201527f63616c6c207265766f6b6520746f2072656d6f766520757365722e0000000000604482015260640162000709565b6001811662000bd95760405162461bcd60e51b815260206004820152603060248201527f7065726d697373696f6e73206d75737420636f6e7461696e206174206c65617360448201526f3a1013a820a92a24a1a4a820a72a139760811b606482015260840162000709565b6001600160a01b0391909116600090815260086020908152604080832054835260099091529020805460ff191660ff909216919091179055565b6000818152600260205260408120546001600160a01b031680620005f15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840162000709565b60006001600160a01b03821662000cf95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840162000709565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331462000d425760405162461bcd60e51b815260040162000709906200278a565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b0316331462000db95760405162461bcd60e51b815260040162000709906200278a565b600162000dc68262000c8c565b101562000e125760405162461bcd60e51b81526020600482015260196024820152783932b1b4b834b2b73a1034b9903737ba1034b73b34ba32b21760391b604482015260640162000709565b62000a938162001c81565b6060600180546200060a906200288b565b6000620008aa62000507620014d8565b6001600160a01b03821633141562000e995760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640162000709565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405162000f07911515815260200190565b60405180910390a35050565b62000f1f338362001928565b62000f3e5760405162461bcd60e51b81526004016200070990620027bf565b62000f4c8484848462001d00565b50505050565b600162000f5f336200040a565b101562000f805760405162461bcd60e51b815260040162000709906200273d565b62000f8a6200187a565b62000fd85760405162461bcd60e51b815260206004820152601f60248201527f6e6f2065706f63682063757272656e746c7920696e2070726f67726573732e00604482015260640162000709565b600062000fe462000e2e565b33600081815260086020908152604080832054808452600990925280832054815163442cbcb360e01b8152600481019590955260ff16602485018190529051949550909390926001600160a01b0386169263442cbcb39260448084019382900301818387803b1580156200105757600080fd5b505af11580156200106c573d6000803e3d6000fd5b50505050505050565b6060600062001083620009e9565b67ffffffffffffffff811115620010aa57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015620010d4578160200160208202803683370190505b509050600060015b600754811162001179576000818152600260205260409020546001600160a01b03161562001164576000620011118262000c13565b90508084846200112181620028c8565b9550815181106200114257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050505b806200117081620028c8565b915050620010dc565b509091505090565b6000818152600260205260409020546060906001600160a01b0316620012025760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840162000709565b60006200120e62001d3a565b905060008151116200123057604051806020016040528060008152506200125f565b806200123c8462001d4b565b6040516020016200124f929190620025a5565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314620012935760405162461bcd60e51b815260040162000709906200278a565b600d55565b6001620012a5336200040a565b1015620012c65760405162461bcd60e51b815260040162000709906200273d565b620012d18162000c8c565b15620012f15760405162461bcd60e51b8152600401620007099062002706565b336000908152600f602090815260408083206001600160a01b038516845290915290205460ff1615620013755760405162461bcd60e51b815260206004820152602560248201527f73656e64657220616c726561647920766f756368656420666f7220726563697060448201526434b2b73a1760d91b606482015260840162000709565b6001600160a01b0381166000908152600e60205260408120805460019290620013a090849062002810565b9091555050336000818152600f602090815260408083206001600160a01b0386168085529252808320805460ff191660011790555190917f4b2c9a3db1e8916a20d447c88fedca2325dffd42f7e881a889cb8d00cd032d7891a350565b62001408336200040a565b15620014575760405162461bcd60e51b815260206004820152601a60248201527f73656e64657220697320616c726561647920696e76697465642e000000000000604482015260640162000709565b600d54336000908152600e60205260409020541015620014c95760405162461bcd60e51b815260206004820152602660248201527f73656e646572206469646e27742072656365697665206d696e696d756d20766f6044820152653ab1b432b99760d11b606482015260840162000709565b620014d633600162001be0565b565b6000620008aa600b5490565b6006546001600160a01b03163314620015115760405162461bcd60e51b815260040162000709906200278a565b6001600160a01b038116620015785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000709565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314620016045760405162461bcd60e51b815260040162000709906200278a565b6200160e6200187a565b156200166b5760405162461bcd60e51b815260206004820152602560248201527f616e6f746865722065706f636820697320616c726561647920696e2070726f676044820152643932b9b99760d91b606482015260840162000709565b814310620016bc5760405162461bcd60e51b815260206004820181905260248201527f656e6420626c6f636b206d75737420626520696e20746865206675747572652e604482015260640162000709565b600060405180602001620016d090620022a7565b601f1982820381018352601f909101166040818152602082018790528101859052909150600090829060600160408051601f19818403018152908290526200171c9291602001620025a5565b60405160208183030381529060405290506200173c600b80546001019055565b600062001748600b5490565b9050600062001756620005f9565b6200176062000e1d565b836040516020016200177593929190620025d8565b604051602081830303815290604052805190602001209050808351602085016000f56000838152600c602090815260409182902080546001600160a01b0319166001600160a01b038516908117909155825190815290810189905291965083917f38ae8d28396419f5a0e88ae407301b875821c573c5a8d1506991bf0e5cd01567910160405180910390a25050505092915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190620018418262000c13565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008062001887600b5490565b90506000811180156200192257506000818152600c60209081526040918290205482516312fa6feb60e01b815292516001600160a01b03909116926312fa6feb926004808301939192829003018186803b158015620018e557600080fd5b505afa158015620018fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019209190620024df565b155b91505090565b6000818152600260205260408120546001600160a01b0316620019a35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840162000709565b6000620019b08362000c13565b9050806001600160a01b0316846001600160a01b03161480620019ee5750836001600160a01b0316620019e38462000693565b6001600160a01b0316145b8062001a1f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031662001a3c8262000c13565b6001600160a01b03161462001aa65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840162000709565b6001600160a01b03821662001b0a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840162000709565b62001b1783838362001e7b565b62001b246000826200180a565b6001600160a01b038316600090815260036020526040812080546001929062001b4f90849062002842565b90915550506001600160a01b038216600090815260036020526040812080546001929062001b7f90849062002810565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b62001bef600780546001019055565b600062001bfb60075490565b905062001c09838262001f87565b6000818152600960209081526040808320805460ff191660ff87169081179091556001600160a01b03871680855260088452828520869055600e84528285209490945590519081527f417bd5cc050be3e92901f43658440307e9026cc9143e47f1ccb384752c1d6eba910160405180910390a2505050565b6001600160a01b03811660009081526008602052604090205462001ca581620020dd565b6000818152600960209081526040808320805460ff191690556001600160a01b03851680845260089092528083208390555190917f0d47a06d58228fb3562d8f3d50865af13236178b1057f788ce6b3f2461eb135691a25050565b62001d0d84848462001a27565b62001d1b848484846200218c565b62000f4c5760405162461bcd60e51b81526004016200070990620026b4565b6060601080546200060a906200288b565b60608162001d7257506040805180820190915260018152600360fc1b6020820152620005f4565b8160005b811562001da2578062001d8981620028c8565b915062001d9a9050600a836200282b565b915062001d76565b60008167ffffffffffffffff81111562001dcc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801562001df7576020820181803683370190505b5090505b841562001a1f5762001e0f60018362002842565b915062001e1e600a86620028e6565b62001e2b90603062002810565b60f81b81838151811062001e4f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535062001e73600a866200282b565b945062001dfb565b6001600160a01b038216158062001e9a575062001e988262000c8c565b155b62001eb95760405162461bcd60e51b8152600401620007099062002706565b6001600160a01b038216158062001eea5750600d546001600160a01b0383166000908152600e602052604090205410155b62001f4a5760405162461bcd60e51b815260206004820152602960248201527f726563697069656e74206469646e27742072656365697665206d696e696d756d604482015268103b37bab1b432b99760b91b606482015260840162000709565b6001600160a01b038084166000908152600860205260408082208290559184168082529190208290556200084a576200084a600a80546001019055565b6001600160a01b03821662001fdf5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000709565b6000818152600260205260409020546001600160a01b031615620020465760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000709565b620020546000838362001e7b565b6001600160a01b03821660009081526003602052604081208054600192906200207f90849062002810565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000620020ea8262000c13565b9050620020fa8160008462001e7b565b620021076000836200180a565b6001600160a01b03811660009081526003602052604081208054600192906200213290849062002842565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b156200229c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620021d390339089908890889060040162002611565b602060405180830381600087803b158015620021ee57600080fd5b505af192505050801562002221575060408051601f3d908101601f191682019092526200221e918101906200251d565b60015b62002281573d80801562002252576040519150601f19603f3d011682016040523d82523d6000602084013e62002257565b606091505b508051620022795760405162461bcd60e51b81526004016200070990620026b4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062001a1f565b506001949350505050565b611afa806200296683390190565b80356001600160a01b0381168114620005f457600080fd5b600060208284031215620022df578081fd5b6200125f82620022b5565b60008060408385031215620022fd578081fd5b6200230883620022b5565b91506200231860208401620022b5565b90509250929050565b60008060006060848603121562002336578081fd5b6200234184620022b5565b92506200235160208501620022b5565b9150604084013590509250925092565b6000806000806080858703121562002377578081fd5b6200238285620022b5565b93506200239260208601620022b5565b925060408501359150606085013567ffffffffffffffff80821115620023b6578283fd5b818701915087601f830112620023ca578283fd5b813581811115620023df57620023df62002929565b604051601f8201601f19908116603f011681019083821181831017156200240a576200240a62002929565b816040528281528a602084870101111562002423578586fd5b82602086016020830137918201602001949094529598949750929550505050565b6000806040838503121562002457578182fd5b6200246283620022b5565b9150602083013562002474816200293f565b809150509250929050565b6000806040838503121562002492578182fd5b6200249d83620022b5565b946020939093013593505050565b60008060408385031215620024be578182fd5b620024c983620022b5565b9150602083013560ff8116811462002474578182fd5b600060208284031215620024f1578081fd5b81516200125f816200293f565b60006020828403121562002510578081fd5b81356200125f816200294e565b6000602082840312156200252f578081fd5b81516200125f816200294e565b6000602082840312156200254e578081fd5b5035919050565b6000806040838503121562002568578182fd5b50508035926020909101359150565b60008151808452620025918160208601602086016200285c565b601f01601f19169290920160200192915050565b60008351620025b98184602088016200285c565b835190830190620025cf8183602088016200285c565b01949350505050565b60008451620025ec8184602089016200285c565b845190830190620026028183602089016200285c565b01928352505060200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620026469083018462002577565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015620026935783516001600160a01b0316835292840192918401916001016200266c565b50909695505050505050565b6000602082526200125f602083018462002577565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601d908201527f726563697069656e7420697320616c726561647920696e76697465642e000000604082015260600190565b6020808252602d908201527f6d6574686f642063616e206f6e6c792062652063616c6c656420627920616e2060408201526c34b73b34ba32b2103ab9b2b91760991b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115620028265762002826620028fd565b500190565b6000826200283d576200283d62002913565b500490565b600082821015620028575762002857620028fd565b500390565b60005b83811015620028795781810151838201526020016200285f565b8381111562000f4c5750506000910152565b600281046001821680620028a057607f821691505b60208210811415620028c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620028df57620028df620028fd565b5060010190565b600082620028f857620028f862002913565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811462000a9357600080fd5b6001600160e01b03198116811462000a9357600080fdfe60806040523480156200001157600080fd5b5060405162001afa38038062001afa833981016040819052620000349162000210565b604051806040016040528060048152602001634769766560e01b815250604051806040016040528060048152602001634749564560e01b8152508160039080519060200190620000869291906200016a565b5080516200009c9060049060208401906200016a565b5050506000620000b16200016660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350804310620001535760405162461bcd60e51b815260206004820181905260248201527f656e6420626c6f636b206d75737420626520696e20746865206675747572652e604482015260640160405180910390fd5b600d919091554360065560075562000271565b3390565b828054620001789062000234565b90600052602060002090601f0160209004810192826200019c5760008555620001e7565b82601f10620001b757805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e7578251825591602001919060010190620001ca565b50620001f5929150620001f9565b5090565b5b80821115620001f55760008155600101620001fa565b6000806040838503121562000223578182fd5b505080516020909101519092909150565b6002810460018216806200024957607f821691505b602082108114156200026b57634e487b7160e01b600052602260045260246000fd5b50919050565b61187980620002816000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c1afca9116100de57806395d89b4111610097578063d66d9e1911610071578063d66d9e191461035c578063dd62ed3e14610364578063ded1837d1461039d578063f2fde38b146103a55761018e565b806395d89b411461032e578063a457c2d714610336578063a9059cbb146103495761018e565b80635c1afca91461028e578063668a2001146102a157806370a08231146102b4578063715018a6146102dd5780638da5cb5b146102e5578063929066f5146103005761018e565b80631ead48a61161014b578063313ce56711610125578063313ce567146102595780633950935114610260578063442cbcb31461027357806348cd4cb1146102865761018e565b80631ead48a61461021e57806323b872dd146102335780632e428864146102465761018e565b806306fdde0314610193578063083c6323146101b1578063095ea7b3146101c35780630aa582a3146101e657806312fa6feb1461020b57806318160ddd14610216575b600080fd5b61019b6103b8565b6040516101a89190611632565b60405180910390f35b6007545b6040519081526020016101a8565b6101d66101d13660046115ce565b61044a565b60405190151581526020016101a8565b6101f96101f4366004611483565b610460565b60405160ff90911681526020016101a8565b6007544310156101d6565b6002546101b5565b61023161022c3660046115f7565b610482565b005b6101d66102413660046114d6565b610568565b6101b5610254366004611483565b610619565b60006101f9565b6101d661026e3660046115ce565b61064c565b6102316102813660046115f7565b610683565b6006546101b5565b61023161029c366004611511565b6107c3565b6102316102af366004611483565b610959565b6101b56102c2366004611483565b6001600160a01b031660009081526020819052604090205490565b6102316109f7565b6005546040516001600160a01b0390911681526020016101a8565b6101d661030e366004611483565b6001600160a01b03166000908152600a6020526040902054600116151590565b61019b610a6b565b6101d66103443660046115ce565b610a7a565b6101d66103573660046115ce565b610b15565b610231610b22565b6101b56103723660046114a4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610231610b68565b6102316103b3366004611483565b610be6565b6060600380546103c7906117dc565b80601f01602080910402602001604051908101604052809291908181526020018280546103f3906117dc565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b6000610457338484610cd1565b50600192915050565b6001600160a01b0381166000908152600a602052604090205460ff165b919050565b6005546001600160a01b031633146104b55760405162461bcd60e51b81526004016104ac90611685565b60405180910390fd5b60ff811661051b5760405162461bcd60e51b815260206004820152602d60248201527f63616c6c2072656d6f76655061727469636970616e7420746f2072656d6f766560448201526c103830b93a34b1b4b830b73a1760991b60648201526084016104ac565b6001811661053b5760405162461bcd60e51b81526004016104ac906116ba565b6001600160a01b03919091166000908152600a60205260409020805460ff191660ff909216919091179055565b6000610575848484610df6565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105fa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016104ac565b61060e853361060986856117c5565b610cd1565b506001949350505050565b6001600160a01b0381166000908152600b60209081526040808320549183905282205461064691906117c5565b92915050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104579185906106099086906117ad565b6005546001600160a01b031633146106ad5760405162461bcd60e51b81526004016104ac90611685565b600181166106cd5760405162461bcd60e51b81526004016104ac906116ba565b6001600160a01b0382166000908152600a602052604090205460ff16156107425760405162461bcd60e51b815260206004820152602360248201527f726563697069656e7420697320616c7265616479206120706172746963697061604482015262373a1760e91b60648201526084016104ac565b816009600061075060085490565b81526020808201929092526040908101600090812080546001600160a01b0319166001600160a01b039586161790559285168352600a8252808320805460ff191660ff8616179055600d54600b9092529091208190556107b1908390610fd9565b6107bf600880546001019055565b5050565b336000908152600a60205260409020546001166107f25760405162461bcd60e51b81526004016104ac90611757565b60075443106108625760405162461bcd60e51b815260206004820152603660248201527f6d6574686f642063616e206f6e6c792062652063616c6c6564206265666f7265604482015275103a34329032b7321037b3103a34329032b837b1b41760511b60648201526084016104ac565b336001600160a01b03831614156108bb5760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f74206164642061206e6f746520746f2073656c662e00000000000060448201526064016104ac565b6001600160a01b0382166000908152600a60205260409020546001166109235760405162461bcd60e51b815260206004820152601f60248201527f726563697069656e74206973206e6f742061207061727469636970616e742e0060448201526064016104ac565b6001600160a01b0382166000908152600c6020908152604080832033845282529091208251610954928401906113d3565b505050565b6005546001600160a01b031633146109835760405162461bcd60e51b81526004016104ac90611685565b6001600160a01b0381166000908152600a60205260409020546002166109bb5760405162461bcd60e51b81526004016104ac9061170a565b6001600160a01b0381166000908152600a60209081526040808320805460ff19166001179055908290529020546109f49082905b6110c4565b50565b6005546001600160a01b03163314610a215760405162461bcd60e51b81526004016104ac90611685565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546103c7906117dc565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610afc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104ac565b610b0b338561060986856117c5565b5060019392505050565b6000610457338484610df6565b336000908152600a6020526040902054600116610b515760405162461bcd60e51b81526004016104ac90611757565b610b59610b68565b610b66336109ef336102c2565b565b336000908152600a6020526040902054600116610b975760405162461bcd60e51b81526004016104ac90611757565b336000908152600a6020526040902054600216610bc65760405162461bcd60e51b81526004016104ac9061170a565b336000908152600a60205260409020805460ff19811660fe909116179055565b6005546001600160a01b03163314610c105760405162461bcd60e51b81526004016104ac90611685565b6001600160a01b038116610c755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ac565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610d335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104ac565b6001600160a01b038216610d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104ac565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610e5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104ac565b6001600160a01b038216610ebc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104ac565b610ec783838361121f565b6001600160a01b03831660009081526020819052604090205481811015610f3f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104ac565b610f4982826117c5565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290610f7f9084906117ad565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610fcb91815260200190565b60405180910390a350505050565b6001600160a01b03821661102f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104ac565b61103b6000838361121f565b806002600082825461104d91906117ad565b90915550506001600160a01b0382166000908152602081905260408120805483929061107a9084906117ad565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166111245760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104ac565b6111308260008361121f565b6001600160a01b038216600090815260208190526040902054818110156111a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ac565b6111ae82826117c5565b6001600160a01b038416600090815260208190526040812091909155600280548492906111dc9084906117c5565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610de9565b6001600160a01b038316158061123c57506001600160a01b038216155b1561124657610954565b6001600160a01b0383166000908152600a60205260409020546001161580159061128a57506001600160a01b0383166000908152600a602052604090205460041615155b6112e15760405162461bcd60e51b815260206004820152602260248201527f73656e646572206d7573742062652061206769766572207061727469636970616044820152611b9d60f21b60648201526084016104ac565b6001600160a01b0382166000908152600a60205260409020546001161580159061132557506001600160a01b0382166000908152600a602052604090205460021615155b6113825760405162461bcd60e51b815260206004820152602860248201527f726563697069656e74206d7573742062652061207265636569766572207061726044820152671d1a58da5c185b9d60c21b60648201526084016104ac565b6001600160a01b0383166000908152600b60205260409020548111610954576001600160a01b0383166000908152600b6020526040812080548392906113c99084906117c5565b9091555050505050565b8280546113df906117dc565b90600052602060002090601f0160209004810192826114015760008555611447565b82601f1061141a57805160ff1916838001178555611447565b82800160010185558215611447579182015b8281111561144757825182559160200191906001019061142c565b50611453929150611457565b5090565b5b808211156114535760008155600101611458565b80356001600160a01b038116811461047d57600080fd5b600060208284031215611494578081fd5b61149d8261146c565b9392505050565b600080604083850312156114b6578081fd5b6114bf8361146c565b91506114cd6020840161146c565b90509250929050565b6000806000606084860312156114ea578081fd5b6114f38461146c565b92506115016020850161146c565b9150604084013590509250925092565b60008060408385031215611523578182fd5b61152c8361146c565b9150602083013567ffffffffffffffff80821115611548578283fd5b818501915085601f83011261155b578283fd5b81358181111561156d5761156d61182d565b604051601f8201601f19908116603f011681019083821181831017156115955761159561182d565b816040528281528860208487010111156115ad578586fd5b82602086016020830137856020848301015280955050505050509250929050565b600080604083850312156115e0578182fd5b6115e98361146c565b946020939093013593505050565b60008060408385031215611609578182fd5b6116128361146c565b9150602083013560ff81168114611627578182fd5b809150509250929050565b6000602080835283518082850152825b8181101561165e57858101830151858201604001528201611642565b8181111561166f5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f7065726d697373696f6e73206d75737420636f6e7461696e206174206c65617360408201526f3a1013a820a92a24a1a4a820a72a139760811b606082015260800190565b6020808252602d908201527f73656e64657220697320616c72656164792061206e6f6e2d726563656976657260408201526c103830b93a34b1b4b830b73a1760991b606082015260800190565b60208082526036908201527f6d6574686f642063616e206f6e6c792062652063616c6c65642062792061207260408201527532b3b4b9ba32b932b2103830b93a34b1b4b830b73a1760511b606082015260800190565b600082198211156117c0576117c0611817565b500190565b6000828210156117d7576117d7611817565b500390565b6002810460018216806117f057607f821691505b6020821081141561181157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220724dce693bb8fceec1625732bc97fd455f1966f050cbe3ec48102c2aa2a45e8564736f6c63430008020033a2646970667358221220798f67e5d128ec1603a2cb08402d73134bf54afe41c3ac31def6354ab96400e164736f6c63430008020033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000016436f6f7264696e617065205465737420436972636c65000000000000000000000000000000000000000000000000000000000000000000000000000000000006494e564954450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001468747470733a2f2f6578616d706c652e636f6d2f000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000016436f6f7264696e617065205465737420436972636c65000000000000000000000000000000000000000000000000000000000000000000000000000000000006494e564954450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001468747470733a2f2f6578616d706c652e636f6d2f000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Coordinape Test Circle
Arg [1] : id (string): INVITE
Arg [2] : uri (string): https://example.com/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [4] : 436f6f7264696e617065205465737420436972636c6500000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 494e564954450000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [8] : 68747470733a2f2f6578616d706c652e636f6d2f000000000000000000000000
Deployed ByteCode Sourcemap
54631:7458:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42780:292;;;;;;:::i;:::-;;:::i;:::-;;;8284:14:1;;8277:22;8259:41;;8247:2;8232:18;42780:292:0;;;;;;;;43712:100;;;:::i;:::-;;;;;;;:::i;45179:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6351:32:1;;;6333:51;;6321:2;6306:18;45179:221:0;6288:102:1;44709:404:0;;;;;;:::i;:::-;;:::i;:::-;;59359:135;;;;;;:::i;:::-;;:::i;:::-;;;20128:4:1;20116:17;;;20098:36;;20086:2;20071:18;59359:135:0;20053:87:1;61211:141:0;;;:::i;:::-;;;19667:25:1;;;19655:2;19640:18;61211:141:0;19622:76:1;57824:192:0;;;:::i;46069:305::-;;;;;;:::i;:::-;;:::i;59239:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;59324:19:0;59297:7;59324:19;;;:8;:19;;;;;;;59239:112;59138:93;;;:::i;46445:151::-;;;;;;:::i;:::-;;:::i;59502:113::-;;;;;;:::i;:::-;-1:-1:-1;;;;;59588:19:0;59561:7;59588:19;;;:8;:19;;;;;;;59502:113;55656:244;;;;;;:::i;:::-;;:::i;56085:488::-;;;;;;:::i;:::-;;:::i;43406:239::-;;;;;;:::i;:::-;;:::i;43136:208::-;;;;;;:::i;:::-;;:::i;35196:148::-;;;:::i;55908:169::-;;;;;;:::i;:::-;;:::i;34545:87::-;34618:6;;-1:-1:-1;;;;;34618:6:0;34545:87;;43881:104;;;:::i;59728:117::-;;;:::i;45472:295::-;;;;;;:::i;:::-;;:::i;46667:285::-;;;;;;:::i;:::-;;:::i;57506:310::-;;;:::i;58730:400::-;;;:::i;:::-;;;;;;;:::i;44056:360::-;;;;;;:::i;:::-;;:::i;56581:101::-;;;;;;:::i;:::-;;:::i;58024:379::-;;;;;;:::i;:::-;;:::i;59623:97::-;59697:15;;59623:97;;59970:101;;;;;;:::i;:::-;60025:7;60052:11;;;:7;:11;;;;;;-1:-1:-1;;;;;60052:11:0;;59970:101;58411:311;;;:::i;45838:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45959:25:0;;;45935:4;45959:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;45838:164;59853:109;;;:::i;35499:244::-;;;;;;:::i;:::-;;:::i;56690:808::-;;;;;;:::i;:::-;;:::i;42780:292::-;42882:4;-1:-1:-1;;;;;;42906:40:0;;-1:-1:-1;;;42906:40:0;;:105;;-1:-1:-1;;;;;;;42963:48:0;;-1:-1:-1;;;42963:48:0;42906:105;:158;;;-1:-1:-1;;;;;;;;;;17975:40:0;;;43028:36;42899:165;;42780:292;;;;:::o;43712:100::-;43766:13;43799:5;43792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43712:100;:::o;45179:221::-;45255:7;48508:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48508:16:0;45275:73;;;;-1:-1:-1;;;45275:73:0;;15355:2:1;45275:73:0;;;15337:21:1;15394:2;15374:18;;;15367:30;15433:34;15413:18;;;15406:62;-1:-1:-1;;;15484:18:1;;;15477:42;15536:19;;45275:73:0;;;;;;;;;-1:-1:-1;45368:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;45368:24:0;;45179:221::o;44709:404::-;44790:13;44806:23;44821:7;44806:14;:23::i;:::-;44790:39;;44854:5;-1:-1:-1;;;;;44848:11:0;:2;-1:-1:-1;;;;;44848:11:0;;;44840:57;;;;-1:-1:-1;;;44840:57:0;;17361:2:1;44840:57:0;;;17343:21:1;17400:2;17380:18;;;17373:30;17439:34;17419:18;;;17412:62;-1:-1:-1;;;17490:18:1;;;17483:31;17531:19;;44840:57:0;17333:223:1;44840:57:0;9000:10;-1:-1:-1;;;;;44918:21:0;;;;:69;;-1:-1:-1;44943:44:0;44967:5;9000:10;44974:12;8920:98;44943:44;44910:161;;;;-1:-1:-1;;;44910:161:0;;12980:2:1;44910:161:0;;;12962:21:1;13019:2;12999:18;;;12992:30;13058:34;13038:18;;;13031:62;13129:26;13109:18;;;13102:54;13173:19;;44910:161:0;12952:246:1;44910:161:0;45084:21;45093:2;45097:7;45084:8;:21::i;:::-;44709:404;;;:::o;59359:135::-;59422:5;59447:18;:39;59466:19;59475:9;-1:-1:-1;;;;;59324:19:0;59297:7;59324:19;;;:8;:19;;;;;;;59239:112;59466:19;59447:39;;;;;;;;;;;-1:-1:-1;59447:39:0;;;;;59359:135;-1:-1:-1;;59359:135:0:o;61211:141::-;61255:7;61313:31;61330:13;10159:14;;10067:114;61313:31;61299:10;10159:14;61282:62;;;;:::i;:::-;61275:69;;61211:141;:::o;57824:192::-;61005:1;60978:23;9000:10;60988:12;8920:98;60978:23;:28;;60970:86;;;;-1:-1:-1;;;60970:86:0;;;;;;;:::i;:::-;61129:18:::1;:16;:18::i;:::-;61121:62;;;::::0;-1:-1:-1;;;61121:62:0;;19363:2:1;61121:62:0::1;::::0;::::1;19345:21:1::0;19402:2;19382:18;;;19375:30;19441:33;19421:18;;;19414:61;19492:18;;61121:62:0::1;19335:181:1::0;61121:62:0::1;57898:21:::2;57938;:19;:21::i;:::-;57898:62:::0;-1:-1:-1;;;;;;57971:23:0;::::2;;9000:10:::0;57971:37:::2;::::0;-1:-1:-1;;;;;;57971:37:0::2;::::0;;;;;;-1:-1:-1;;;;;6351:32:1;;;57971:37:0::2;::::0;::::2;6333:51:1::0;6306:18;;57971:37:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;61194:1;57824:192::o:0;46069:305::-;46230:41;9000:10;46263:7;46230:18;:41::i;:::-;46222:103;;;;-1:-1:-1;;;46222:103:0;;;;;;;:::i;:::-;46338:28;46348:4;46354:2;46358:7;46338:9;:28::i;59138:93::-;59183:7;59210:13;:11;:13::i;46445:151::-;46549:39;46566:4;46572:2;46576:7;46549:39;;;;;;;;;;;;:16;:39::i;55656:244::-;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;55727:20:::1;55737:9;55727;:20::i;:::-;:25:::0;55719:67:::1;;;;-1:-1:-1::0;;;55719:67:0::1;;;;;;;:::i;:::-;55819:15;::::0;-1:-1:-1;;;;;55797:19:0;::::1;;::::0;;;:8:::1;:19;::::0;;;;:37;55845:47:::1;55806:9:::0;198:1:::1;55845:12;:47::i;:::-;55656:244:::0;:::o;56085:488::-;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;56197:1:::1;56173:20;56183:9;56173;:20::i;:::-;:25;;56165:63;;;::::0;-1:-1:-1;;;56165:63:0;;9156:2:1;56165:63:0::1;::::0;::::1;9138:21:1::0;9195:2;9175:18;;;9168:30;-1:-1:-1;;;9214:18:1;;;9207:55;9279:18;;56165:63:0::1;9128:175:1::0;56165:63:0::1;56247:34;::::0;::::1;56239:74;;;::::0;-1:-1:-1;;;56239:74:0;;11852:2:1;56239:74:0::1;::::0;::::1;11834:21:1::0;11891:2;11871:18;;;11864:30;11930:29;11910:18;;;11903:57;11977:18;;56239:74:0::1;11824:177:1::0;56239:74:0::1;198:1;56346:36:::0;::::1;56324:139;;;::::0;-1:-1:-1;;;56324:139:0;;17763:2:1;56324:139:0::1;::::0;::::1;17745:21:1::0;17802:2;17782:18;;;17775:30;17841:34;17821:18;;;17814:62;-1:-1:-1;;;17892:18:1;;;17885:46;17948:19;;56324:139:0::1;17735:238:1::0;56324:139:0::1;-1:-1:-1::0;;;;;56493:19:0;;;::::1;56474:16;56493:19:::0;;;:8:::1;:19;::::0;;;;;;;;56523:28;;:18:::1;:28:::0;;;;;:42;;-1:-1:-1;;56523:42:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;56085:488::o;43406:239::-;43478:7;43514:16;;;:7;:16;;;;;;-1:-1:-1;;;;;43514:16:0;43549:19;43541:73;;;;-1:-1:-1;;;43541:73:0;;14223:2:1;43541:73:0;;;14205:21:1;14262:2;14242:18;;;14235:30;14301:34;14281:18;;;14274:62;-1:-1:-1;;;14352:18:1;;;14345:39;14401:19;;43541:73:0;14195:231:1;43136:208:0;43208:7;-1:-1:-1;;;;;43236:19:0;;43228:74;;;;-1:-1:-1;;;43228:74:0;;13812:2:1;43228:74:0;;;13794:21:1;13851:2;13831:18;;;13824:30;13890:34;13870:18;;;13863:62;-1:-1:-1;;;13941:18:1;;;13934:40;13991:19;;43228:74:0;13784:232:1;43228:74:0;-1:-1:-1;;;;;;43320:16:0;;;;;:9;:16;;;;;;;43136:208::o;35196:148::-;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;35287:6:::1;::::0;35266:40:::1;::::0;35303:1:::1;::::0;-1:-1:-1;;;;;35287:6:0::1;::::0;35266:40:::1;::::0;35303:1;;35266:40:::1;35317:6;:19:::0;;-1:-1:-1;;;;;;35317:19:0::1;::::0;;35196:148::o;55908:169::-;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;56003:1:::1;55979:20;55989:9;55979;:20::i;:::-;:25;;55971:63;;;::::0;-1:-1:-1;;;55971:63:0;;9156:2:1;55971:63:0::1;::::0;::::1;9138:21:1::0;9195:2;9175:18;;;9168:30;-1:-1:-1;;;9214:18:1;;;9207:55;9279:18;;55971:63:0::1;9128:175:1::0;55971:63:0::1;56045:24;56059:9;56045:13;:24::i;43881:104::-:0;43937:13;43970:7;43963:14;;;;;:::i;59728:117::-;59780:7;59807:30;59820:16;:14;:16::i;45472:295::-;-1:-1:-1;;;;;45575:24:0;;9000:10;45575:24;;45567:62;;;;-1:-1:-1;;;45567:62:0;;11085:2:1;45567:62:0;;;11067:21:1;11124:2;11104:18;;;11097:30;11163:27;11143:18;;;11136:55;11208:18;;45567:62:0;11057:175:1;45567:62:0;9000:10;45642:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;45642:42:0;;;;;;;;;;:53;;-1:-1:-1;;45642:53:0;;;;;;;:42;-1:-1:-1;;;;;45711:48:0;;45750:8;45711:48;;;;8284:14:1;8277:22;8259:41;;8247:2;8232:18;;8214:92;45711:48:0;;;;;;;;45472:295;;:::o;46667:285::-;46799:41;9000:10;46832:7;46799:18;:41::i;:::-;46791:103;;;;-1:-1:-1;;;46791:103:0;;;;;;;:::i;:::-;46905:39;46919:4;46925:2;46929:7;46938:5;46905:13;:39::i;:::-;46667:285;;;;:::o;57506:310::-;61005:1;60978:23;9000:10;60988:12;8920:98;60978:23;:28;;60970:86;;;;-1:-1:-1;;;60970:86:0;;;;;;;:::i;:::-;61129:18:::1;:16;:18::i;:::-;61121:62;;;::::0;-1:-1:-1;;;61121:62:0;;19363:2:1;61121:62:0::1;::::0;::::1;19345:21:1::0;19402:2;19382:18;;;19375:30;19441:33;19421:18;;;19414:61;19492:18;;61121:62:0::1;19335:181:1::0;61121:62:0::1;57579:21:::2;57619;:19;:21::i;:::-;9000:10:::0;57652:15:::2;57670:22:::0;;;:8:::2;:22;::::0;;;;;;;;57723:27;;;:18:::2;:27:::0;;;;;;;57761:47;;-1:-1:-1;;;57761:47:0;;::::2;::::0;::::2;7337:51:1::0;;;;57723:27:0::2;;7404:18:1::0;;;7397:45;;;57761:47:0;;57579:62;;-1:-1:-1;57670:22:0;;57723:27;;-1:-1:-1;;;;;57761:20:0;::::2;::::0;::::2;::::0;7310:18:1;;;;;57761:47:0;;;;;57652:15;57761:20;:47;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;61194:1;;;57506:310::o:0;58730:400::-;58770:16;58799:26;58842:14;:12;:14::i;:::-;58828:29;;;;;;-1:-1:-1;;;58828:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58828:29:0;-1:-1:-1;58799:58:0;-1:-1:-1;58868:9:0;58909:1;58892:204;58934:10;10159:14;58912:1;:33;58892:204;;48484:4;48508:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48508:16:0;:30;58967:118;;59002:13;59018:10;59026:1;59018:7;:10::i;:::-;59002:26;-1:-1:-1;59002:26:0;59047:9;59057:3;;;;:::i;:::-;;;59047:14;;;;;;-1:-1:-1;;;59047:14:0;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;59047:22:0;;;-1:-1:-1;;;;;59047:22:0;;;;;58967:118;;58947:3;;;;:::i;:::-;;;;58892:204;;;-1:-1:-1;59113:9:0;;-1:-1:-1;;58730:400:0;:::o;44056:360::-;48484:4;48508:16;;;:7;:16;;;;;;44129:13;;-1:-1:-1;;;;;48508:16:0;44155:76;;;;-1:-1:-1;;;44155:76:0;;16945:2:1;44155:76:0;;;16927:21:1;16984:2;16964:18;;;16957:30;17023:34;17003:18;;;16996:62;-1:-1:-1;;;17074:18:1;;;17067:45;17129:19;;44155:76:0;16917:237:1;44155:76:0;44244:21;44268:10;:8;:10::i;:::-;44244:34;;44320:1;44302:7;44296:21;:25;:112;;;;;;;;;;;;;;;;;44361:7;44370:18;:7;:16;:18::i;:::-;44344:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44296:112;44289:119;44056:360;-1:-1:-1;;;44056:360:0:o;56581:101::-;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;56651:15:::1;:23:::0;56581:101::o;58024:379::-;61005:1;60978:23;9000:10;60988:12;8920:98;60978:23;:28;;60970:86;;;;-1:-1:-1;;;60970:86:0;;;;;;;:::i;:::-;58096:20:::1;58106:9;58096;:20::i;:::-;:25:::0;58088:67:::1;;;;-1:-1:-1::0;;;58088:67:0::1;;;;;;;:::i;:::-;9000:10:::0;58175:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;58175:36:0;::::1;::::0;;;;;;;;::::1;;58174:37;58166:87;;;::::0;-1:-1:-1;;;58166:87:0;;16129:2:1;58166:87:0::1;::::0;::::1;16111:21:1::0;16168:2;16148:18;;;16141:30;16207:34;16187:18;;;16180:62;-1:-1:-1;;;16258:18:1;;;16251:35;16303:19;;58166:87:0::1;16101:227:1::0;58166:87:0::1;-1:-1:-1::0;;;;;58264:19:0;::::1;;::::0;;;:8:::1;:19;::::0;;;;:24;;58287:1:::1;::::0;58264:19;:24:::1;::::0;58287:1;;58264:24:::1;:::i;:::-;::::0;;;-1:-1:-1;;9000:10:0;58299:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;58299:36:0;::::1;::::0;;;;;;;;:43;;-1:-1:-1;;58299:43:0::1;58338:4;58299:43;::::0;;58358:37;58299:36;;58358:37:::1;::::0;::::1;58024:379:::0;:::o;58411:311::-;58454:23;9000:10;58464:12;8920:98;58454:23;:28;58446:67;;;;-1:-1:-1;;;58446:67:0;;19008:2:1;58446:67:0;;;18990:21:1;19047:2;19027:18;;;19020:30;19086:28;19066:18;;;19059:56;19132:18;;58446:67:0;18980:176:1;58446:67:0;58572:15;;9000:10;58546:22;;;;:8;:22;;;;;;:41;;58524:129;;;;-1:-1:-1;;;58524:129:0;;13405:2:1;58524:129:0;;;13387:21:1;13444:2;13424:18;;;13417:30;13483:34;13463:18;;;13456:62;-1:-1:-1;;;13534:18:1;;;13527:36;13580:19;;58524:129:0;13377:228:1;58524:129:0;58664:50;9000:10;198:1;58664:12;:50::i;:::-;58411:311::o;59853:109::-;59900:7;59927:27;59944:9;10159:14;;10067:114;35499:244;34618:6;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35588:22:0;::::1;35580:73;;;::::0;-1:-1:-1;;;35580:73:0;;9510:2:1;35580:73:0::1;::::0;::::1;9492:21:1::0;9549:2;9529:18;;;9522:30;9588:34;9568:18;;;9561:62;-1:-1:-1;;;9639:18:1;;;9632:36;9685:19;;35580:73:0::1;9482:228:1::0;35580:73:0::1;35690:6;::::0;35669:38:::1;::::0;-1:-1:-1;;;;;35669:38:0;;::::1;::::0;35690:6:::1;::::0;35669:38:::1;::::0;35690:6:::1;::::0;35669:38:::1;35718:6;:17:::0;;-1:-1:-1;;;;;;35718:17:0::1;-1:-1:-1::0;;;;;35718:17:0;;;::::1;::::0;;;::::1;::::0;;35499:244::o;56690:808::-;34618:6;;56765:13;;-1:-1:-1;;;;;34618:6:0;9000:10;34765:23;34757:68;;;;-1:-1:-1;;;34757:68:0;;;;;;;:::i;:::-;56800:18:::1;:16;:18::i;:::-;56799:19;56791:69;;;::::0;-1:-1:-1;;;56791:69:0;;9917:2:1;56791:69:0::1;::::0;::::1;9899:21:1::0;9956:2;9936:18;;;9929:30;9995:34;9975:18;;;9968:62;-1:-1:-1;;;10046:18:1;;;10039:35;10091:19;;56791:69:0::1;9889:227:1::0;56791:69:0::1;56894:3;56879:12;:18;56871:63;;;::::0;-1:-1:-1;;;56871:63:0;;14633:2:1;56871:63:0::1;::::0;::::1;14615:21:1::0;;;14652:18;;;14645:30;14711:34;14691:18;;;14684:62;14763:18;;56871:63:0::1;14605:182:1::0;56871:63:0::1;56947:25;56975:34;;;;;;;;:::i;:::-;-1:-1:-1::0;;56975:34:0;;;;;;;::::1;::::0;;::::1;;;::::0;;;::::1;57075:23:::0;::::1;19877:25:1::0;;;19918:18;;19911:34;;;56975::0;;-1:-1:-1;57020:21:0::1;::::0;56975:34;;19850:18:1;;57075:23:0::1;::::0;;-1:-1:-1;;57075:23:0;;::::1;::::0;;;;;;;57044:55:::1;::::0;;57075:23:::1;57044:55;;:::i;:::-;;;;;;;;;;;;;57020:79;;57112:29;57131:9;10278:19:::0;;10296:1;10278:19;;;10189:127;57112:29:::1;57152:15;57170:27;57187:9;10159:14:::0;;10067:114;57170:27:::1;57152:45;;57208:12;57250:6;:4;:6::i;:::-;57258:8;:6;:8::i;:::-;57268:7;57233:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57223:54;;;;;;57208:69;;57368:4;57357:8;57351:15;57346:2;57336:8;57332:17;57329:1;57321:52;57394:16;::::0;;;:7:::1;:16;::::0;;;;;;;;:24;;-1:-1:-1;;;;;;57394:24:0::1;-1:-1:-1::0;;;;;57394:24:0;::::1;::::0;;::::1;::::0;;;57434:33;;7062:51:1;;;7129:18;;;7122:34;;;57394:24:0;;-1:-1:-1;57394:16:0;;57434:33:::1;::::0;7035:18:1;57434:33:0::1;;;;;;;57478:12;;;;56690:808:::0;;;;:::o;52303:174::-;52378:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;52378:29:0;-1:-1:-1;;;;;52378:29:0;;;;;;;;:24;;52432:23;52378:24;52432:14;:23::i;:::-;-1:-1:-1;;;;;52423:46:0;;;;;;;;;;;52303:174;;:::o;60079:196::-;60130:4;60147:15;60165:27;60182:9;10159:14;;10067:114;60165:27;60147:45;;60220:1;60210:7;:11;:57;;;;-1:-1:-1;60242:16:0;;;;:7;:16;;;;;;;;;;60226:41;;-1:-1:-1;;;60226:41:0;;;;-1:-1:-1;;;;;60242:16:0;;;;60226:39;;:41;;;;;60242:16;;60226:41;;;;;60242:16;60226:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60225:42;60210:57;60203:64;;;60079:196;:::o;48713:355::-;48806:4;48508:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48508:16:0;48823:73;;;;-1:-1:-1;;;48823:73:0;;11439:2:1;48823:73:0;;;11421:21:1;11478:2;11458:18;;;11451:30;11517:34;11497:18;;;11490:62;-1:-1:-1;;;11568:18:1;;;11561:42;11620:19;;48823:73:0;11411:234:1;48823:73:0;48907:13;48923:23;48938:7;48923:14;:23::i;:::-;48907:39;;48976:5;-1:-1:-1;;;;;48965:16:0;:7;-1:-1:-1;;;;;48965:16:0;;:51;;;;49009:7;-1:-1:-1;;;;;48985:31:0;:20;48997:7;48985:11;:20::i;:::-;-1:-1:-1;;;;;48985:31:0;;48965:51;:94;;;-1:-1:-1;;;;;;45959:25:0;;;45935:4;45959:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;49020:39;48957:103;48713:355;-1:-1:-1;;;;48713:355:0:o;51641:544::-;51766:4;-1:-1:-1;;;;;51739:31:0;:23;51754:7;51739:14;:23::i;:::-;-1:-1:-1;;;;;51739:31:0;;51731:85;;;;-1:-1:-1;;;51731:85:0;;16535:2:1;51731:85:0;;;16517:21:1;16574:2;16554:18;;;16547:30;16613:34;16593:18;;;16586:62;-1:-1:-1;;;16664:18:1;;;16657:39;16713:19;;51731:85:0;16507:231:1;51731:85:0;-1:-1:-1;;;;;51835:16:0;;51827:65;;;;-1:-1:-1;;;51827:65:0;;10680:2:1;51827:65:0;;;10662:21:1;10719:2;10699:18;;;10692:30;10758:34;10738:18;;;10731:62;-1:-1:-1;;;10809:18:1;;;10802:34;10853:19;;51827:65:0;10652:226:1;51827:65:0;51905:39;51926:4;51932:2;51936:7;51905:20;:39::i;:::-;52009:29;52026:1;52030:7;52009:8;:29::i;:::-;-1:-1:-1;;;;;52051:15:0;;;;;;:9;:15;;;;;:20;;52070:1;;52051:15;:20;;52070:1;;52051:20;:::i;:::-;;;;-1:-1:-1;;;;;;;52082:13:0;;;;;;:9;:13;;;;;:18;;52099:1;;52082:13;:18;;52099:1;;52082:18;:::i;:::-;;;;-1:-1:-1;;52111:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;52111:21:0;-1:-1:-1;;;;;52111:21:0;;;;;;;;;52150:27;;52111:16;;52150:27;;;;;;;51641:544;;;:::o;60283:389::-;60363:30;60382:10;10278:19;;10296:1;10278:19;;;10189:127;60363:30;60404:15;60422:28;60439:10;10159:14;;10067:114;60422:28;60404:46;;60461:25;60467:9;60478:7;60461:5;:25::i;:::-;60497:27;;;;:18;:27;;;;;;;;:41;;-1:-1:-1;;60497:41:0;;;;;;;;;;-1:-1:-1;;;;;60549:19:0;;;;;:8;:19;;;;;:29;;;60589:8;:19;;;;;:23;;;;60628:36;;20098::1;;;60628::0;;20071:18:1;60628:36:0;;;;;;;60283:389;;;:::o;60680:248::-;-1:-1:-1;;;;;60760:19:0;;60742:15;60760:19;;;:8;:19;;;;;;60790:14;60760:19;60790:5;:14::i;:::-;60845:1;60815:27;;;:18;:27;;;;;;;;:31;;-1:-1:-1;;60815:31:0;;;-1:-1:-1;;;;;60857:19:0;;;;;:8;:19;;;;;;:23;;;60896:24;60857:19;;60896:24;;;60680:248;;:::o;47834:272::-;47948:28;47958:4;47964:2;47968:7;47948:9;:28::i;:::-;47995:48;48018:4;48024:2;48028:7;48037:5;47995:22;:48::i;:::-;47987:111;;;;-1:-1:-1;;;47987:111:0;;;;;;;:::i;61360:97::-;61412:13;61445:4;61438:11;;;;;:::i;15345:723::-;15401:13;15622:10;15618:53;;-1:-1:-1;15649:10:0;;;;;;;;;;;;-1:-1:-1;;;15649:10:0;;;;;;15618:53;15696:5;15681:12;15737:78;15744:9;;15737:78;;15770:8;;;;:::i;:::-;;-1:-1:-1;15793:10:0;;-1:-1:-1;15801:2:0;15793:10;;:::i;:::-;;;15737:78;;;15825:19;15857:6;15847:17;;;;;;-1:-1:-1;;;15847:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15847:17:0;;15825:39;;15875:154;15882:10;;15875:154;;15909:11;15919:1;15909:11;;:::i;:::-;;-1:-1:-1;15978:10:0;15986:2;15978:5;:10;:::i;:::-;15965:24;;:2;:24;:::i;:::-;15952:39;;15935:6;15942;15935:14;;;;;;-1:-1:-1;;;15935:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;15935:56:0;;;;;;;;-1:-1:-1;16006:11:0;16015:2;16006:11;;:::i;:::-;;;15875:154;;61465:621;-1:-1:-1;;;;;61632:23:0;;;;:52;;;61659:20;61669:9;61659;:20::i;:::-;:25;61632:52;61610:131;;;;-1:-1:-1;;;61610:131:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;61774:23:0;;;;:65;;-1:-1:-1;61824:15:0;;-1:-1:-1;;;;;61801:19:0;;;;;;:8;:19;;;;;;:38;;61774:65;61752:156;;;;-1:-1:-1;;;61752:156:0;;18598:2:1;61752:156:0;;;18580:21:1;18637:2;18617:18;;;18610:30;18676:34;18656:18;;;18649:62;-1:-1:-1;;;18727:18:1;;;18720:39;18776:19;;61752:156:0;18570:231:1;61752:156:0;-1:-1:-1;;;;;61919:16:0;;;61938:1;61919:16;;;:8;:16;;;;;;:20;;;61950:19;;;;;;;;;:29;;;61990:89;;62034:33;62053:13;10278:19;;10296:1;10278:19;;;10189:127;50333:382;-1:-1:-1;;;;;50413:16:0;;50405:61;;;;-1:-1:-1;;;50405:61:0;;14994:2:1;50405:61:0;;;14976:21:1;;;15013:18;;;15006:30;15072:34;15052:18;;;15045:62;15124:18;;50405:61:0;14966:182:1;50405:61:0;48484:4;48508:16;;;:7;:16;;;;;;-1:-1:-1;;;;;48508:16:0;:30;50477:58;;;;-1:-1:-1;;;50477:58:0;;10323:2:1;50477:58:0;;;10305:21:1;10362:2;10342:18;;;10335:30;10401;10381:18;;;10374:58;10449:18;;50477:58:0;10295:178:1;50477:58:0;50548:45;50577:1;50581:2;50585:7;50548:20;:45::i;:::-;-1:-1:-1;;;;;50606:13:0;;;;;;:9;:13;;;;;:18;;50623:1;;50606:13;:18;;50623:1;;50606:18;:::i;:::-;;;;-1:-1:-1;;50635:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;50635:21:0;-1:-1:-1;;;;;50635:21:0;;;;;;;;50674:33;;50635:16;;;50674:33;;50635:16;;50674:33;50333:382;;:::o;50944:360::-;51004:13;51020:23;51035:7;51020:14;:23::i;:::-;51004:39;;51056:48;51077:5;51092:1;51096:7;51056:20;:48::i;:::-;51145:29;51162:1;51166:7;51145:8;:29::i;:::-;-1:-1:-1;;;;;51187:16:0;;;;;;:9;:16;;;;;:21;;51207:1;;51187:16;:21;;51207:1;;51187:21;:::i;:::-;;;;-1:-1:-1;;51226:16:0;;;;:7;:16;;;;;;51219:23;;-1:-1:-1;;;;;;51219:23:0;;;51260:36;51234:7;;51226:16;-1:-1:-1;;;;;51260:36:0;;;;;51226:16;;51260:36;50944:360;;:::o;53042:843::-;53163:4;-1:-1:-1;;;;;53189:13:0;;1422:20;1461:8;53185:693;;53225:72;;-1:-1:-1;;;53225:72:0;;-1:-1:-1;;;;;53225:36:0;;;;;:72;;9000:10;;53276:4;;53282:7;;53291:5;;53225:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53225:72:0;;;;;;;;-1:-1:-1;;53225:72:0;;;;;;;;;;;;:::i;:::-;;;53221:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53471:13:0;;53467:341;;53514:60;;-1:-1:-1;;;53514:60:0;;;;;;;:::i;53467:341::-;53758:6;53752:13;53743:6;53739:2;53735:15;53728:38;53221:602;-1:-1:-1;;;;;;53348:55:0;-1:-1:-1;;;53348:55:0;;-1:-1:-1;53341:62:0;;53185:693;-1:-1:-1;53862:4:0;53042:843;;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;;;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;;;;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:1183::-;;;;;1183:3;1171:9;1162:7;1158:23;1154:33;1151:2;;;1205:6;1197;1190:22;1151:2;1233:29;1252:9;1233:29;:::i;:::-;1223:39;;1281:38;1315:2;1304:9;1300:18;1281:38;:::i;:::-;1271:48;;1366:2;1355:9;1351:18;1338:32;1328:42;;1421:2;1410:9;1406:18;1393:32;1444:18;1485:2;1477:6;1474:14;1471:2;;;1506:6;1498;1491:22;1471:2;1549:6;1538:9;1534:22;1524:32;;1594:7;1587:4;1583:2;1579:13;1575:27;1565:2;;1621:6;1613;1606:22;1565:2;1662;1649:16;1684:2;1680;1677:10;1674:2;;;1690:18;;:::i;:::-;1765:2;1759:9;1733:2;1819:13;;-1:-1:-1;;1815:22:1;;;1839:2;1811:31;1807:40;1795:53;;;1863:18;;;1883:22;;;1860:46;1857:2;;;1909:18;;:::i;:::-;1949:10;1945:2;1938:22;1984:2;1976:6;1969:18;2024:7;2019:2;2014;2010;2006:11;2002:20;1999:33;1996:2;;;2050:6;2042;2035:22;1996:2;2111;2106;2102;2098:11;2093:2;2085:6;2081:15;2068:46;2134:15;;;2151:2;2130:24;2123:40;;;;1141:1053;;;;-1:-1:-1;1141:1053:1;;-1:-1:-1;;;;1141:1053:1:o;2199:325::-;;;2325:2;2313:9;2304:7;2300:23;2296:32;2293:2;;;2346:6;2338;2331:22;2293:2;2374:29;2393:9;2374:29;:::i;:::-;2364:39;;2453:2;2442:9;2438:18;2425:32;2466:28;2488:5;2466:28;:::i;:::-;2513:5;2503:15;;;2283:241;;;;;:::o;2529:264::-;;;2658:2;2646:9;2637:7;2633:23;2629:32;2626:2;;;2679:6;2671;2664:22;2626:2;2707:29;2726:9;2707:29;:::i;:::-;2697:39;2783:2;2768:18;;;;2755:32;;-1:-1:-1;;;2616:177:1:o;2798:363::-;;;2925:2;2913:9;2904:7;2900:23;2896:32;2893:2;;;2946:6;2938;2931:22;2893:2;2974:29;2993:9;2974:29;:::i;:::-;2964:39;;3053:2;3042:9;3038:18;3025:32;3097:4;3090:5;3086:16;3079:5;3076:27;3066:2;;3122:6;3114;3107:22;3166:255;;3286:2;3274:9;3265:7;3261:23;3257:32;3254:2;;;3307:6;3299;3292:22;3254:2;3344:9;3338:16;3363:28;3385:5;3363:28;:::i;3426:255::-;;3537:2;3525:9;3516:7;3512:23;3508:32;3505:2;;;3558:6;3550;3543:22;3505:2;3602:9;3589:23;3621:30;3645:5;3621:30;:::i;3686:259::-;;3808:2;3796:9;3787:7;3783:23;3779:32;3776:2;;;3829:6;3821;3814:22;3776:2;3866:9;3860:16;3885:30;3909:5;3885:30;:::i;3950:190::-;;4062:2;4050:9;4041:7;4037:23;4033:32;4030:2;;;4083:6;4075;4068:22;4030:2;-1:-1:-1;4111:23:1;;4020:120;-1:-1:-1;4020:120:1:o;4145:258::-;;;4274:2;4262:9;4253:7;4249:23;4245:32;4242:2;;;4295:6;4287;4280:22;4242:2;-1:-1:-1;;4323:23:1;;;4393:2;4378:18;;;4365:32;;-1:-1:-1;4232:171:1:o;4408:257::-;;4487:5;4481:12;4514:6;4509:3;4502:19;4530:63;4586:6;4579:4;4574:3;4570:14;4563:4;4556:5;4552:16;4530:63;:::i;:::-;4647:2;4626:15;-1:-1:-1;;4622:29:1;4613:39;;;;4654:4;4609:50;;4457:208;-1:-1:-1;;4457:208:1:o;4670:466::-;;4883:6;4877:13;4899:53;4945:6;4940:3;4933:4;4925:6;4921:17;4899:53;:::i;:::-;5015:13;;4974:16;;;;5037:57;5015:13;4974:16;5071:4;5059:17;;5037:57;:::i;:::-;5110:20;;4853:283;-1:-1:-1;;;;4853:283:1:o;5616:566::-;;5861:6;5855:13;5877:53;5923:6;5918:3;5911:4;5903:6;5899:17;5877:53;:::i;:::-;5993:13;;5952:16;;;;6015:57;5993:13;5952:16;6049:4;6037:17;;6015:57;:::i;:::-;6094:20;6123:21;;;-1:-1:-1;;6171:4:1;6160:16;;5831:351;-1:-1:-1;;5831:351:1:o;6395:488::-;-1:-1:-1;;;;;6664:15:1;;;6646:34;;6716:15;;6711:2;6696:18;;6689:43;6763:2;6748:18;;6741:34;;;6811:3;6806:2;6791:18;;6784:31;;;6395:488;;6832:45;;6857:19;;6849:6;6832:45;:::i;:::-;6824:53;6598:285;-1:-1:-1;;;;;;6598:285:1:o;7453:661::-;7624:2;7676:21;;;7746:13;;7649:18;;;7768:22;;;7453:661;;7624:2;7847:15;;;;7821:2;7806:18;;;7453:661;7893:195;7907:6;7904:1;7901:13;7893:195;;;7972:13;;-1:-1:-1;;;;;7968:39:1;7956:52;;8063:15;;;;8028:12;;;;8004:1;7922:9;7893:195;;;-1:-1:-1;8105:3:1;;7604:510;-1:-1:-1;;;;;;7604:510:1:o;8311:219::-;;8460:2;8449:9;8442:21;8480:44;8520:2;8509:9;8505:18;8497:6;8480:44;:::i;8535:414::-;8737:2;8719:21;;;8776:2;8756:18;;;8749:30;8815:34;8810:2;8795:18;;8788:62;-1:-1:-1;;;8881:2:1;8866:18;;8859:48;8939:3;8924:19;;8709:240::o;12006:353::-;12208:2;12190:21;;;12247:2;12227:18;;;12220:30;12286:31;12281:2;12266:18;;12259:59;12350:2;12335:18;;12180:179::o;12364:409::-;12566:2;12548:21;;;12605:2;12585:18;;;12578:30;12644:34;12639:2;12624:18;;12617:62;-1:-1:-1;;;12710:2:1;12695:18;;12688:43;12763:3;12748:19;;12538:235::o;15566:356::-;15768:2;15750:21;;;15787:18;;;15780:30;15846:34;15841:2;15826:18;;15819:62;15913:2;15898:18;;15740:182::o;17978:413::-;18180:2;18162:21;;;18219:2;18199:18;;;18192:30;18258:34;18253:2;18238:18;;18231:62;-1:-1:-1;;;18324:2:1;18309:18;;18302:47;18381:3;18366:19;;18152:239::o;20145:128::-;;20216:1;20212:6;20209:1;20206:13;20203:2;;;20222:18;;:::i;:::-;-1:-1:-1;20258:9:1;;20193:80::o;20278:120::-;;20344:1;20334:2;;20349:18;;:::i;:::-;-1:-1:-1;20383:9:1;;20324:74::o;20403:125::-;;20471:1;20468;20465:8;20462:2;;;20476:18;;:::i;:::-;-1:-1:-1;20513:9:1;;20452:76::o;20533:258::-;20605:1;20615:113;20629:6;20626:1;20623:13;20615:113;;;20705:11;;;20699:18;20686:11;;;20679:39;20651:2;20644:10;20615:113;;;20746:6;20743:1;20740:13;20737:2;;;-1:-1:-1;;20781:1:1;20763:16;;20756:27;20586:205::o;20796:380::-;20881:1;20871:12;;20928:1;20918:12;;;20939:2;;20993:4;20985:6;20981:17;20971:27;;20939:2;21046;21038:6;21035:14;21015:18;21012:38;21009:2;;;21092:10;21087:3;21083:20;21080:1;21073:31;21127:4;21124:1;21117:15;21155:4;21152:1;21145:15;21009:2;;20851:325;;;:::o;21181:135::-;;-1:-1:-1;;21241:17:1;;21238:2;;;21261:18;;:::i;:::-;-1:-1:-1;21308:1:1;21297:13;;21228:88::o;21321:112::-;;21379:1;21369:2;;21384:18;;:::i;:::-;-1:-1:-1;21418:9:1;;21359:74::o;21438:127::-;21499:10;21494:3;21490:20;21487:1;21480:31;21530:4;21527:1;21520:15;21554:4;21551:1;21544:15;21570:127;21631:10;21626:3;21622:20;21619:1;21612:31;21662:4;21659:1;21652:15;21686:4;21683:1;21676:15;21702:127;21763:10;21758:3;21754:20;21751:1;21744:31;21794:4;21791:1;21784:15;21818:4;21815:1;21808:15;21834:118;21920:5;21913:13;21906:21;21899:5;21896:32;21886:2;;21942:1;21939;21932:12;21957:131;-1:-1:-1;;;;;;22031:32:1;;22021:43;;22011:2;;22078:1;22075;22068:12
Swarm Source
ipfs://798f67e5d128ec1603a2cb08402d73134bf54afe41c3ac31def6354ab96400e1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.