Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ZZZV2
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/SafeERC20.sol"; import "@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol"; import "./Fees.sol"; /** * @title ZZZ V2 * @author ZZZ.FINANCE * @dev Newer version of the token supporting fees on transfer. * * Different fees are applied for different targets and they will be distributed to treasury and feeReceivers. */ contract ZZZV2 is AccessControlUpgradeSafe, IERC20 { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; using Fees for uint256; struct FeeReceiver { address addr; uint256 percentage; // 10000 = 100% } bytes32 public constant GOVERNANCE_ROLE = keccak256("GOVERNANCE_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); uint256 public TOKEN_CAP; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; // Total network tx fee (max 5%) uint256 public txFee; // Total selling fee (max 10%) uint256 public sellTxFee; // Treasury fee uint256 public treasuryPercentage; address public treasury; // Blacklisted account total fees uint256 public blackListTxFee; uint256 public blackListSellTxFee; // Vault addresses and fees FeeReceiver[] public feeReceivers; uint256 totalVaultFee; // Skip fee deduction for these addresses mapping(address => bool) public skipFees; // Blacklisting data mapping(address => bool) public blacklistedAddr; mapping(address => bool) public sellTargets; // Migration variables mapping(address => uint256) public swapCooldown; uint256 public migrationCutoff; IERC20 public V1; bool paused; event AddressBlacklisted(address blacklistedAddress); event blackListTxFeeChange(uint256 newBlackListTransferFee, uint256 newblackListSellTxFee); event TokenSwapped(uint256 amount); function initV2( uint256 _txFee, uint256 _treasuryPercentage, uint256 _sellTxFee, uint256 _blackListTxFee, uint256 _blackListSellTxFee, address _V1, address _treasury ) external initializer { __AccessControl_init(); _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(GOVERNANCE_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); V1 = IERC20(_V1); txFee = _txFee; sellTxFee = _sellTxFee; blackListTxFee = _blackListTxFee; blackListSellTxFee = _blackListSellTxFee; treasuryPercentage = _treasuryPercentage; treasury = _treasury; migrationCutoff = 0; // 0 = Can transfer, 1 = Migration Cutoff TOKEN_CAP = 20000 * 1e18; _name = "ZZZ V2"; _symbol = "ZZZV2"; _decimals = 18; // ZZZ migration pool skipFees[0x2F867Bf441D62584B3F0a84828C2e62dAC9fb4e6] = true; skipFees[0x9527dcf941D474A52B74eed5E041c2dBa2eEe1CA] = true; skipFees[0x2B255A6B4d7b147f75Bb44fc093CA39e08B20B7E] = true; skipFees[0x3c183C7D18089093316d1BFA124De15556f8Ae5c] = true; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } // Toggle an address to not have fees applied to it's transfers function toggleSellTarget(address _address) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); sellTargets[_address] = !sellTargets[_address]; } // Toggle an address to not have fees applied to it's transfers function toggleFeeSkippingFor(address _address) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); skipFees[_address] = !skipFees[_address]; } /** @dev fee structure adjustment functions */ // Set the default transfer fee function setTransferFees(uint256 _transferFee, uint256 _sellFee) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); require(_transferFee >= 0 && _transferFee <= 500, "Fee clamp 0-5%"); require(_sellFee >= 0 && _sellFee <= 1000, "Sell fee clamp 0-10%"); txFee = _transferFee; sellTxFee = _sellFee; } function toggleBlacklistedAddress(address _blacklistAddress) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()) || hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Sender not gov or admin"); blacklistedAddr[_blacklistAddress] = !blacklistedAddr[_blacklistAddress]; emit AddressBlacklisted(_blacklistAddress); } function adjustBlacklistTxFees(uint256 _newBlacklistTxFee, uint256 _newBlacklistSellTxFee) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()) || hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Sender not gov or admin"); blackListTxFee = _newBlacklistTxFee; blackListSellTxFee = _newBlacklistSellTxFee; emit blackListTxFeeChange(_newBlacklistTxFee, _newBlacklistSellTxFee); } function setTreasuryPercentage(uint256 _newTreasuryPercentage) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); require(_newTreasuryPercentage.add(totalVaultFee) <= 10000, "Cannot be more than 100%"); treasuryPercentage = _newTreasuryPercentage; } function setFeeReceiver(FeeReceiver memory _feeReceiver) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); bool add; if (feeReceivers.length > 0) { for (uint256 i; i < feeReceivers.length; i++) { if (feeReceivers[i].addr == _feeReceiver.addr) { require( totalVaultFee.sub(feeReceivers[i].percentage).add(_feeReceiver.percentage).add(treasuryPercentage) <= 10000, "Cannot be more than 100%" ); totalVaultFee = totalVaultFee.sub(feeReceivers[i].percentage).add(_feeReceiver.percentage); feeReceivers[i] = _feeReceiver; add = false; break; } else { add = true; } } } else { add = true; } if (add) { feeReceivers.push(_feeReceiver); totalVaultFee = totalVaultFee.add(_feeReceiver.percentage); } } function removeVault(address _feeReceiver) external { require(hasRole(GOVERNANCE_ROLE, _msgSender()), "Only governance"); for (uint256 i; i < feeReceivers.length; i++) { if (feeReceivers[i].addr == _feeReceiver) { totalVaultFee = totalVaultFee.sub(feeReceivers[i].percentage); feeReceivers[i] = feeReceivers[feeReceivers.length - 1]; feeReceivers.pop(); break; } } } /** * 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; } 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(_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 override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // Add pausability if required function _transfer( address sender, address recipient, uint256 amount ) internal virtual returns (bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 fee = _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); // Deal with fees if (fee > 0) handleFee(fee); _balances[recipient] = _balances[recipient].add(amount.sub(fee)); emit Transfer(sender, recipient, amount.sub(fee)); return true; } function handleFee(uint256 _fee) private { _balances[treasury] = _balances[treasury].add(_fee.mul(treasuryPercentage).div(10000)); if (feeReceivers.length > 0) { for (uint256 i; i < feeReceivers.length; i++) { _balances[feeReceivers[i].addr] = _balances[feeReceivers[i].addr].add(_fee.mul(feeReceivers[i].percentage).div(10000)); } } } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * It's capped to MAX_CAP by _beforeTokenTransfer. * Requirements * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) private { 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); } /** @dev Swaps the old V1 tokens, sending them to burn address and minting the caller the V2 ones. */ function swapV1toV2() external { require(migrationCutoff == 0, "Migration to V2 has already been completed"); uint256 V1Balance = V1.balanceOf(_msgSender()); require(V1Balance > 0, "No ZZZs to swap"); require(V1.transferFrom(_msgSender(), 0x000000000000000000000000000000000000dEaD, V1Balance), "No allowance?"); swapCooldown[_msgSender()] = block.timestamp + 1 days; _mint(_msgSender(), V1Balance); emit TokenSwapped(V1Balance); } function cutoffV2Migration() external { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Sender not admin"); require(migrationCutoff == 0, "Migration has already been cut off"); migrationCutoff++; } /** * @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 { 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); } // Use the hook for returning fee values function _beforeTokenTransfer( address from, address to, uint256 amount ) internal view returns (uint256) { if (from == address(0)) { require(totalSupply().add(amount) <= TOKEN_CAP, "All tokens minted"); return 0; } if (from == 0x9527dcf941D474A52B74eed5E041c2dBa2eEe1CA) return 0; require( !paused || (hasRole(DEFAULT_ADMIN_ROLE, from) || hasRole(DEFAULT_ADMIN_ROLE, to)) || (hasRole(GOVERNANCE_ROLE, from) || hasRole(DEFAULT_ADMIN_ROLE, to)), "Token transfers paused!" ); require( swapCooldown[from] <= block.timestamp || (hasRole(DEFAULT_ADMIN_ROLE, from) || hasRole(DEFAULT_ADMIN_ROLE, to)), "Swap cooldown" ); // Deduct the fees for different targets if (blacklistedAddr[from] && sellTargets[to]) { return amount.getFee(blackListSellTxFee); } else if (blacklistedAddr[from] || blacklistedAddr[to]) { return amount.getFee(blackListTxFee); } else if (sellTargets[to]) { return amount.getFee(sellTxFee); } else if (skipFees[to] || skipFees[from]) { return 0; } else { return amount.getFee(txFee); } } function mint(address account, uint256 amount) public { require(hasRole(MINTER_ROLE, _msgSender()), "!minter"); _mint(account, amount); } function togglePause() external { require(hasRole(GOVERNANCE_ROLE, _msgSender())); paused = !paused; } }
pragma solidity ^0.6.0; /** * @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); }
pragma solidity ^0.6.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.6.0; import "../utils/EnumerableSet.sol"; import "../utils/Address.sol"; import "../GSN/Context.sol"; import "../Initializable.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. * * 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, _msgSender())); * ... * } * ``` * * 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}. */ abstract contract AccessControlUpgradeSafe is Initializable, ContextUpgradeSafe { function __AccessControl_init() internal initializer { __Context_init_unchained(); __AccessControl_init_unchained(); } function __AccessControl_init_unchained() internal initializer { } using EnumerableSet for EnumerableSet.AddressSet; using Address for address; struct RoleData { EnumerableSet.AddressSet members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_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) public view returns (bool) { return _roles[role].members.contains(account); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view returns (uint256) { return _roles[role].members.length(); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view returns (address) { return _roles[role].members.at(index); } /** * @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 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. */ function grantRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); _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. */ function revokeRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); _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 granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual { 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. * * [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}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (_roles[role].members.add(account)) { emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (_roles[role].members.remove(account)) { emit RoleRevoked(role, account, _msgSender()); } } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.8.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logByte(byte p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(byte)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
pragma solidity ^0.6.0; import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol"; library Fees { using SafeMath for uint256; function getFee(uint256 amount, uint256 tax) internal pure returns (uint256) { return amount.mul(tax).div(10000); } }
pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.6.2; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); } }
pragma solidity ^0.6.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } }
pragma solidity ^0.6.0; import "../Initializable.sol"; /* * @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 GSN 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. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; }
pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blacklistedAddress","type":"address"}],"name":"AddressBlacklisted","type":"event"},{"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":"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenSwapped","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBlackListTransferFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newblackListSellTxFee","type":"uint256"}],"name":"blackListTxFeeChange","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V1","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBlacklistTxFee","type":"uint256"},{"internalType":"uint256","name":"_newBlacklistSellTxFee","type":"uint256"}],"name":"adjustBlacklistTxFees","outputs":[],"stateMutability":"nonpayable","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":"blackListSellTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blackListTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklistedAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cutoffV2Migration","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeReceivers","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"percentage","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":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryPercentage","type":"uint256"},{"internalType":"uint256","name":"_sellTxFee","type":"uint256"},{"internalType":"uint256","name":"_blackListTxFee","type":"uint256"},{"internalType":"uint256","name":"_blackListSellTxFee","type":"uint256"},{"internalType":"address","name":"_V1","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"name":"initV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationCutoff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"removeVault","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"sellTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"internalType":"struct ZZZV2.FeeReceiver","name":"_feeReceiver","type":"tuple"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTreasuryPercentage","type":"uint256"}],"name":"setTreasuryPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"skipFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapV1toV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_blacklistAddress","type":"address"}],"name":"toggleBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"toggleFeeSkippingFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"toggleSellTarget","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612bf0806100206000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c8063904236d111610167578063c4ae3168116100ce578063dd62ed3e11610087578063dd62ed3e1461056d578063e2a4a28f14610580578063ededa99914610593578063f36c8f5c1461059b578063f639d534146105a3578063fc14965f146105b6576102a0565b8063c4ae31681461051c578063ca15c87314610524578063ceb68c2314610537578063cf8204611461054a578063d539139314610552578063d547741f1461055a576102a0565b80639ab393be116101205780639ab393be146104c0578063a217fddf146104d3578063a457c2d7146104db578063a9059cbb146104ee578063acdfe73214610501578063b2466e9014610514576102a0565b8063904236d11461047a57806391d148541461048257806394bf57511461049557806395d89b41146104a8578063975dc532146104b05780639a6524f1146104b8576102a0565b8063395093511161020b57806361d027b3116101c457806361d027b31461041e578063696650a01461042657806370a08231146104395780637ab560831461044c57806389444cfa146104545780639010d07c14610467576102a0565b806339509351146103a75780633ee569bf146103ba57806340c10f19146103cf578063437f1686146103e25780635180ad92146103f55780635b381760146103fd576102a0565b806323b872dd1161025d57806323b872dd14610333578063248a9ca3146103465780632f2ff15d146103595780632fa747941461036c578063313ce5671461037f57806336568abe14610394576102a0565b806306fdde03146102a5578063095ea7b3146102c35780630e54cef8146102e357806310c6aebf146102f857806311c2e55d1461030b57806318160ddd1461031e575b600080fd5b6102ad6105be565b6040516102ba91906124cb565b60405180910390f35b6102d66102d13660046122e5565b610654565b6040516102ba91906124b7565b6102f66102f1366004612402565b610672565b005b6102d6610306366004612256565b6108f1565b6102f661031936600461232f565b610906565b610326610977565b6040516102ba91906124c2565b6102d66103413660046122a5565b61097d565b61032661035436600461232f565b610a06565b6102f6610367366004612347565b610a1b565b6102d661037a366004612256565b610a63565b610387610a78565b6040516102ba9190612b04565b6102f66103a2366004612347565b610a81565b6102d66103b53660046122e5565b610ac3565b6103c2610b11565b6040516102ba9190612466565b6102f66103dd3660046122e5565b610b20565b6102f66103f0366004612256565b610b72565b610326610bd1565b61041061040b36600461232f565b610bd7565b6040516102ba92919061249e565b6103c2610c0c565b6102f6610434366004612256565b610c1b565b610326610447366004612256565b610c7a565b610326610c95565b6102f6610462366004612256565b610c9b565b6103c2610475366004612376565b610d47565b610326610d5f565b6102d6610490366004612347565b610d65565b6102f66104a3366004612376565b610d7d565b6102ad610e0e565b6102f6610e6f565b610326610ec3565b6103266104ce366004612256565b610ec9565b610326610edb565b6102d66104e93660046122e5565b610ee0565b6102d66104fc3660046122e5565b610f48565b6102d661050f366004612256565b610f5c565b6102f6610f71565b6102f6611150565b61032661053236600461232f565b611194565b6102f6610545366004612256565b6111ab565b610326611301565b610326611307565b6102f6610568366004612347565b61132b565b61032661057b366004612271565b611365565b6102f661058e366004612397565b611390565b610326611582565b610326611588565b6102f66105b1366004612376565b61159a565b61032661161f565b60998054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561064a5780601f1061061f5761010080835404028352916020019161064a565b820191906000526020600020905b81548152906001019060200180831161062d57829003601f168201915b5050505050905090565b6000610668610661611625565b8484611629565b5060015b92915050565b600054610100900460ff168061068b575061068b6116dd565b80610699575060005460ff16155b6106be5760405162461bcd60e51b81526004016106b590612902565b60405180910390fd5b600054610100900460ff161580156106e9576000805460ff1961ff0019909116610100171660011790555b6106f16116e3565b61070360006106fe611625565b610a55565b61071d600080516020612b288339815191526106fe611625565b6107497f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106fe611625565b60ab80546001600160a01b038086166001600160a01b031992831617909255609e8a9055609f88905560a287905560a386905560a089905560a1805492851692909116919091179055600060aa5569043c33c1937564800000609755604080518082019091526006808252652d2d2d102b1960d11b60209092019182526107d2916099916121ac565b50604080518082019091526005808252642d2d2d2b1960d91b60209092019182526107ff91609a916121ac565b50609b805460ff1990811660121790915560a66020527f398555bf5cde893efee9958a198e33acd41674d2767a986c636c9551bc0e2e0d8054821660019081179091557fc7a47f0eedcf8565a163c0eb239016eb990cd7b6f7c3f449ce9687c4864cd6a380548316821790557fb3113abbdd5c481e55c7b5028645b0f6d28bd41c4a5518dd70801e9fc37daa248054831682179055733c183c7d18089093316d1bfa124de15556f8ae5c6000527f9672dee1d0484827f0ed1f12cbc4cd4ae4d0561fdc3cebcc1e8a57bb5b254f62805490921617905580156108e7576000805461ff00191690555b5050505050505050565b60a66020526000908152604090205460ff1681565b610920600080516020612b28833981519152610490611625565b61093c5760405162461bcd60e51b81526004016106b590612861565b61271061095460a5548361177690919063ffffffff16565b11156109725760405162461bcd60e51b81526004016106b59061272f565b60a055565b60985490565b600061098a84848461179b565b506109fb84610997611625565b6109f685604051806060016040528060288152602001612b6e602891396001600160a01b038a166000908152609d60205260408120906109d5611625565b6001600160a01b0316815260208101919091526040016000205491906118f3565b611629565b5060015b9392505050565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610a3990610490611625565b610a555760405162461bcd60e51b81526004016106b590612614565b610a5f828261191f565b5050565b60a86020526000908152604090205460ff1681565b609b5460ff1690565b610a89611625565b6001600160a01b0316816001600160a01b031614610ab95760405162461bcd60e51b81526004016106b590612a70565b610a5f8282611988565b6000610668610ad0611625565b846109f685609d6000610ae1611625565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611776565b60ab546001600160a01b031681565b610b4c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610490611625565b610b685760405162461bcd60e51b81526004016106b590612547565b610a5f82826119f1565b610b8c600080516020612b28833981519152610490611625565b610ba85760405162461bcd60e51b81526004016106b590612861565b6001600160a01b0316600090815260a860205260409020805460ff19811660ff90911615179055565b60a35481565b60a48181548110610be457fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b60a1546001600160a01b031681565b610c35600080516020612b28833981519152610490611625565b610c515760405162461bcd60e51b81526004016106b590612861565b6001600160a01b0316600090815260a660205260409020805460ff19811660ff90911615179055565b6001600160a01b03166000908152609c602052604090205490565b60a05481565b610cb5600080516020612b28833981519152610490611625565b80610cc85750610cc86000610490611625565b610ce45760405162461bcd60e51b81526004016106b5906128cb565b6001600160a01b038116600090815260a7602052604090819020805460ff19811660ff90911615179055517fdaf49ab9345b6cb75bcb5a7f726bff9183c34dcf5c098c385730f9fd893765f690610d3c908390612466565b60405180910390a150565b60008281526065602052604081206109ff9083611ab2565b609f5481565b60008281526065602052604081206109ff9083611abe565b610d97600080516020612b28833981519152610490611625565b80610daa5750610daa6000610490611625565b610dc65760405162461bcd60e51b81526004016106b5906128cb565b60a282905560a38190556040517fb4d8a22c5dfde53ed38e6d457cd81c304dd2e2a8013424258610276dfd1cf60890610e029084908490612af6565b60405180910390a15050565b609a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561064a5780601f1061061f5761010080835404028352916020019161064a565b610e7c6000610490611625565b610e985760405162461bcd60e51b81526004016106b5906127b0565b60aa5415610eb85760405162461bcd60e51b81526004016106b590612950565b60aa80546001019055565b60975481565b60a96020526000908152604090205481565b600081565b6000610668610eed611625565b846109f685604051806060016040528060258152602001612b9660259139609d6000610f17611625565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906118f3565b60006109fb610f55611625565b848461179b565b60a76020526000908152604090205460ff1681565b60aa5415610f915760405162461bcd60e51b81526004016106b590612766565b60ab546000906001600160a01b03166370a08231610fad611625565b6040518263ffffffff1660e01b8152600401610fc99190612466565b60206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101991906123ea565b90506000811161103b5760405162461bcd60e51b81526004016106b59061251e565b60ab546001600160a01b03166323b872dd611054611625565b61dead846040518463ffffffff1660e01b81526004016110769392919061247a565b602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c8919061230f565b6110e45760405162461bcd60e51b81526004016106b5906129c0565b42620151800160a960006110f6611625565b6001600160a01b0316815260208101919091526040016000205561112161111b611625565b826119f1565b7f66158d64ea90a3383da42069972efdf781b9e404ab679380eadda4e0a034c45f81604051610d3c91906124c2565b61116a600080516020612b28833981519152610490611625565b61117357600080fd5b60ab805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600081815260656020526040812061066c90611ad3565b6111c5600080516020612b28833981519152610490611625565b6111e15760405162461bcd60e51b81526004016106b590612861565b60005b60a454811015610a5f57816001600160a01b031660a4828154811061120557fe5b60009182526020909120600290910201546001600160a01b031614156112f95761125860a4828154811061123557fe5b90600052602060002090600202016001015460a554611ade90919063ffffffff16565b60a55560a48054600019810190811061126d57fe5b906000526020600020906002020160a4828154811061128857fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b0390921691909117815560019182015491015560a48054806112cb57fe5b60008281526020812060026000199093019283020180546001600160a01b0319168155600101559055610a5f565b6001016111e4565b609e5481565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b60008281526065602052604090206002015461134990610490611625565b610ab95760405162461bcd60e51b81526004016106b5906127da565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205490565b6113aa600080516020612b28833981519152610490611625565b6113c65760405162461bcd60e51b81526004016106b590612861565b60a454600090156114e15760005b60a4548110156114db5782600001516001600160a01b031660a482815481106113f957fe5b60009182526020909120600290910201546001600160a01b031614156114cf5761271061144060a05461143a866020015161143a60a4878154811061123557fe5b90611776565b111561145e5760405162461bcd60e51b81526004016106b59061272f565b611476836020015161143a60a4848154811061123557fe5b60a5819055508260a4828154811061148a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03909316929092178255929092015160019092019190915591506114db565b600191506001016113d4565b506114e5565b5060015b8015610a5f5760a4805460018101825560009190915282517fe434dc35da084cf8d7e8186688ea2dacb53db7003d427af3abf351bd9d0a4e8d600290920291820180546001600160a01b0319166001600160a01b0390921691909117905560208301517fe434dc35da084cf8d7e8186688ea2dacb53db7003d427af3abf351bd9d0a4e8e90910181905560a55461157b91611776565b60a5555050565b60a25481565b600080516020612b2883398151915281565b6115b4600080516020612b28833981519152610490611625565b6115d05760405162461bcd60e51b81526004016106b590612861565b6101f48211156115f25760405162461bcd60e51b81526004016106b5906126a5565b6103e88111156116145760405162461bcd60e51b81526004016106b590612992565b609e91909155609f55565b60aa5481565b3390565b6001600160a01b03831661164f5760405162461bcd60e51b81526004016106b590612a2c565b6001600160a01b0382166116755760405162461bcd60e51b81526004016106b590612663565b6001600160a01b038084166000818152609d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906116d09085906124c2565b60405180910390a3505050565b303b1590565b600054610100900460ff16806116fc57506116fc6116dd565b8061170a575060005460ff16155b6117265760405162461bcd60e51b81526004016106b590612902565b600054610100900460ff16158015611751576000805460ff1961ff0019909116610100171660011790555b611759611b20565b611761611b20565b8015611773576000805461ff00191690555b50565b6000828201838110156109ff5760405162461bcd60e51b81526004016106b5906126f8565b60006001600160a01b0384166117c35760405162461bcd60e51b81526004016106b5906129e7565b6001600160a01b0383166117e95760405162461bcd60e51b81526004016106b5906125aa565b60006117f6858585611ba1565b905061183583604051806060016040528060268152602001612b48602691396001600160a01b0388166000908152609c602052604090205491906118f3565b6001600160a01b0386166000908152609c6020526040902055801561185d5761185d81611e1d565b61188961186a8483611ade565b6001600160a01b0386166000908152609c602052604090205490611776565b6001600160a01b038086166000818152609c602052604090209290925586167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6118d38685611ade565b6040516118e091906124c2565b60405180910390a3506001949350505050565b600081848411156119175760405162461bcd60e51b81526004016106b591906124cb565b505050900390565b60008281526065602052604090206119379082611f50565b15610a5f57611944611625565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602052604090206119a09082611f65565b15610a5f576119ad611625565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6001600160a01b038216611a175760405162461bcd60e51b81526004016106b590612abf565b611a2360008383611ba1565b50609854611a319082611776565b6098556001600160a01b0382166000908152609c6020526040902054611a579082611776565b6001600160a01b0383166000818152609c60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611aa69085906124c2565b60405180910390a35050565b60006109ff8383611f7a565b60006109ff836001600160a01b038416611fbf565b600061066c82611fd7565b60006109ff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f3565b600054610100900460ff1680611b395750611b396116dd565b80611b47575060005460ff16155b611b635760405162461bcd60e51b81526004016106b590612902565b600054610100900460ff16158015611761576000805460ff1961ff0019909116610100171660011790558015611773576000805461ff001916905550565b60006001600160a01b038416611be657609754611bc08361143a610977565b1115611bde5760405162461bcd60e51b81526004016106b5906126cd565b5060006109ff565b739527dcf941d474a52b74eed5e041c2dba2eee1ca6001600160a01b0385161415611c13575060006109ff565b60ab54600160a01b900460ff161580611c435750611c32600085610d65565b80611c435750611c43600084610d65565b80611c725750611c61600080516020612b2883398151915285610d65565b80611c725750611c72600084610d65565b611c8e5760405162461bcd60e51b81526004016106b59061282a565b6001600160a01b038416600090815260a9602052604090205442101580611ccc5750611cbb600085610d65565b80611ccc5750611ccc600084610d65565b611ce85760405162461bcd60e51b81526004016106b5906125ed565b6001600160a01b038416600090815260a7602052604090205460ff168015611d2857506001600160a01b038316600090815260a8602052604090205460ff165b15611d425760a354611d3b908390611fdb565b90506109ff565b6001600160a01b038416600090815260a7602052604090205460ff1680611d8157506001600160a01b038316600090815260a7602052604090205460ff165b15611d945760a254611d3b908390611fdb565b6001600160a01b038316600090815260a8602052604090205460ff1615611dc357609f54611d3b908390611fdb565b6001600160a01b038316600090815260a6602052604090205460ff1680611e0257506001600160a01b038416600090815260a6602052604090205460ff165b15611e0f575060006109ff565b609e54611d3b908390611fdb565b611e62611e41612710611e3b60a05485611fe990919063ffffffff16565b90612023565b60a1546001600160a01b03166000908152609c602052604090205490611776565b60a1546001600160a01b03166000908152609c602052604090205560a454156117735760005b60a454811015610a5f57611f0d611ecc612710611e3b60a48581548110611eab57fe5b90600052602060002090600202016001015486611fe990919063ffffffff16565b609c600060a48581548110611edd57fe5b600091825260208083206002909202909101546001600160a01b0316835282019290925260400190205490611776565b609c600060a48481548110611f1e57fe5b600091825260208083206002909202909101546001600160a01b03168352820192909252604001902055600101611e88565b60006109ff836001600160a01b038416612065565b60006109ff836001600160a01b0384166120af565b81546000908210611f9d5760405162461bcd60e51b81526004016106b590612568565b826000018281548110611fac57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b60006109ff612710611e3b85855b600082611ff85750600061066c565b8282028284828161200557fe5b04146109ff5760405162461bcd60e51b81526004016106b59061288a565b60006109ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612175565b60006120718383611fbf565b6120a75750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561066c565b50600061066c565b6000818152600183016020526040812054801561216b57835460001980830191908101906000908790839081106120e257fe5b90600052602060002001549050808760000184815481106120ff57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061212f57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061066c565b600091505061066c565b600081836121965760405162461bcd60e51b81526004016106b591906124cb565b5060008385816121a257fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106121ed57805160ff191683800117855561221a565b8280016001018555821561221a579182015b8281111561221a5782518255916020019190600101906121ff565b5061222692915061222a565b5090565b5b80821115612226576000815560010161222b565b80356001600160a01b038116811461066c57600080fd5b600060208284031215612267578081fd5b6109ff838361223f565b60008060408385031215612283578081fd5b61228d848461223f565b915061229c846020850161223f565b90509250929050565b6000806000606084860312156122b9578081fd5b83356122c481612b12565b925060208401356122d481612b12565b929592945050506040919091013590565b600080604083850312156122f7578182fd5b612301848461223f565b946020939093013593505050565b600060208284031215612320578081fd5b815180151581146109ff578182fd5b600060208284031215612340578081fd5b5035919050565b60008060408385031215612359578182fd5b82359150602083013561236b81612b12565b809150509250929050565b60008060408385031215612388578182fd5b50508035926020909101359150565b6000604082840312156123a8578081fd5b6040516040810181811067ffffffffffffffff821117156123c7578283fd5b6040526123d4848461223f565b8152602083013560208201528091505092915050565b6000602082840312156123fb578081fd5b5051919050565b600080600080600080600060e0888a03121561241c578283fd5b87359650602088013595506040880135945060608801359350608088013592506124498960a08a0161223f565b91506124588960c08a0161223f565b905092959891949750929550565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156124f7578581018301518582016040015282016124db565b818111156125085783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e04e6f205a5a5a7320746f207377617608c1b604082015260600190565b60208082526007908201526610b6b4b73a32b960c91b604082015260600190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c29bbb0b81031b7b7b63237bbb760991b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600e908201526d46656520636c616d7020302d352560901b604082015260600190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526018908201527f43616e6e6f74206265206d6f7265207468616e20313030250000000000000000604082015260600190565b6020808252602a908201527f4d6967726174696f6e20746f2056322068617320616c7265616479206265656e6040820152690818dbdb5c1b195d195960b21b606082015260800190565b60208082526010908201526f29b2b73232b9103737ba1030b236b4b760811b604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526017908201527f546f6b656e207472616e73666572732070617573656421000000000000000000604082015260600190565b6020808252600f908201526e4f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f53656e646572206e6f7420676f76206f722061646d696e000000000000000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526022908201527f4d6967726174696f6e2068617320616c7265616479206265656e20637574206f604082015261333360f11b606082015260800190565b60208082526014908201527353656c6c2066656520636c616d7020302d31302560601b604082015260600190565b6020808252600d908201526c4e6f20616c6c6f77616e63653f60981b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b918252602082015260400190565b60ff91909116815260200190565b6001600160a01b038116811461177357600080fdfe71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb145524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e55f3e1a622a4aefd6414c7a9aec83d26f9653d3e3b77d041463c5a5eb6c882864736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102a05760003560e01c8063904236d111610167578063c4ae3168116100ce578063dd62ed3e11610087578063dd62ed3e1461056d578063e2a4a28f14610580578063ededa99914610593578063f36c8f5c1461059b578063f639d534146105a3578063fc14965f146105b6576102a0565b8063c4ae31681461051c578063ca15c87314610524578063ceb68c2314610537578063cf8204611461054a578063d539139314610552578063d547741f1461055a576102a0565b80639ab393be116101205780639ab393be146104c0578063a217fddf146104d3578063a457c2d7146104db578063a9059cbb146104ee578063acdfe73214610501578063b2466e9014610514576102a0565b8063904236d11461047a57806391d148541461048257806394bf57511461049557806395d89b41146104a8578063975dc532146104b05780639a6524f1146104b8576102a0565b8063395093511161020b57806361d027b3116101c457806361d027b31461041e578063696650a01461042657806370a08231146104395780637ab560831461044c57806389444cfa146104545780639010d07c14610467576102a0565b806339509351146103a75780633ee569bf146103ba57806340c10f19146103cf578063437f1686146103e25780635180ad92146103f55780635b381760146103fd576102a0565b806323b872dd1161025d57806323b872dd14610333578063248a9ca3146103465780632f2ff15d146103595780632fa747941461036c578063313ce5671461037f57806336568abe14610394576102a0565b806306fdde03146102a5578063095ea7b3146102c35780630e54cef8146102e357806310c6aebf146102f857806311c2e55d1461030b57806318160ddd1461031e575b600080fd5b6102ad6105be565b6040516102ba91906124cb565b60405180910390f35b6102d66102d13660046122e5565b610654565b6040516102ba91906124b7565b6102f66102f1366004612402565b610672565b005b6102d6610306366004612256565b6108f1565b6102f661031936600461232f565b610906565b610326610977565b6040516102ba91906124c2565b6102d66103413660046122a5565b61097d565b61032661035436600461232f565b610a06565b6102f6610367366004612347565b610a1b565b6102d661037a366004612256565b610a63565b610387610a78565b6040516102ba9190612b04565b6102f66103a2366004612347565b610a81565b6102d66103b53660046122e5565b610ac3565b6103c2610b11565b6040516102ba9190612466565b6102f66103dd3660046122e5565b610b20565b6102f66103f0366004612256565b610b72565b610326610bd1565b61041061040b36600461232f565b610bd7565b6040516102ba92919061249e565b6103c2610c0c565b6102f6610434366004612256565b610c1b565b610326610447366004612256565b610c7a565b610326610c95565b6102f6610462366004612256565b610c9b565b6103c2610475366004612376565b610d47565b610326610d5f565b6102d6610490366004612347565b610d65565b6102f66104a3366004612376565b610d7d565b6102ad610e0e565b6102f6610e6f565b610326610ec3565b6103266104ce366004612256565b610ec9565b610326610edb565b6102d66104e93660046122e5565b610ee0565b6102d66104fc3660046122e5565b610f48565b6102d661050f366004612256565b610f5c565b6102f6610f71565b6102f6611150565b61032661053236600461232f565b611194565b6102f6610545366004612256565b6111ab565b610326611301565b610326611307565b6102f6610568366004612347565b61132b565b61032661057b366004612271565b611365565b6102f661058e366004612397565b611390565b610326611582565b610326611588565b6102f66105b1366004612376565b61159a565b61032661161f565b60998054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561064a5780601f1061061f5761010080835404028352916020019161064a565b820191906000526020600020905b81548152906001019060200180831161062d57829003601f168201915b5050505050905090565b6000610668610661611625565b8484611629565b5060015b92915050565b600054610100900460ff168061068b575061068b6116dd565b80610699575060005460ff16155b6106be5760405162461bcd60e51b81526004016106b590612902565b60405180910390fd5b600054610100900460ff161580156106e9576000805460ff1961ff0019909116610100171660011790555b6106f16116e3565b61070360006106fe611625565b610a55565b61071d600080516020612b288339815191526106fe611625565b6107497f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106fe611625565b60ab80546001600160a01b038086166001600160a01b031992831617909255609e8a9055609f88905560a287905560a386905560a089905560a1805492851692909116919091179055600060aa5569043c33c1937564800000609755604080518082019091526006808252652d2d2d102b1960d11b60209092019182526107d2916099916121ac565b50604080518082019091526005808252642d2d2d2b1960d91b60209092019182526107ff91609a916121ac565b50609b805460ff1990811660121790915560a66020527f398555bf5cde893efee9958a198e33acd41674d2767a986c636c9551bc0e2e0d8054821660019081179091557fc7a47f0eedcf8565a163c0eb239016eb990cd7b6f7c3f449ce9687c4864cd6a380548316821790557fb3113abbdd5c481e55c7b5028645b0f6d28bd41c4a5518dd70801e9fc37daa248054831682179055733c183c7d18089093316d1bfa124de15556f8ae5c6000527f9672dee1d0484827f0ed1f12cbc4cd4ae4d0561fdc3cebcc1e8a57bb5b254f62805490921617905580156108e7576000805461ff00191690555b5050505050505050565b60a66020526000908152604090205460ff1681565b610920600080516020612b28833981519152610490611625565b61093c5760405162461bcd60e51b81526004016106b590612861565b61271061095460a5548361177690919063ffffffff16565b11156109725760405162461bcd60e51b81526004016106b59061272f565b60a055565b60985490565b600061098a84848461179b565b506109fb84610997611625565b6109f685604051806060016040528060288152602001612b6e602891396001600160a01b038a166000908152609d60205260408120906109d5611625565b6001600160a01b0316815260208101919091526040016000205491906118f3565b611629565b5060015b9392505050565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610a3990610490611625565b610a555760405162461bcd60e51b81526004016106b590612614565b610a5f828261191f565b5050565b60a86020526000908152604090205460ff1681565b609b5460ff1690565b610a89611625565b6001600160a01b0316816001600160a01b031614610ab95760405162461bcd60e51b81526004016106b590612a70565b610a5f8282611988565b6000610668610ad0611625565b846109f685609d6000610ae1611625565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611776565b60ab546001600160a01b031681565b610b4c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610490611625565b610b685760405162461bcd60e51b81526004016106b590612547565b610a5f82826119f1565b610b8c600080516020612b28833981519152610490611625565b610ba85760405162461bcd60e51b81526004016106b590612861565b6001600160a01b0316600090815260a860205260409020805460ff19811660ff90911615179055565b60a35481565b60a48181548110610be457fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b60a1546001600160a01b031681565b610c35600080516020612b28833981519152610490611625565b610c515760405162461bcd60e51b81526004016106b590612861565b6001600160a01b0316600090815260a660205260409020805460ff19811660ff90911615179055565b6001600160a01b03166000908152609c602052604090205490565b60a05481565b610cb5600080516020612b28833981519152610490611625565b80610cc85750610cc86000610490611625565b610ce45760405162461bcd60e51b81526004016106b5906128cb565b6001600160a01b038116600090815260a7602052604090819020805460ff19811660ff90911615179055517fdaf49ab9345b6cb75bcb5a7f726bff9183c34dcf5c098c385730f9fd893765f690610d3c908390612466565b60405180910390a150565b60008281526065602052604081206109ff9083611ab2565b609f5481565b60008281526065602052604081206109ff9083611abe565b610d97600080516020612b28833981519152610490611625565b80610daa5750610daa6000610490611625565b610dc65760405162461bcd60e51b81526004016106b5906128cb565b60a282905560a38190556040517fb4d8a22c5dfde53ed38e6d457cd81c304dd2e2a8013424258610276dfd1cf60890610e029084908490612af6565b60405180910390a15050565b609a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561064a5780601f1061061f5761010080835404028352916020019161064a565b610e7c6000610490611625565b610e985760405162461bcd60e51b81526004016106b5906127b0565b60aa5415610eb85760405162461bcd60e51b81526004016106b590612950565b60aa80546001019055565b60975481565b60a96020526000908152604090205481565b600081565b6000610668610eed611625565b846109f685604051806060016040528060258152602001612b9660259139609d6000610f17611625565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906118f3565b60006109fb610f55611625565b848461179b565b60a76020526000908152604090205460ff1681565b60aa5415610f915760405162461bcd60e51b81526004016106b590612766565b60ab546000906001600160a01b03166370a08231610fad611625565b6040518263ffffffff1660e01b8152600401610fc99190612466565b60206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101991906123ea565b90506000811161103b5760405162461bcd60e51b81526004016106b59061251e565b60ab546001600160a01b03166323b872dd611054611625565b61dead846040518463ffffffff1660e01b81526004016110769392919061247a565b602060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c8919061230f565b6110e45760405162461bcd60e51b81526004016106b5906129c0565b42620151800160a960006110f6611625565b6001600160a01b0316815260208101919091526040016000205561112161111b611625565b826119f1565b7f66158d64ea90a3383da42069972efdf781b9e404ab679380eadda4e0a034c45f81604051610d3c91906124c2565b61116a600080516020612b28833981519152610490611625565b61117357600080fd5b60ab805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600081815260656020526040812061066c90611ad3565b6111c5600080516020612b28833981519152610490611625565b6111e15760405162461bcd60e51b81526004016106b590612861565b60005b60a454811015610a5f57816001600160a01b031660a4828154811061120557fe5b60009182526020909120600290910201546001600160a01b031614156112f95761125860a4828154811061123557fe5b90600052602060002090600202016001015460a554611ade90919063ffffffff16565b60a55560a48054600019810190811061126d57fe5b906000526020600020906002020160a4828154811061128857fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b0390921691909117815560019182015491015560a48054806112cb57fe5b60008281526020812060026000199093019283020180546001600160a01b0319168155600101559055610a5f565b6001016111e4565b609e5481565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b60008281526065602052604090206002015461134990610490611625565b610ab95760405162461bcd60e51b81526004016106b5906127da565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205490565b6113aa600080516020612b28833981519152610490611625565b6113c65760405162461bcd60e51b81526004016106b590612861565b60a454600090156114e15760005b60a4548110156114db5782600001516001600160a01b031660a482815481106113f957fe5b60009182526020909120600290910201546001600160a01b031614156114cf5761271061144060a05461143a866020015161143a60a4878154811061123557fe5b90611776565b111561145e5760405162461bcd60e51b81526004016106b59061272f565b611476836020015161143a60a4848154811061123557fe5b60a5819055508260a4828154811061148a57fe5b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03909316929092178255929092015160019092019190915591506114db565b600191506001016113d4565b506114e5565b5060015b8015610a5f5760a4805460018101825560009190915282517fe434dc35da084cf8d7e8186688ea2dacb53db7003d427af3abf351bd9d0a4e8d600290920291820180546001600160a01b0319166001600160a01b0390921691909117905560208301517fe434dc35da084cf8d7e8186688ea2dacb53db7003d427af3abf351bd9d0a4e8e90910181905560a55461157b91611776565b60a5555050565b60a25481565b600080516020612b2883398151915281565b6115b4600080516020612b28833981519152610490611625565b6115d05760405162461bcd60e51b81526004016106b590612861565b6101f48211156115f25760405162461bcd60e51b81526004016106b5906126a5565b6103e88111156116145760405162461bcd60e51b81526004016106b590612992565b609e91909155609f55565b60aa5481565b3390565b6001600160a01b03831661164f5760405162461bcd60e51b81526004016106b590612a2c565b6001600160a01b0382166116755760405162461bcd60e51b81526004016106b590612663565b6001600160a01b038084166000818152609d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906116d09085906124c2565b60405180910390a3505050565b303b1590565b600054610100900460ff16806116fc57506116fc6116dd565b8061170a575060005460ff16155b6117265760405162461bcd60e51b81526004016106b590612902565b600054610100900460ff16158015611751576000805460ff1961ff0019909116610100171660011790555b611759611b20565b611761611b20565b8015611773576000805461ff00191690555b50565b6000828201838110156109ff5760405162461bcd60e51b81526004016106b5906126f8565b60006001600160a01b0384166117c35760405162461bcd60e51b81526004016106b5906129e7565b6001600160a01b0383166117e95760405162461bcd60e51b81526004016106b5906125aa565b60006117f6858585611ba1565b905061183583604051806060016040528060268152602001612b48602691396001600160a01b0388166000908152609c602052604090205491906118f3565b6001600160a01b0386166000908152609c6020526040902055801561185d5761185d81611e1d565b61188961186a8483611ade565b6001600160a01b0386166000908152609c602052604090205490611776565b6001600160a01b038086166000818152609c602052604090209290925586167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6118d38685611ade565b6040516118e091906124c2565b60405180910390a3506001949350505050565b600081848411156119175760405162461bcd60e51b81526004016106b591906124cb565b505050900390565b60008281526065602052604090206119379082611f50565b15610a5f57611944611625565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602052604090206119a09082611f65565b15610a5f576119ad611625565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6001600160a01b038216611a175760405162461bcd60e51b81526004016106b590612abf565b611a2360008383611ba1565b50609854611a319082611776565b6098556001600160a01b0382166000908152609c6020526040902054611a579082611776565b6001600160a01b0383166000818152609c60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611aa69085906124c2565b60405180910390a35050565b60006109ff8383611f7a565b60006109ff836001600160a01b038416611fbf565b600061066c82611fd7565b60006109ff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f3565b600054610100900460ff1680611b395750611b396116dd565b80611b47575060005460ff16155b611b635760405162461bcd60e51b81526004016106b590612902565b600054610100900460ff16158015611761576000805460ff1961ff0019909116610100171660011790558015611773576000805461ff001916905550565b60006001600160a01b038416611be657609754611bc08361143a610977565b1115611bde5760405162461bcd60e51b81526004016106b5906126cd565b5060006109ff565b739527dcf941d474a52b74eed5e041c2dba2eee1ca6001600160a01b0385161415611c13575060006109ff565b60ab54600160a01b900460ff161580611c435750611c32600085610d65565b80611c435750611c43600084610d65565b80611c725750611c61600080516020612b2883398151915285610d65565b80611c725750611c72600084610d65565b611c8e5760405162461bcd60e51b81526004016106b59061282a565b6001600160a01b038416600090815260a9602052604090205442101580611ccc5750611cbb600085610d65565b80611ccc5750611ccc600084610d65565b611ce85760405162461bcd60e51b81526004016106b5906125ed565b6001600160a01b038416600090815260a7602052604090205460ff168015611d2857506001600160a01b038316600090815260a8602052604090205460ff165b15611d425760a354611d3b908390611fdb565b90506109ff565b6001600160a01b038416600090815260a7602052604090205460ff1680611d8157506001600160a01b038316600090815260a7602052604090205460ff165b15611d945760a254611d3b908390611fdb565b6001600160a01b038316600090815260a8602052604090205460ff1615611dc357609f54611d3b908390611fdb565b6001600160a01b038316600090815260a6602052604090205460ff1680611e0257506001600160a01b038416600090815260a6602052604090205460ff165b15611e0f575060006109ff565b609e54611d3b908390611fdb565b611e62611e41612710611e3b60a05485611fe990919063ffffffff16565b90612023565b60a1546001600160a01b03166000908152609c602052604090205490611776565b60a1546001600160a01b03166000908152609c602052604090205560a454156117735760005b60a454811015610a5f57611f0d611ecc612710611e3b60a48581548110611eab57fe5b90600052602060002090600202016001015486611fe990919063ffffffff16565b609c600060a48581548110611edd57fe5b600091825260208083206002909202909101546001600160a01b0316835282019290925260400190205490611776565b609c600060a48481548110611f1e57fe5b600091825260208083206002909202909101546001600160a01b03168352820192909252604001902055600101611e88565b60006109ff836001600160a01b038416612065565b60006109ff836001600160a01b0384166120af565b81546000908210611f9d5760405162461bcd60e51b81526004016106b590612568565b826000018281548110611fac57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b60006109ff612710611e3b85855b600082611ff85750600061066c565b8282028284828161200557fe5b04146109ff5760405162461bcd60e51b81526004016106b59061288a565b60006109ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612175565b60006120718383611fbf565b6120a75750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561066c565b50600061066c565b6000818152600183016020526040812054801561216b57835460001980830191908101906000908790839081106120e257fe5b90600052602060002001549050808760000184815481106120ff57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061212f57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061066c565b600091505061066c565b600081836121965760405162461bcd60e51b81526004016106b591906124cb565b5060008385816121a257fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106121ed57805160ff191683800117855561221a565b8280016001018555821561221a579182015b8281111561221a5782518255916020019190600101906121ff565b5061222692915061222a565b5090565b5b80821115612226576000815560010161222b565b80356001600160a01b038116811461066c57600080fd5b600060208284031215612267578081fd5b6109ff838361223f565b60008060408385031215612283578081fd5b61228d848461223f565b915061229c846020850161223f565b90509250929050565b6000806000606084860312156122b9578081fd5b83356122c481612b12565b925060208401356122d481612b12565b929592945050506040919091013590565b600080604083850312156122f7578182fd5b612301848461223f565b946020939093013593505050565b600060208284031215612320578081fd5b815180151581146109ff578182fd5b600060208284031215612340578081fd5b5035919050565b60008060408385031215612359578182fd5b82359150602083013561236b81612b12565b809150509250929050565b60008060408385031215612388578182fd5b50508035926020909101359150565b6000604082840312156123a8578081fd5b6040516040810181811067ffffffffffffffff821117156123c7578283fd5b6040526123d4848461223f565b8152602083013560208201528091505092915050565b6000602082840312156123fb578081fd5b5051919050565b600080600080600080600060e0888a03121561241c578283fd5b87359650602088013595506040880135945060608801359350608088013592506124498960a08a0161223f565b91506124588960c08a0161223f565b905092959891949750929550565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156124f7578581018301518582016040015282016124db565b818111156125085783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e04e6f205a5a5a7320746f207377617608c1b604082015260600190565b60208082526007908201526610b6b4b73a32b960c91b604082015260600190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600d908201526c29bbb0b81031b7b7b63237bbb760991b604082015260600190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600e908201526d46656520636c616d7020302d352560901b604082015260600190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526018908201527f43616e6e6f74206265206d6f7265207468616e20313030250000000000000000604082015260600190565b6020808252602a908201527f4d6967726174696f6e20746f2056322068617320616c7265616479206265656e6040820152690818dbdb5c1b195d195960b21b606082015260800190565b60208082526010908201526f29b2b73232b9103737ba1030b236b4b760811b604082015260600190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526017908201527f546f6b656e207472616e73666572732070617573656421000000000000000000604082015260600190565b6020808252600f908201526e4f6e6c7920676f7665726e616e636560881b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526017908201527f53656e646572206e6f7420676f76206f722061646d696e000000000000000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526022908201527f4d6967726174696f6e2068617320616c7265616479206265656e20637574206f604082015261333360f11b606082015260800190565b60208082526014908201527353656c6c2066656520636c616d7020302d31302560601b604082015260600190565b6020808252600d908201526c4e6f20616c6c6f77616e63653f60981b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b918252602082015260400190565b60ff91909116815260200190565b6001600160a01b038116811461177357600080fdfe71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb145524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e55f3e1a622a4aefd6414c7a9aec83d26f9653d3e3b77d041463c5a5eb6c882864736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.