Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
2,734,631.360268 CD
Holders:
23,107 addresses
Contract:
Decimals:
18
Balance
0.020913065843621399 CDValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CreditDAOToken
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at PolygonScan.com on 2022-11-21 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(account), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: CreditDAOToken.sol pragma solidity ^0.8.0; contract CreditDAOToken is AccessControl,IERC20 { using SafeMath for uint256; using Math for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "Credit DAO Token"; string private _symbol = "CD"; uint8 private _decimals = 18; bool public once; mapping (address => bool) public operators; mapping (address => bool) public isFromDelivers; mapping (address => bool) public isToDelivers; address public dividend; address public management; address public foundation; address public dead = 0x000000000000000000000000000000000000dEaD; uint256[3] public pcts = [50, 20, 20]; uint256 public DURATION; uint256 public startTime; mapping (uint256 => uint256) public _fees; uint256 public maxTotalSupply = 1e8 * 1e18; constructor (uint256 _startTime, uint256 duration, address team) { _mint(team, 100 * 1e4 * 1e18); isFromDelivers[team] = true; _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); DURATION = duration; startTime = _startTime; } function grantOperatorRole(address[2] memory accounts) public onlyRole(DEFAULT_ADMIN_ROLE) { require(!once, 'Only once!'); operators[accounts[0]] = true; operators[accounts[1]] = true; once = true; } function setFromDelivers(address[] memory addrs, bool flag) public onlyRole(DEFAULT_ADMIN_ROLE) { for(uint i;i<addrs.length;i++){ isFromDelivers[addrs[i]] = flag; } } function setToDelivers(address[] memory addrs, bool flag) public onlyRole(DEFAULT_ADMIN_ROLE) { for(uint i;i<addrs.length;i++){ isToDelivers[addrs[i]] = flag; } } function setAddress(address _dividend, address _management, address _foundation, address[] memory pools) public onlyRole(DEFAULT_ADMIN_ROLE) { dividend = _dividend; management = _management; foundation = _foundation; for(uint i;i<pools.length;i++){ isFromDelivers[pools[i]] = true; isToDelivers[pools[i]] = true; } } function mint(address to, uint256 amount) public { require(operators[msg.sender], 'No permission!'); require(_totalSupply.add(amount)<=maxTotalSupply, 'Can\'t mint more!'); _mint(to, amount); } function getCurrentIndex() public view returns(uint256){ (,uint256 time) = block.timestamp.trySub(startTime); return time.div(DURATION); } function getFeeListLatest(uint256 length) public view returns(uint256[] memory indexes, uint256[] memory fees){ return getFeeList(getCurrentIndex(), length); } function getFeeList(uint256 startReverse, uint256 length) public view returns(uint256[] memory indexes, uint256[] memory fees){ uint256 currentIndex = getCurrentIndex(); startReverse = currentIndex.min(startReverse); length = startReverse.min(length); indexes = new uint256[](length); fees = new uint256[](length); uint256 index; for(uint i;i<length;i++){ index = startReverse.sub(i); indexes[i] = index; fees[i] = _fees[index]; } } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } 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"); if(isFromDelivers[sender] || isToDelivers[recipient]){ _basicTransfer(sender, recipient, amount); }else{ uint256 fee = amount.mul(30).div(130); uint256 fee1 = fee.mul(pcts[0]).div(100); _basicTransfer(sender, dividend, fee1); uint256 fee2 = fee.mul(pcts[1]).div(100); _basicTransfer(sender, management, fee2); uint256 fee3 = fee.mul(pcts[2]).div(100); _basicTransfer(sender, foundation, fee3); _basicTransfer(sender, dead, fee.sub(fee1).sub(fee2).sub(fee3)); uint256 index = getCurrentIndex(); _fees[index] += fee; amount = amount.sub(fee); _basicTransfer(sender, recipient, amount); } } function _basicTransfer(address sender, address recipient, uint256 amount) internal virtual { _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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); } function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"address","name":"team","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividend","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startReverse","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getFeeList","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getFeeListLatest","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[2]","name":"accounts","type":"address[2]"}],"name":"grantOperatorRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFromDelivers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isToDelivers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"management","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"once","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pcts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dividend","type":"address"},{"internalType":"address","name":"_management","type":"address"},{"internalType":"address","name":"_foundation","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setFromDelivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setToDelivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052601060808190526f21b932b234ba102220a7902a37b5b2b760811b60a090815262000033916004919062000301565b506040805180820190915260028082526110d160f21b60209092019182526200005f9160059162000301565b506006805460ff19166012179055600d80546001600160a01b03191661dead179055604080516060810182526032815260146020820181905291810191909152620000af90600e90600362000390565b506a52b7d2dcc80cd2e4000000601455348015620000cc57600080fd5b506040516200211538038062002115833981016040819052620000ef91620003dd565b620001058169d3c21bcecceda100000062000141565b6001600160a01b0381166000908152600860205260408120805460ff191660011790556200013490336200024b565b5060115560125562000489565b6001600160a01b0382166200019c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b620001b881600354620002ec60201b62000d821790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620001ed91839062000d82620002ec821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200023f9085815260200190565b60405180910390a35050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620002e8576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002a73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002fa828462000425565b9392505050565b8280546200030f906200044c565b90600052602060002090601f0160209004810192826200033357600085556200037e565b82601f106200034e57805160ff19168380011785556200037e565b828001600101855582156200037e579182015b828111156200037e57825182559160200191906001019062000361565b506200038c929150620003c6565b5090565b82600381019282156200037e579160200282015b828111156200037e578251829060ff16905591602001919060010190620003a4565b5b808211156200038c5760008155600101620003c7565b600080600060608486031215620003f357600080fd5b83516020850151604086015191945092506001600160a01b03811681146200041a57600080fd5b809150509250925092565b600082198211156200044757634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200046157607f821691505b602082108114156200048357634e487b7160e01b600052602260045260246000fd5b50919050565b611c7c80620004996000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80633bbf38c71161013b57806391d14854116100b8578063b357081c1161007c578063b357081c14610522578063d547741f14610542578063d946f95d14610555578063dd62ed3e14610568578063eb56eedd146105a157600080fd5b806391d14854146104d957806395d89b41146104ec578063a217fddf146104f4578063a457c2d7146104fc578063a9059cbb1461050f57600080fd5b80635f203033116100ff5780635f2030331461046e57806370a082311461048157806378e97925146104aa57806386c17d4b146104b357806388a8d602146104c657600080fd5b80633bbf38c7146103ff578063407adb291461041257806340c10f191461042557806341fbb050146104385780635af117291461044b57600080fd5b806323b872dd116101c95780632f2ff15d1161018d5780632f2ff15d1461039c578063313ce567146103b157806336568abe146103c657806336cf7c87146103d957806339509351146103ec57600080fd5b806323b872dd14610328578063248a9ca31461033b578063292a3f7e1461035e5780632a0d927b146103705780632ab4d0521461039357600080fd5b80630ff8cf9b116102105780630ff8cf9b146102a8578063116954f4146102d357806313e7c9d8146102f457806318160ddd146103175780631be052891461031f57600080fd5b806301ffc9a71461024257806306fdde031461026a578063095ea7b31461027f5780630d9005ae14610292575b600080fd5b610255610250366004611630565b6105b4565b60405190151581526020015b60405180910390f35b6102726105eb565b6040516102619190611686565b61025561028d3660046116d5565b61067d565b61029a610693565b604051908152602001610261565b600a546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b6102e66102e13660046116ff565b6106c9565b604051610261929190611753565b610255610302366004611781565b60076020526000908152604090205460ff1681565b60035461029a565b61029a60115481565b61025561033636600461179c565b6106e6565b61029a6103493660046116ff565b60009081526020819052604090206001015490565b60065461025590610100900460ff1681565b61025561037e366004611781565b60086020526000908152604090205460ff1681565b61029a60145481565b6103af6103aa3660046117d8565b61074f565b005b60065460405160ff9091168152602001610261565b6103af6103d43660046117d8565b610779565b600d546102bb906001600160a01b031681565b6102556103fa3660046116d5565b6107fc565b6103af61040d3660046118bc565b610832565b61029a6104203660046116ff565b610941565b6103af6104333660046116d5565b610958565b600c546102bb906001600160a01b031681565b610255610459366004611781565b60096020526000908152604090205460ff1681565b6103af61047c36600461192b565b610a03565b61029a61048f366004611781565b6001600160a01b031660009081526001602052604090205490565b61029a60125481565b6103af6104c136600461192b565b610a7b565b600b546102bb906001600160a01b031681565b6102556104e73660046117d8565b610aed565b610272610b16565b61029a600081565b61025561050a3660046116d5565b610b25565b61025561051d3660046116d5565b610b74565b61029a6105303660046116ff565b60136020526000908152604090205481565b6103af6105503660046117d8565b610b81565b6102e6610563366004611982565b610ba6565b61029a6105763660046119a4565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6103af6105af3660046119ce565b610cdb565b60006001600160e01b03198216637965db0b60e01b14806105e557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600480546105fa90611a55565b80601f016020809104026020016040519081016040528092919081815260200182805461062690611a55565b80156106735780601f1061064857610100808354040283529160200191610673565b820191906000526020600020905b81548152906001019060200180831161065657829003601f168201915b5050505050905090565b600061068a338484610d95565b50600192915050565b6000806106ab60125442610eba90919063ffffffff16565b9150506106c360115482610ee090919063ffffffff16565b91505090565b6060806106dd6106d7610693565b84610ba6565b91509150915091565b60006106f3848484610eec565b610745843361074085604051806060016040528060288152602001611bfa602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611133565b610d95565b5060019392505050565b60008281526020819052604090206001015461076a8161115f565b610774838361116c565b505050565b6001600160a01b03811633146107ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107f882826111f0565b5050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161068a9185906107409086610d82565b600061083d8161115f565b600a80546001600160a01b038088166001600160a01b031992831617909255600b8054878416908316179055600c80549286169290911691909117905560005b82518110156109395760016008600085848151811061089e5761089e611a90565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008584815181106108f5576108f5611a90565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061093181611abc565b91505061087d565b505050505050565b600e816003811061095157600080fd5b0154905081565b3360009081526007602052604090205460ff166109a85760405162461bcd60e51b815260206004820152600e60248201526d4e6f207065726d697373696f6e2160901b60448201526064016107e5565b6014546003546109b89083610d82565b11156109f95760405162461bcd60e51b815260206004820152601060248201526f43616e2774206d696e74206d6f72652160801b60448201526064016107e5565b6107f88282611255565b6000610a0e8161115f565b60005b8351811015610a75578260096000868481518110610a3157610a31611a90565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a6d81611abc565b915050610a11565b50505050565b6000610a868161115f565b60005b8351811015610a75578260086000868481518110610aa957610aa9611a90565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ae581611abc565b915050610a89565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600580546105fa90611a55565b600061068a338461074085604051806060016040528060258152602001611c22602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611133565b600061068a338484610eec565b600082815260208190526040902060010154610b9c8161115f565b61077483836111f0565b6060806000610bb3610693565b9050610bbf818661133b565b9450610bcb858561133b565b93508367ffffffffffffffff811115610be657610be6611804565b604051908082528060200260200182016040528015610c0f578160200160208202803683370190505b5092508367ffffffffffffffff811115610c2b57610c2b611804565b604051908082528060200260200182016040528015610c54578160200160208202803683370190505b5091506000805b85811015610cd157610c6d8782611351565b915081858281518110610c8257610c82611a90565b6020026020010181815250506013600083815260200190815260200160002054848281518110610cb457610cb4611a90565b602090810291909101015280610cc981611abc565b915050610c5b565b5050509250929050565b6000610ce68161115f565b600654610100900460ff1615610d2b5760405162461bcd60e51b815260206004820152600a6024820152694f6e6c79206f6e63652160b01b60448201526064016107e5565b5080516001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925592909501519093168252919020805490911690911790556006805461ff001916610100179055565b6000610d8e8284611ad7565b9392505050565b6001600160a01b038316610df75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107e5565b6001600160a01b038216610e585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107e5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60008083831115610ed057506000905080610ed9565b50600190508183035b9250929050565b6000610d8e8284611aef565b6001600160a01b038316610f505760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107e5565b6001600160a01b038216610fb25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107e5565b6001600160a01b03831660009081526008602052604090205460ff1680610ff157506001600160a01b03821660009081526009602052604090205460ff165b156110015761077483838361135d565b6000611019608261101384601e61141d565b90610ee0565b905060006110316064611013600e840154859061141d565b600a5490915061104c9086906001600160a01b03168361135d565b60006110636064611013600e60010154869061141d565b600b5490915061107e9087906001600160a01b03168361135d565b60006110956064611013600e60020154879061141d565b600c549091506110b09088906001600160a01b03168361135d565b600d546110dd9088906001600160a01b03166110d8846110d287818b8b611351565b90611351565b61135d565b60006110e7610693565b90508460136000838152602001908152602001600020600082825461110c9190611ad7565b9091555061111c90508686611351565b955061112988888861135d565b5050505050505050565b600081848411156111575760405162461bcd60e51b81526004016107e59190611686565b505050900390565b6111698133611429565b50565b6111768282610aed565b6107f8576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111fa8282610aed565b156107f8576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166112ab5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107e5565b6003546112b89082610d82565b6003556001600160a01b0382166000908152600160205260409020546112de9082610d82565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061132f9085815260200190565b60405180910390a35050565b600081831061134a5781610d8e565b5090919050565b6000610d8e8284611b11565b61139a81604051806060016040528060268152602001611bd4602691396001600160a01b0386166000908152600160205260409020549190611133565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546113c99082610d82565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ead9085815260200190565b6000610d8e8284611b28565b6114338282610aed565b6107f85761144081611482565b61144b836020611494565b60405160200161145c929190611b47565b60408051601f198184030181529082905262461bcd60e51b82526107e591600401611686565b60606105e56001600160a01b03831660145b606060006114a3836002611b28565b6114ae906002611ad7565b67ffffffffffffffff8111156114c6576114c6611804565b6040519080825280601f01601f1916602001820160405280156114f0576020820181803683370190505b509050600360fc1b8160008151811061150b5761150b611a90565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061153a5761153a611a90565b60200101906001600160f81b031916908160001a905350600061155e846002611b28565b611569906001611ad7565b90505b60018111156115e1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061159d5761159d611a90565b1a60f81b8282815181106115b3576115b3611a90565b60200101906001600160f81b031916908160001a90535060049490941c936115da81611bbc565b905061156c565b508315610d8e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e5565b60006020828403121561164257600080fd5b81356001600160e01b031981168114610d8e57600080fd5b60005b8381101561167557818101518382015260200161165d565b83811115610a755750506000910152565b60208152600082518060208401526116a581604085016020870161165a565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b6116f1836116b9565b946020939093013593505050565b60006020828403121561171157600080fd5b5035919050565b600081518084526020808501945080840160005b838110156117485781518752958201959082019060010161172c565b509495945050505050565b6040815260006117666040830185611718565b82810360208401526117788185611718565b95945050505050565b60006020828403121561179357600080fd5b610d8e826116b9565b6000806000606084860312156117b157600080fd5b6117ba846116b9565b92506117c8602085016116b9565b9150604084013590509250925092565b600080604083850312156117eb57600080fd5b823591506117fb602084016116b9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261182b57600080fd5b8135602067ffffffffffffffff8083111561184857611848611804565b8260051b604051601f19603f8301168101818110848211171561186d5761186d611804565b60405293845285810183019383810192508785111561188b57600080fd5b83870191505b848210156118b1576118a2826116b9565b83529183019190830190611891565b979650505050505050565b600080600080608085870312156118d257600080fd5b6118db856116b9565b93506118e9602086016116b9565b92506118f7604086016116b9565b9150606085013567ffffffffffffffff81111561191357600080fd5b61191f8782880161181a565b91505092959194509250565b6000806040838503121561193e57600080fd5b823567ffffffffffffffff81111561195557600080fd5b6119618582860161181a565b9250506020830135801515811461197757600080fd5b809150509250929050565b6000806040838503121561199557600080fd5b50508035926020909101359150565b600080604083850312156119b757600080fd5b6119c0836116b9565b91506117fb602084016116b9565b6000604082840312156119e057600080fd5b82601f8301126119ef57600080fd5b6040516040810181811067ffffffffffffffff82111715611a1257611a12611804565b8060405250806040840185811115611a2957600080fd5b845b81811015611a4a57611a3c816116b9565b835260209283019201611a2b565b509195945050505050565b600181811c90821680611a6957607f821691505b60208210811415611a8a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611ad057611ad0611aa6565b5060010190565b60008219821115611aea57611aea611aa6565b500190565b600082611b0c57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611b2357611b23611aa6565b500390565b6000816000190483118215151615611b4257611b42611aa6565b500290565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611b7f81601785016020880161165a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611bb081602884016020880161165a565b01602801949350505050565b600081611bcb57611bcb611aa6565b50600019019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f13c50a10002dcca961be918d134e074e348efcd870d80a703f75567557a9b764736f6c6343000809003300000000000000000000000000000000000000000000000000000000637266000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000afdc3f95787bced23d6d2f105c0a9aaebdeeb30b
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000637266000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000afdc3f95787bced23d6d2f105c0a9aaebdeeb30b
-----Decoded View---------------
Arg [0] : _startTime (uint256): 1668441600
Arg [1] : duration (uint256): 86400
Arg [2] : team (address): 0xafdc3f95787bced23d6d2f105c0a9aaebdeeb30b
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000063726600
Arg [1] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [2] : 000000000000000000000000afdc3f95787bced23d6d2f105c0a9aaebdeeb30b
Deployed ByteCode Sourcemap
42162:8146:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33725:204;;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;33725:204:0;;;;;;;;45597:91;;;:::i;:::-;;;;;;;:::i;46489:167::-;;;;;;:::i;:::-;;:::i;44687:161::-;;;:::i;:::-;;;1731:25:1;;;1719:2;1704:18;44687:161:0;1585:177:1;42744:23:0;;;;;-1:-1:-1;;;;;42744:23:0;;;;;;-1:-1:-1;;;;;1931:32:1;;;1913:51;;1901:2;1886:18;42744:23:0;1767:203:1;44856:173:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42589:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;45898:108;45986:12;;45898:108;;42953:23;;;;;;46668:317;;;;;;:::i;:::-;;:::i;35548:131::-;;;;;;:::i;:::-;35622:7;35649:12;;;;;;;;;;:22;;;;35548:131;42566:16;;;;;;;;;;;;42638:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43064:42;;;;;;35989:147;;;;;;:::i;:::-;;:::i;:::-;;45799:91;45873:9;;45799:91;;45873:9;;;;4362:36:1;;4350:2;4335:18;45799:91:0;4220:184:1;37133:218:0;;;;;;:::i;:::-;;:::i;42838:64::-;;;;;-1:-1:-1;;;;;42838:64:0;;;46993:214;;;;;;:::i;:::-;;:::i;44054:392::-;;;;;;:::i;:::-;;:::i;42909:37::-;;;;;;:::i;:::-;;:::i;44454:225::-;;;;;;:::i;:::-;;:::i;42806:25::-;;;;;-1:-1:-1;;;;;42806:25:0;;;42692:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43848:198;;;;;;:::i;:::-;;:::i;46014:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;46115:18:0;46088:7;46115:18;;;:9;:18;;;;;;;46014:127;42983:24;;;;;;43638:202;;;;;;:::i;:::-;;:::i;42774:25::-;;;;;-1:-1:-1;;;;;42774:25:0;;;34021:147;;;;;;:::i;:::-;;:::i;45696:95::-;;;:::i;33126:49::-;;33171:4;33126:49;;47215:265;;;;;;:::i;:::-;;:::i;46149:173::-;;;;;;:::i;:::-;;:::i;43014:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;36429:149;;;;;;:::i;:::-;;:::i;45041:548::-;;;;;;:::i;:::-;;:::i;46330:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;46446:18:0;;;46419:7;46446:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;46330:151;43390:240;;;;;;:::i;:::-;;:::i;33725:204::-;33810:4;-1:-1:-1;;;;;;33834:47:0;;-1:-1:-1;;;33834:47:0;;:87;;-1:-1:-1;;;;;;;;;;1891:40:0;;;33885:36;33827:94;33725:204;-1:-1:-1;;33725:204:0:o;45597:91::-;45642:13;45675:5;45668:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45597:91;:::o;46489:167::-;46572:4;46589:37;46598:10;46610:7;46619:6;46589:8;:37::i;:::-;-1:-1:-1;46644:4:0;46489:167;;;;:::o;44687:161::-;44734:7;44755:12;44771:33;44794:9;;44771:15;:22;;:33;;;;:::i;:::-;44753:51;;;44822:18;44831:8;;44822:4;:8;;:18;;;;:::i;:::-;44815:25;;;44687:161;:::o;44856:173::-;44918:24;44944:21;44984:37;44995:17;:15;:17::i;:::-;45014:6;44984:10;:37::i;:::-;44977:44;;;;44856:173;;;:::o;46668:317::-;46774:4;46791:36;46801:6;46809:9;46820:6;46791:9;:36::i;:::-;46838:117;46847:6;46855:10;46867:87;46903:6;46867:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46867:19:0;;;;;;:11;:19;;;;;;;;46887:10;46867:31;;;;;;;;;:87;:35;:87::i;:::-;46838:8;:117::i;:::-;-1:-1:-1;46973:4:0;46668:317;;;;;:::o;35989:147::-;35622:7;35649:12;;;;;;;;;;:22;;;33617:16;33628:4;33617:10;:16::i;:::-;36103:25:::1;36114:4;36120:7;36103:10;:25::i;:::-;35989:147:::0;;;:::o;37133:218::-;-1:-1:-1;;;;;37229:23:0;;31014:10;37229:23;37221:83;;;;-1:-1:-1;;;37221:83:0;;8418:2:1;37221:83:0;;;8400:21:1;8457:2;8437:18;;;8430:30;8496:34;8476:18;;;8469:62;-1:-1:-1;;;8547:18:1;;;8540:45;8602:19;;37221:83:0;;;;;;;;;37317:26;37329:4;37335:7;37317:11;:26::i;:::-;37133:218;;:::o;46993:214::-;47107:10;47081:4;47128:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;47128:32:0;;;;;;;;;;47081:4;;47098:79;;47119:7;;47128:48;;47165:10;47128:36;:48::i;44054:392::-;33171:4;33617:16;33171:4;33617:10;:16::i;:::-;44206:8:::1;:20:::0;;-1:-1:-1;;;;;44206:20:0;;::::1;-1:-1:-1::0;;;;;;44206:20:0;;::::1;;::::0;;;44237:10:::1;:24:::0;;;;::::1;::::0;;::::1;;::::0;;44272:10:::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;44206:8:::1;44307:132;44320:5;:12;44318:1;:14;44307:132;;;44379:4;44352:14;:24;44367:5;44373:1;44367:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44352:24:0::1;-1:-1:-1::0;;;;;44352:24:0::1;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;44423:4;44398:12;:22;44411:5;44417:1;44411:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;44398:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;44398:22:0;:29;;-1:-1:-1;;44398:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44333:3;::::1;::::0;::::1;:::i;:::-;;;;44307:132;;;;44054:392:::0;;;;;:::o;42909:37::-;;;;;;;;;;;;;;;-1:-1:-1;42909:37:0;:::o;44454:225::-;44532:10;44522:21;;;;:9;:21;;;;;;;;44514:48;;;;-1:-1:-1;;;44514:48:0;;9238:2:1;44514:48:0;;;9220:21:1;9277:2;9257:18;;;9250:30;-1:-1:-1;;;9296:18:1;;;9289:44;9350:18;;44514:48:0;9036:338:1;44514:48:0;44607:14;;44581:12;;:24;;44598:6;44581:16;:24::i;:::-;:40;;44573:70;;;;-1:-1:-1;;;44573:70:0;;9581:2:1;44573:70:0;;;9563:21:1;9620:2;9600:18;;;9593:30;-1:-1:-1;;;9639:18:1;;;9632:46;9695:18;;44573:70:0;9379:340:1;44573:70:0;44654:17;44660:2;44664:6;44654:5;:17::i;43848:198::-;33171:4;33617:16;33171:4;33617:10;:16::i;:::-;43957:6:::1;43953:86;43966:5;:12;43964:1;:14;43953:86;;;44023:4;43998:12;:22;44011:5;44017:1;44011:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43998:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43998:22:0;:29;;-1:-1:-1;;43998:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43979:3;::::1;::::0;::::1;:::i;:::-;;;;43953:86;;;;43848:198:::0;;;:::o;43638:202::-;33171:4;33617:16;33171:4;33617:10;:16::i;:::-;43749:6:::1;43745:88;43758:5;:12;43756:1;:14;43745:88;;;43817:4;43790:14;:24;43805:5;43811:1;43805:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43790:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43790:24:0;:31;;-1:-1:-1;;43790:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43771:3;::::1;::::0;::::1;:::i;:::-;;;;43745:88;;34021:147:::0;34107:4;34131:12;;;;;;;;;;;-1:-1:-1;;;;;34131:29:0;;;;;;;;;;;;;;;34021:147::o;45696:95::-;45743:13;45776:7;45769:14;;;;;:::i;47215:265::-;47308:4;47325:125;47334:10;47346:7;47355:94;47392:15;47355:94;;;;;;;;;;;;;;;;;47367:10;47355:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;47355:32:0;;;;;;;;;;;:94;:36;:94::i;46149:173::-;46235:4;46252:40;46262:10;46274:9;46285:6;46252:9;:40::i;36429:149::-;35622:7;35649:12;;;;;;;;;;:22;;;33617:16;33628:4;33617:10;:16::i;:::-;36544:26:::1;36556:4;36562:7;36544:11;:26::i;45041:548::-:0;45119:24;45145:21;45178:20;45201:17;:15;:17::i;:::-;45178:40;-1:-1:-1;45244:30:0;45178:40;45261:12;45244:16;:30::i;:::-;45229:45;-1:-1:-1;45294:24:0;45229:45;45311:6;45294:16;:24::i;:::-;45285:33;;45353:6;45339:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45339:21:0;;45329:31;;45392:6;45378:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45378:21:0;;45371:28;;45410:13;45438:6;45434:148;45447:6;45445:1;:8;45434:148;;;45481:19;:12;45498:1;45481:16;:19::i;:::-;45473:27;;45528:5;45515:7;45523:1;45515:10;;;;;;;;:::i;:::-;;;;;;:18;;;;;45558:5;:12;45564:5;45558:12;;;;;;;;;;;;45548:4;45553:1;45548:7;;;;;;;;:::i;:::-;;;;;;;;;;:22;45454:3;;;;:::i;:::-;;;;45434:148;;;;45167:422;;45041:548;;;;;:::o;43390:240::-;33171:4;33617:16;33171:4;33617:10;:16::i;:::-;43501:4:::1;::::0;::::1;::::0;::::1;;;43500:5;43492:28;;;::::0;-1:-1:-1;;;43492:28:0;;9926:2:1;43492:28:0::1;::::0;::::1;9908:21:1::0;9965:2;9945:18;;;9938:30;-1:-1:-1;;;9984:18:1;;;9977:40;10034:18;;43492:28:0::1;9724:334:1::0;43492:28:0::1;-1:-1:-1::0;43541:11:0;;-1:-1:-1;;;;;43531:22:0;;::::1;;::::0;;;:9:::1;43541:11;43531:22:::0;;;;;;;:29;;-1:-1:-1;;43531:29:0;;::::1;43556:4;43531:29:::0;;::::1;::::0;;;43581:11;;;::::1;::::0;43571:22;;::::1;::::0;;;;;:29;;;;::::1;::::0;;::::1;::::0;;43611:4:::1;:11:::0;;-1:-1:-1;;43611:11:0::1;43571:29;43611:11;::::0;;43390:240::o;23062:98::-;23120:7;23147:5;23151:1;23147;:5;:::i;:::-;23140:12;23062:98;-1:-1:-1;;;23062:98:0:o;49749:346::-;-1:-1:-1;;;;;49851:19:0;;49843:68;;;;-1:-1:-1;;;49843:68:0;;10398:2:1;49843:68:0;;;10380:21:1;10437:2;10417:18;;;10410:30;10476:34;10456:18;;;10449:62;-1:-1:-1;;;10527:18:1;;;10520:34;10571:19;;49843:68:0;10196:400:1;49843:68:0;-1:-1:-1;;;;;49930:21:0;;49922:68;;;;-1:-1:-1;;;49922:68:0;;10803:2:1;49922:68:0;;;10785:21:1;10842:2;10822:18;;;10815:30;10881:34;10861:18;;;10854:62;-1:-1:-1;;;10932:18:1;;;10925:32;10974:19;;49922:68:0;10601:398:1;49922:68:0;-1:-1:-1;;;;;50003:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;50055:32;;1731:25:1;;;50055:32:0;;1704:18:1;50055:32:0;;;;;;;;49749:346;;;:::o;21251:194::-;21312:4;21318:7;21371:1;21367;:5;21363:28;;;-1:-1:-1;21382:5:0;;-1:-1:-1;21382:5:0;21374:17;;21363:28;-1:-1:-1;21414:4:0;;-1:-1:-1;21420:5:0;;;21251:194;;;;;;:::o;24199:98::-;24257:7;24284:5;24288:1;24284;:5;:::i;47488:1054::-;-1:-1:-1;;;;;47594:20:0;;47586:70;;;;-1:-1:-1;;;47586:70:0;;11428:2:1;47586:70:0;;;11410:21:1;11467:2;11447:18;;;11440:30;11506:34;11486:18;;;11479:62;-1:-1:-1;;;11557:18:1;;;11550:35;11602:19;;47586:70:0;11226:401:1;47586:70:0;-1:-1:-1;;;;;47675:23:0;;47667:71;;;;-1:-1:-1;;;47667:71:0;;11834:2:1;47667:71:0;;;11816:21:1;11873:2;11853:18;;;11846:30;11912:34;11892:18;;;11885:62;-1:-1:-1;;;11963:18:1;;;11956:33;12006:19;;47667:71:0;11632:399:1;47667:71:0;-1:-1:-1;;;;;47754:22:0;;;;;;:14;:22;;;;;;;;;:49;;-1:-1:-1;;;;;;47780:23:0;;;;;;:12;:23;;;;;;;;47754:49;47751:784;;;47819:41;47834:6;47842:9;47853:6;47819:14;:41::i;47751:784::-;47891:11;47905:23;47924:3;47905:14;:6;47916:2;47905:10;:14::i;:::-;:18;;:23::i;:::-;47891:37;-1:-1:-1;47945:12:0;47960:25;47981:3;47960:16;47968:4;47945:12;47968:7;;47960:3;;:7;:16::i;:25::-;48023:8;;47945:40;;-1:-1:-1;48000:38:0;;48015:6;;-1:-1:-1;;;;;48023:8:0;47945:40;48000:14;:38::i;:::-;48055:12;48070:25;48091:3;48070:16;48078:4;48083:1;48078:7;;48070:3;;:7;:16::i;:25::-;48133:10;;48055:40;;-1:-1:-1;48110:40:0;;48125:6;;-1:-1:-1;;;;;48133:10:0;48055:40;48110:14;:40::i;:::-;48167:12;48182:25;48203:3;48182:16;48190:4;48195:1;48190:7;;48182:3;;:7;:16::i;:25::-;48245:10;;48167:40;;-1:-1:-1;48222:40:0;;48237:6;;-1:-1:-1;;;;;48245:10:0;48167:40;48222:14;:40::i;:::-;48302:4;;48279:63;;48294:6;;-1:-1:-1;;;;;48302:4:0;48308:33;48336:4;48308:23;48326:4;48308:23;:3;48316:4;48308:7;:13::i;:::-;:17;;:23::i;:33::-;48279:14;:63::i;:::-;48359:13;48375:17;:15;:17::i;:::-;48359:33;;48423:3;48407:5;:12;48413:5;48407:12;;;;;;;;;;;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;48452:15:0;;-1:-1:-1;48452:6:0;48463:3;48452:10;:15::i;:::-;48443:24;;48482:41;48497:6;48505:9;48516:6;48482:14;:41::i;:::-;47876:659;;;;;47488:1054;;;:::o;25341:240::-;25461:7;25522:12;25514:6;;;;25506:29;;;;-1:-1:-1;;;25506:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;25557:5:0;;;25341:240::o;34472:105::-;34539:30;34550:4;31014:10;34539;:30::i;:::-;34472:105;:::o;38730:238::-;38814:22;38822:4;38828:7;38814;:22::i;:::-;38809:152;;38853:6;:12;;;;;;;;;;;-1:-1:-1;;;;;38853:29:0;;;;;;;;;:36;;-1:-1:-1;;38853:36:0;38885:4;38853:36;;;38936:12;31014:10;;30934:98;38936:12;-1:-1:-1;;;;;38909:40:0;38927:7;-1:-1:-1;;;;;38909:40:0;38921:4;38909:40;;;;;;;;;;38730:238;;:::o;39148:239::-;39232:22;39240:4;39246:7;39232;:22::i;:::-;39228:152;;;39303:5;39271:12;;;;;;;;;;;-1:-1:-1;;;;;39271:29:0;;;;;;;;;;:37;;-1:-1:-1;;39271:37:0;;;39328:40;31014:10;;39271:12;;39328:40;;39303:5;39328:40;39148:239;;:::o;48937:378::-;-1:-1:-1;;;;;49021:21:0;;49013:65;;;;-1:-1:-1;;;49013:65:0;;12238:2:1;49013:65:0;;;12220:21:1;12277:2;12257:18;;;12250:30;12316:33;12296:18;;;12289:61;12367:18;;49013:65:0;12036:355:1;49013:65:0;49168:12;;:24;;49185:6;49168:16;:24::i;:::-;49153:12;:39;-1:-1:-1;;;;;49224:18:0;;;;;;:9;:18;;;;;;:30;;49247:6;49224:22;:30::i;:::-;-1:-1:-1;;;;;49203:18:0;;;;;;:9;:18;;;;;;:51;;;;49270:37;;49203:18;;;49270:37;;;;49300:6;1731:25:1;;1719:2;1704:18;;1585:177;49270:37:0;;;;;;;;48937:378;;:::o;2584:106::-;2642:7;2673:1;2669;:5;:13;;2681:1;2669:13;;;-1:-1:-1;2677:1:0;;2584:106;-1:-1:-1;2584:106:0:o;23443:98::-;23501:7;23528:5;23532:1;23528;:5;:::i;48550:379::-;48733:71;48755:6;48733:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48733:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;48713:17:0;;;;;;;:9;:17;;;;;;:91;;;;48838:20;;;;;;;:32;;48863:6;48838:24;:32::i;:::-;-1:-1:-1;;;;;48815:20:0;;;;;;;:9;:20;;;;;;;:55;;;;48886:35;;;;;;;;;;48914:6;1731:25:1;;1719:2;1704:18;;1585:177;23800:98:0;23858:7;23885:5;23889:1;23885;:5;:::i;34867:492::-;34956:22;34964:4;34970:7;34956;:22::i;:::-;34951:401;;35144:28;35164:7;35144:19;:28::i;:::-;35245:38;35273:4;35280:2;35245:19;:38::i;:::-;35049:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;35049:257:0;;;;;;;;;;-1:-1:-1;;;34995:345:0;;;;;;;:::i;16987:151::-;17045:13;17078:52;-1:-1:-1;;;;;17090:22:0;;15142:2;16383:447;16458:13;16484:19;16516:10;16520:6;16516:1;:10;:::i;:::-;:14;;16529:1;16516:14;:::i;:::-;16506:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16506:25:0;;16484:47;;-1:-1:-1;;;16542:6:0;16549:1;16542:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;16542:15:0;;;;;;;;;-1:-1:-1;;;16568:6:0;16575:1;16568:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;16568:15:0;;;;;;;;-1:-1:-1;16599:9:0;16611:10;16615:6;16611:1;:10;:::i;:::-;:14;;16624:1;16611:14;:::i;:::-;16599:26;;16594:131;16631:1;16627;:5;16594:131;;;-1:-1:-1;;;16675:5:0;16683:3;16675:11;16666:21;;;;;;;:::i;:::-;;;;16654:6;16661:1;16654:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;16654:33:0;;;;;;;;-1:-1:-1;16712:1:0;16702:11;;;;;16634:3;;;:::i;:::-;;;16594:131;;;-1:-1:-1;16743:10:0;;16735:55;;;;-1:-1:-1;;;16735:55:0;;13833:2:1;16735:55:0;;;13815:21:1;;;13852:18;;;13845:30;13911:34;13891:18;;;13884:62;13963:18;;16735:55:0;13631:356:1;14:286;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:258;569:1;579:113;593:6;590:1;587:13;579:113;;;669:11;;;663:18;650:11;;;643:39;615:2;608:10;579:113;;;710:6;707:1;704:13;701:48;;;-1:-1:-1;;745:1:1;727:16;;720:27;497:258::o;760:383::-;909:2;898:9;891:21;872:4;941:6;935:13;984:6;979:2;968:9;964:18;957:34;1000:66;1059:6;1054:2;1043:9;1039:18;1034:2;1026:6;1022:15;1000:66;:::i;:::-;1127:2;1106:15;-1:-1:-1;;1102:29:1;1087:45;;;;1134:2;1083:54;;760:383;-1:-1:-1;;760:383:1:o;1148:173::-;1216:20;;-1:-1:-1;;;;;1265:31:1;;1255:42;;1245:70;;1311:1;1308;1301:12;1245:70;1148:173;;;:::o;1326:254::-;1394:6;1402;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;1494:29;1513:9;1494:29;:::i;:::-;1484:39;1570:2;1555:18;;;;1542:32;;-1:-1:-1;;;1326:254:1:o;1975:180::-;2034:6;2087:2;2075:9;2066:7;2062:23;2058:32;2055:52;;;2103:1;2100;2093:12;2055:52;-1:-1:-1;2126:23:1;;1975:180;-1:-1:-1;1975:180:1:o;2160:435::-;2213:3;2251:5;2245:12;2278:6;2273:3;2266:19;2304:4;2333:2;2328:3;2324:12;2317:19;;2370:2;2363:5;2359:14;2391:1;2401:169;2415:6;2412:1;2409:13;2401:169;;;2476:13;;2464:26;;2510:12;;;;2545:15;;;;2437:1;2430:9;2401:169;;;-1:-1:-1;2586:3:1;;2160:435;-1:-1:-1;;;;;2160:435:1:o;2600:465::-;2857:2;2846:9;2839:21;2820:4;2883:56;2935:2;2924:9;2920:18;2912:6;2883:56;:::i;:::-;2987:9;2979:6;2975:22;2970:2;2959:9;2955:18;2948:50;3015:44;3052:6;3044;3015:44;:::i;:::-;3007:52;2600:465;-1:-1:-1;;;;;2600:465:1:o;3070:186::-;3129:6;3182:2;3170:9;3161:7;3157:23;3153:32;3150:52;;;3198:1;3195;3188:12;3150:52;3221:29;3240:9;3221:29;:::i;3261:328::-;3338:6;3346;3354;3407:2;3395:9;3386:7;3382:23;3378:32;3375:52;;;3423:1;3420;3413:12;3375:52;3446:29;3465:9;3446:29;:::i;:::-;3436:39;;3494:38;3528:2;3517:9;3513:18;3494:38;:::i;:::-;3484:48;;3579:2;3568:9;3564:18;3551:32;3541:42;;3261:328;;;;;:::o;3961:254::-;4029:6;4037;4090:2;4078:9;4069:7;4065:23;4061:32;4058:52;;;4106:1;4103;4096:12;4058:52;4142:9;4129:23;4119:33;;4171:38;4205:2;4194:9;4190:18;4171:38;:::i;:::-;4161:48;;3961:254;;;;;:::o;4409:127::-;4470:10;4465:3;4461:20;4458:1;4451:31;4501:4;4498:1;4491:15;4525:4;4522:1;4515:15;4541:908;4595:5;4648:3;4641:4;4633:6;4629:17;4625:27;4615:55;;4666:1;4663;4656:12;4615:55;4702:6;4689:20;4728:4;4751:18;4788:2;4784;4781:10;4778:36;;;4794:18;;:::i;:::-;4840:2;4837:1;4833:10;4872:2;4866:9;4935:2;4931:7;4926:2;4922;4918:11;4914:25;4906:6;4902:38;4990:6;4978:10;4975:22;4970:2;4958:10;4955:18;4952:46;4949:72;;;5001:18;;:::i;:::-;5037:2;5030:22;5087:18;;;5163:15;;;5159:24;;;5121:15;;;;-1:-1:-1;5195:15:1;;;5192:35;;;5223:1;5220;5213:12;5192:35;5259:2;5251:6;5247:15;5236:26;;5271:148;5287:6;5282:3;5279:15;5271:148;;;5353:23;5372:3;5353:23;:::i;:::-;5341:36;;5397:12;;;;5304;;;;5271:148;;;5437:6;4541:908;-1:-1:-1;;;;;;;4541:908:1:o;5454:571::-;5565:6;5573;5581;5589;5642:3;5630:9;5621:7;5617:23;5613:33;5610:53;;;5659:1;5656;5649:12;5610:53;5682:29;5701:9;5682:29;:::i;:::-;5672:39;;5730:38;5764:2;5753:9;5749:18;5730:38;:::i;:::-;5720:48;;5787:38;5821:2;5810:9;5806:18;5787:38;:::i;:::-;5777:48;;5876:2;5865:9;5861:18;5848:32;5903:18;5895:6;5892:30;5889:50;;;5935:1;5932;5925:12;5889:50;5958:61;6011:7;6002:6;5991:9;5987:22;5958:61;:::i;:::-;5948:71;;;5454:571;;;;;;;:::o;6030:509::-;6120:6;6128;6181:2;6169:9;6160:7;6156:23;6152:32;6149:52;;;6197:1;6194;6187:12;6149:52;6237:9;6224:23;6270:18;6262:6;6259:30;6256:50;;;6302:1;6299;6292:12;6256:50;6325:61;6378:7;6369:6;6358:9;6354:22;6325:61;:::i;:::-;6315:71;;;6436:2;6425:9;6421:18;6408:32;6483:5;6476:13;6469:21;6462:5;6459:32;6449:60;;6505:1;6502;6495:12;6449:60;6528:5;6518:15;;;6030:509;;;;;:::o;6544:248::-;6612:6;6620;6673:2;6661:9;6652:7;6648:23;6644:32;6641:52;;;6689:1;6686;6679:12;6641:52;-1:-1:-1;;6712:23:1;;;6782:2;6767:18;;;6754:32;;-1:-1:-1;6544:248:1:o;6797:260::-;6865:6;6873;6926:2;6914:9;6905:7;6901:23;6897:32;6894:52;;;6942:1;6939;6932:12;6894:52;6965:29;6984:9;6965:29;:::i;:::-;6955:39;;7013:38;7047:2;7036:9;7032:18;7013:38;:::i;7062:764::-;7144:6;7197:2;7185:9;7176:7;7172:23;7168:32;7165:52;;;7213:1;7210;7203:12;7165:52;7262:7;7255:4;7244:9;7240:20;7236:34;7226:62;;7284:1;7281;7274:12;7226:62;7317:2;7311:9;7359:2;7351:6;7347:15;7428:6;7416:10;7413:22;7392:18;7380:10;7377:34;7374:62;7371:88;;;7439:18;;:::i;:::-;7479:10;7475:2;7468:22;;7510:6;7554:2;7543:9;7539:18;7580:7;7572:6;7569:19;7566:39;;;7601:1;7598;7591:12;7566:39;7625:9;7643:152;7659:6;7654:3;7651:15;7643:152;;;7727:23;7746:3;7727:23;:::i;:::-;7715:36;;7780:4;7771:14;;;;7676;7643:152;;;-1:-1:-1;7814:6:1;;7062:764;-1:-1:-1;;;;;7062:764:1:o;7831:380::-;7910:1;7906:12;;;;7953;;;7974:61;;8028:4;8020:6;8016:17;8006:27;;7974:61;8081:2;8073:6;8070:14;8050:18;8047:38;8044:161;;;8127:10;8122:3;8118:20;8115:1;8108:31;8162:4;8159:1;8152:15;8190:4;8187:1;8180:15;8044:161;;7831:380;;;:::o;8632:127::-;8693:10;8688:3;8684:20;8681:1;8674:31;8724:4;8721:1;8714:15;8748:4;8745:1;8738:15;8764:127;8825:10;8820:3;8816:20;8813:1;8806:31;8856:4;8853:1;8846:15;8880:4;8877:1;8870:15;8896:135;8935:3;-1:-1:-1;;8956:17:1;;8953:43;;;8976:18;;:::i;:::-;-1:-1:-1;9023:1:1;9012:13;;8896:135::o;10063:128::-;10103:3;10134:1;10130:6;10127:1;10124:13;10121:39;;;10140:18;;:::i;:::-;-1:-1:-1;10176:9:1;;10063:128::o;11004:217::-;11044:1;11070;11060:132;;11114:10;11109:3;11105:20;11102:1;11095:31;11149:4;11146:1;11139:15;11177:4;11174:1;11167:15;11060:132;-1:-1:-1;11206:9:1;;11004:217::o;12396:125::-;12436:4;12464:1;12461;12458:8;12455:34;;;12469:18;;:::i;:::-;-1:-1:-1;12506:9:1;;12396:125::o;12526:168::-;12566:7;12632:1;12628;12624:6;12620:14;12617:1;12614:21;12609:1;12602:9;12595:17;12591:45;12588:71;;;12639:18;;:::i;:::-;-1:-1:-1;12679:9:1;;12526:168::o;12699:786::-;13110:25;13105:3;13098:38;13080:3;13165:6;13159:13;13181:62;13236:6;13231:2;13226:3;13222:12;13215:4;13207:6;13203:17;13181:62;:::i;:::-;-1:-1:-1;;;13302:2:1;13262:16;;;13294:11;;;13287:40;13352:13;;13374:63;13352:13;13423:2;13415:11;;13408:4;13396:17;;13374:63;:::i;:::-;13457:17;13476:2;13453:26;;12699:786;-1:-1:-1;;;;12699:786:1:o;13490:136::-;13529:3;13557:5;13547:39;;13566:18;;:::i;:::-;-1:-1:-1;;;13602:18:1;;13490:136::o
Swarm Source
ipfs://6f13c50a10002dcca961be918d134e074e348efcd870d80a703f75567557a9b7