Token FINN Token
Overview ERC20
Price
$0.00 @ 0.000397 MOVR (+0.17%)
Fully Diluted Market Cap
Total Supply:
100,000,000 FINN
Holders:
4,461 addresses
Contract:
Decimals:
18
Official Site:
Balance
4,824,579.058716517273260564 FINNValue
$7,975.85 ( ~1,916.7999 MOVR) [4.8246%]
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
A community driven AMM crosschain DEX built on Moonriver.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | ![]() | 0XC005A7A1502C9DE16CCDABA7CDA0CEE4AC304993-0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | $0.0017 0.0000001 Btc | $10.28 1.115 0XC005A7A1502C9DE16CCDABA7CDA0CEE4AC304993 | 0.0106% |
2 | ![]() | 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756-0X98878B06940AE243284CA214F92BB71A2B032B8A | $0.0016 0.0000001 Btc | $9.73 5,879.127 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | 55.7735% |
3 | ![]() | 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756-0XE936CAA7F6D9F5C9E907111FCAF7C351C184CDA7 | $0.0017 0.0000001 Btc | $7.77 4,658.283 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | 44.1917% |
4 | ![]() | 0X748134B5F553F2BCBD78C6826DE99A70274BDEB3-0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | $0.0016 0.0000001 Btc | $3.69 3.663 0X748134B5F553F2BCBD78C6826DE99A70274BDEB3 | 0.0348% |
5 | ![]() | 0X9D5BC9B873AED984E2B6A64D4792249D68BBA2FE-0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | $0.0017 0.0000001 Btc | $1.21 2.318 0X9D5BC9B873AED984E2B6A64D4792249D68BBA2FE | 0.0220% |
6 | ![]() | 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756-0X1A93B23281CC1CDE4C4741353F3064709A16197D | $0.0017 0.0000001 Btc | $0.502 303.780 0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | 2.8819% |
7 | ![]() | 0X15B9CA9659F5DFF2B7D35A98DD0790A3CBB3D445-0X9A92B5EBF1F6F6F7D93696FCD44E5CF75035A756 | $0.0016 0.0000001 Btc | $0.2232 0.059 0X15B9CA9659F5DFF2B7D35A98DD0790A3CBB3D445 | 0.0006% |
Contract Name:
FINN
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2021-11-04 */ /** * Submitted for verification at blockscout.com on 2021-09-28 09:17:23.308035Z */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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. */ abstract contract Context { 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; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity >=0.6.0 <0.8.0; // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.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); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/RERC20.sol pragma solidity ^0.6.2; /* * HuckleberryFinance * Reflect Token implementation * App: https://huckleberry.finance * GitHub: https://github.com/huckleberryDex */ contract RERC20 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; address[] private _excluded; string private _name; string private _symbol; uint8 private _decimals; uint256 _taxFee = 100; // 1% uint256 _maxTaxFee = 1000; // 10% uint256 private constant _GRANULARITY = 100; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; event UpdateTaxFee(uint256 previousTaxFee, uint256 newTaxFee); constructor ( uint256 initialSupply, string memory name, string memory symbol, uint8 decimals, uint256 taxFee ) public { _name = name; _symbol = symbol; _decimals = decimals; _taxFee = taxFee; _tTotal = initialSupply; _rTotal = (MAX - (MAX % _tTotal)); _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } 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 _tTotal; } function taxFee() external view returns (uint256) { return _taxFee; } function maxTaxFee() external view returns (uint256) { return _maxTaxFee; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } 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 virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflect(uint256 tAmount) external { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); (uint256 rAmount, uint256 rTransferAmount,,,) = _getValues(tAmount); return deductTransferFee ? rTransferAmount : rAmount; } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function updateTaxFee(uint256 _fee) public onlyOwner { require(_fee <= _maxTaxFee, 'fee must be mess than maxTaxFee'); uint256 previousTaxFee = _taxFee; _taxFee = _fee; emit UpdateTaxFee(previousTaxFee, _taxFee); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { /// @dev neither are excluded _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256) { uint256 tFee = ((tAmount.mul(_taxFee)).div(_GRANULARITY)).div(100); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } } // File: contracts/FINN.sol pragma solidity 0.6.12; /* * HuckleberryFinance * App: https://huckleberry.finance * GitHub: https://github.com/huckleberryfinance */ contract FINN is RERC20 { // 1% fee to all holders constructor (uint256 initialSupply) public RERC20(initialSupply, "FINN Token", "FINN", 18, 100) {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousTaxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTaxFee","type":"uint256"}],"name":"UpdateTaxFee","type":"event"},{"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":"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":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260646009556103e8600a553480156200001c57600080fd5b506040516200376138038062003761833981810160405260208110156200004257600080fd5b8101908080519060200190929190505050806040518060400160405280600a81526020017f46494e4e20546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f46494e4e00000000000000000000000000000000000000000000000000000000815250601260646000620000d6620002c060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35083600690805190602001906200018c929190620002c8565b508260079080519060200190620001a5929190620002c8565b5081600860006101000a81548160ff021916908360ff1602179055508060098190555084600b81905550600b5460001981620001dd57fe5b0660001903600c81905550600c5460016000620001ff620002c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200024d620002c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35050505050506200036e565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030b57805160ff19168380011785556200033c565b828001600101855582156200033c579182015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b91906200034f565b5090565b5b808211156200036a57600081600090555060010162000350565b5090565b6133e3806200037e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063c7992f9a1161007c578063c7992f9a14610674578063cba0e99614610692578063dd62ed3e146106ec578063f2cc0c1814610764578063f2fde38b146107a8578063f84354f1146107ec57610158565b80638da5cb5b146104a957806395d89b41146104dd578063a071dcf414610560578063a457c2d71461057e578063a9059cbb146105e2578063b55053351461064657610158565b80632d838119116101155780632d83811914610332578063313ce5671461037457806339509351146103955780634549b039146103f957806370a0823114610447578063715018a61461049f57610158565b8063053ab1821461015d57806306fdde031461018b578063095ea7b31461020e57806313114a9d1461027257806318160ddd1461029057806323b872dd146102ae575b600080fd5b6101896004803603602081101561017357600080fd5b8101908080359060200190929190505050610830565b005b6101936109c0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d35780820151818401526020810190506101b8565b50505050905090810190601f1680156102005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025a6004803603604081101561022457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a62565b60405180821515815260200191505060405180910390f35b61027a610a80565b6040518082815260200191505060405180910390f35b610298610a8a565b6040518082815260200191505060405180910390f35b61031a600480360360608110156102c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a94565b60405180821515815260200191505060405180910390f35b61035e6004803603602081101561034857600080fd5b8101908080359060200190929190505050610b6d565b6040518082815260200191505060405180910390f35b61037c610bf1565b604051808260ff16815260200191505060405180910390f35b6103e1600480360360408110156103ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c08565b60405180821515815260200191505060405180910390f35b6104316004803603604081101561040f57600080fd5b8101908080359060200190929190803515159060200190929190505050610cbb565b6040518082815260200191505060405180910390f35b6104896004803603602081101561045d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d5f565b6040518082815260200191505060405180910390f35b6104a7610e4a565b005b6104b1610fb7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e5610fe0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561052557808201518184015260208101905061050a565b50505050905090810190601f1680156105525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610568611082565b6040518082815260200191505060405180910390f35b6105ca6004803603604081101561059457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061108c565b60405180821515815260200191505060405180910390f35b61062e600480360360408110156105f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611159565b60405180821515815260200191505060405180910390f35b6106726004803603602081101561065c57600080fd5b8101908080359060200190929190505050611177565b005b61067c6112f1565b6040518082815260200191505060405180910390f35b6106d4600480360360208110156106a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112fb565b60405180821515815260200191505060405180910390f35b61074e6004803603604081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611351565b6040518082815260200191505060405180910390f35b6107a66004803603602081101561077a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d8565b005b6107ea600480360360208110156107be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116d9565b005b61082e6004803603602081101561080257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118cb565b005b600061083a611c3c565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061335d602c913960400191505060405180910390fd5b60006108ea83611c44565b50505050905061094281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061099a81600c54611c9c90919063ffffffff16565b600c819055506109b583600d54611d1f90919063ffffffff16565b600d81905550505050565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f611c3c565b8484611da7565b6001905092915050565b6000600d54905090565b6000600b54905090565b6000610aa1848484611f9e565b610b6284610aad611c3c565b610b5d856040518060600160405280602881526020016132c360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b13611c3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233d9092919063ffffffff16565b611da7565b600190509392505050565b6000600c54821115610bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613230602a913960400191505060405180910390fd5b6000610bd46123f7565b9050610be9818461242290919063ffffffff16565b915050919050565b6000600860009054906101000a900460ff16905090565b6000610cb1610c15611c3c565b84610cac8560036000610c26611c3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b611da7565b6001905092915050565b6000600b54831115610d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b600080610d4185611c44565b5050509150915083610d535781610d55565b805b9250505092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dfa57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e45565b610e42600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6d565b90505b919050565b610e52611c3c565b73ffffffffffffffffffffffffffffffffffffffff16610e70610fb7565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110785780601f1061104d57610100808354040283529160200191611078565b820191906000526020600020905b81548152906001019060200180831161105b57829003601f168201915b5050505050905090565b6000600954905090565b600061114f611099611c3c565b8461114a8560405180606001604052806025815260200161338960259139600360006110c3611c3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233d9092919063ffffffff16565b611da7565b6001905092915050565b600061116d611166611c3c565b8484611f9e565b6001905092915050565b61117f611c3c565b73ffffffffffffffffffffffffffffffffffffffff1661119d610fb7565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a5481111561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f666565206d757374206265206d657373207468616e206d61785461784665650081525060200191505060405180910390fd5b60006009549050816009819055507f3bd44ad33925c1a81e6dea38583782e35a5124cee2473f5fe16d366f0ad0d6b681600954604051808381526020018281526020019250505060405180910390a15050565b6000600a54905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113e0611c3c565b73ffffffffffffffffffffffffffffffffffffffff166113fe610fb7565b73ffffffffffffffffffffffffffffffffffffffff1614611487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561161b576115d7600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e1611c3c565b73ffffffffffffffffffffffffffffffffffffffff166116ff610fb7565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061325a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118d3611c3c565b73ffffffffffffffffffffffffffffffffffffffff166118f1610fb7565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015611c38578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611a6d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c2b57600560016005805490500381548110611ac957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611b0157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611bf157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611c38565b8080600101915050611a3c565b5050565b600033905090565b6000806000806000806000611c58886124ab565b915091506000611c666123f7565b90506000806000611c788c8686612511565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600082821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600080828401905083811015611d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133396024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132806022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133146025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061320d6023913960400191505060405180910390fd5b60008111612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806132eb6029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121a65750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121bb576121b683838361256f565b612338565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561225e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122735761226e8383836127c2565b612337565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123155750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232a57612325838383612a15565b612336565b612335838383612cfd565b5b5b5b505050565b60008383111582906123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123af578082015181840152602081019050612394565b50505050905090810190601f1680156123dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b6000806000612404612ebb565b9150915061241b818361242290919063ffffffff16565b9250505090565b6000808211612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816124a257fe5b04905092915050565b60008060006124eb60646124dd60646124cf6009548961314c90919063ffffffff16565b61242290919063ffffffff16565b61242290919063ffffffff16565b905060006125028286611c9c90919063ffffffff16565b90508082935093505050915091565b60008060008061252a858861314c90919063ffffffff16565b90506000612541868861314c90919063ffffffff16565b905060006125588284611c9c90919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061258086611c44565b945094509450945094506125dc86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061270684600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275383826131d2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006127d386611c44565b9450945094509450945061282f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128c482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129a683826131d2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a2686611c44565b94509450945094509450612a8286600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b1785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bac82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c4184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c8e83826131d2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612d0e86611c44565b94509450945094509450612d6a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dff84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d1f90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e4c83826131d2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000600c5490506000600b54905060005b60058054905081101561310f57826001600060058481548110612eee57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612fd55750816002600060058481548110612f6d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612fec57600c54600b5494509450505050613148565b613075600160006005848154811061300057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c9c90919063ffffffff16565b9250613100600260006005848154811061308b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611c9c90919063ffffffff16565b91508080600101915050612ecf565b50613127600b54600c5461242290919063ffffffff16565b82101561313f57600c54600b54935093505050613148565b81819350935050505b9091565b60008083141561315f57600090506131cc565b600082840290508284828161317057fe5b04146131c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132a26021913960400191505060405180910390fd5b809150505b92915050565b6131e782600c54611c9c90919063ffffffff16565b600c8190555061320281600d54611d1f90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205c6262399c11c0d85eb10b324e174096efa37c9f0ab1761cf2af5a70088f7e7c64736f6c634300060c003300000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
-----Decoded View---------------
Arg [0] : initialSupply (uint256): 100000000000000000000000000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Deployed ByteCode Sourcemap
33128:164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25669:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23363:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24463:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25574:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23640:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24632:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26384:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23549:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24953:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26055:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23931:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21270:148;;;:::i;:::-;;20619:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23454;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23743:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25179:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24137:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27470:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23834:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25456:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24312:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26644:332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21573:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26984:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25669:378;25723:14;25740:12;:10;:12::i;:::-;25723:29;;25772:11;:19;25784:6;25772:19;;;;;;;;;;;;;;;;;;;;;;;;;25771:20;25763:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25852:15;25875:19;25886:7;25875:10;:19::i;:::-;25851:43;;;;;;25923:28;25943:7;25923;:15;25931:6;25923:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25905:7;:15;25913:6;25905:15;;;;;;;;;;;;;;;:46;;;;25972:20;25984:7;25972;;:11;;:20;;;;:::i;:::-;25962:7;:30;;;;26016:23;26031:7;26016:10;;:14;;:23;;;;:::i;:::-;26003:10;:36;;;;25669:378;;;:::o;23363:83::-;23400:13;23433:5;23426:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23363:83;:::o;24463:161::-;24538:4;24555:39;24564:12;:10;:12::i;:::-;24578:7;24587:6;24555:8;:39::i;:::-;24612:4;24605:11;;24463:161;;;;:::o;25574:87::-;25616:7;25643:10;;25636:17;;25574:87;:::o;23640:95::-;23693:7;23720;;23713:14;;23640:95;:::o;24632:313::-;24730:4;24747:36;24757:6;24765:9;24776:6;24747:9;:36::i;:::-;24794:121;24803:6;24811:12;:10;:12::i;:::-;24825:89;24863:6;24825:89;;;;;;;;;;;;;;;;;:11;:19;24837:6;24825:19;;;;;;;;;;;;;;;:33;24845:12;:10;:12::i;:::-;24825:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24794:8;:121::i;:::-;24933:4;24926:11;;24632:313;;;;;:::o;26384:252::-;26450:7;26489;;26478;:18;;26470:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26554:19;26576:10;:8;:10::i;:::-;26554:32;;26604:24;26616:11;26604:7;:11;;:24;;;;:::i;:::-;26597:31;;;26384:252;;;:::o;23549:83::-;23590:5;23615:9;;;;;;;;;;;23608:16;;23549:83;:::o;24953:218::-;25041:4;25058:83;25067:12;:10;:12::i;:::-;25081:7;25090:50;25129:10;25090:11;:25;25102:12;:10;:12::i;:::-;25090:25;;;;;;;;;;;;;;;:34;25116:7;25090:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;25058:8;:83::i;:::-;25159:4;25152:11;;24953:218;;;;:::o;26055:321::-;26145:7;26184;;26173;:18;;26165:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26239:15;26256:23;26286:19;26297:7;26286:10;:19::i;:::-;26238:67;;;;;;;26323:17;:45;;26361:7;26323:45;;;26343:15;26323:45;26316:52;;;;26055:321;;;;:::o;23931:198::-;23997:7;24021:11;:20;24033:7;24021:20;;;;;;;;;;;;;;;;;;;;;;;;;24017:49;;;24050:7;:16;24058:7;24050:16;;;;;;;;;;;;;;;;24043:23;;;;24017:49;24084:37;24104:7;:16;24112:7;24104:16;;;;;;;;;;;;;;;;24084:19;:37::i;:::-;24077:44;;23931:198;;;;:::o;21270:148::-;20850:12;:10;:12::i;:::-;20839:23;;:7;:5;:7::i;:::-;:23;;;20831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21377:1:::1;21340:40;;21361:6;::::0;::::1;;;;;;;;21340:40;;;;;;;;;;;;21408:1;21391:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;21270:148::o:0;20619:87::-;20665:7;20692:6;;;;;;;;;;;20685:13;;20619:87;:::o;23454:::-;23493:13;23526:7;23519:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23454:87;:::o;23743:83::-;23784:7;23811;;23804:14;;23743:83;:::o;25179:269::-;25272:4;25289:129;25298:12;:10;:12::i;:::-;25312:7;25321:96;25360:15;25321:96;;;;;;;;;;;;;;;;;:11;:25;25333:12;:10;:12::i;:::-;25321:25;;;;;;;;;;;;;;;:34;25347:7;25321:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;25289:8;:129::i;:::-;25436:4;25429:11;;25179:269;;;;:::o;24137:167::-;24215:4;24232:42;24242:12;:10;:12::i;:::-;24256:9;24267:6;24232:9;:42::i;:::-;24292:4;24285:11;;24137:167;;;;:::o;27470:255::-;20850:12;:10;:12::i;:::-;20839:23;;:7;:5;:7::i;:::-;:23;;;20831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27550:10:::1;;27542:4;:18;;27534:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27607:22;27632:7;;27607:32;;27660:4;27650:7;:14;;;;27680:37;27693:14;27709:7;;27680:37;;;;;;;;;;;;;;;;;;;;;;;;20910:1;27470:255:::0;:::o;23834:89::-;23878:7;23905:10;;23898:17;;23834:89;:::o;25456:110::-;25514:4;25538:11;:20;25550:7;25538:20;;;;;;;;;;;;;;;;;;;;;;;;;25531:27;;25456:110;;;:::o;24312:143::-;24393:7;24420:11;:18;24432:5;24420:18;;;;;;;;;;;;;;;:27;24439:7;24420:27;;;;;;;;;;;;;;;;24413:34;;24312:143;;;;:::o;26644:332::-;20850:12;:10;:12::i;:::-;20839:23;;:7;:5;:7::i;:::-;:23;;;20831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26726:11:::1;:20;26738:7;26726:20;;;;;;;;;;;;;;;;;;;;;;;;;26725:21;26717:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26811:1;26792:7;:16;26800:7;26792:16;;;;;;;;;;;;;;;;:20;26789:108;;;26848:37;26868:7;:16;26876:7;26868:16;;;;;;;;;;;;;;;;26848:19;:37::i;:::-;26829:7;:16;26837:7;26829:16;;;;;;;;;;;;;;;:56;;;;26789:108;26930:4;26907:11;:20;26919:7;26907:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26945:9;26960:7;26945:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26644:332:::0;:::o;21573:244::-;20850:12;:10;:12::i;:::-;20839:23;;:7;:5;:7::i;:::-;:23;;;20831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21682:1:::1;21662:22;;:8;:22;;;;21654:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21772:8;21743:38;;21764:6;::::0;::::1;;;;;;;;21743:38;;;;;;;;;;;;21801:8;21792:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;21573:244:::0;:::o;26984:478::-;20850:12;:10;:12::i;:::-;20839:23;;:7;:5;:7::i;:::-;:23;;;20831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27065:11:::1;:20;27077:7;27065:20;;;;;;;;;;;;;;;;;;;;;;;;;27057:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27133:9;27128:327;27152:9;:16;;;;27148:1;:20;27128:327;;;27210:7;27194:23;;:9;27204:1;27194:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;27190:254;;;27253:9;27282:1;27263:9;:16;;;;:20;27253:31;;;;;;;;;;;;;;;;;;;;;;;;;27238:9;27248:1;27238:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27322:1;27303:7;:16;27311:7;27303:16;;;;;;;;;;;;;;;:20;;;;27365:5;27342:11;:20;27354:7;27342:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27389:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27423:5;;27190:254;27170:3;;;;;;;27128:327;;;;26984:478:::0;:::o;755:106::-;808:15;843:10;836:17;;755:106;:::o;31163:410::-;31222:7;31231;31240;31249;31258;31279:23;31304:12;31320:20;31332:7;31320:11;:20::i;:::-;31278:62;;;;31351:19;31373:10;:8;:10::i;:::-;31351:32;;31395:15;31412:23;31437:12;31453:39;31465:7;31474:4;31480:11;31453;:39::i;:::-;31394:98;;;;;;31511:7;31520:15;31537:4;31543:15;31560:4;31503:62;;;;;;;;;;;;;;;;31163:410;;;;;;;:::o;7270:158::-;7328:7;7361:1;7356;:6;;7348:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7419:1;7415;:5;7408:12;;7270:158;;;;:::o;6808:179::-;6866:7;6886:9;6902:1;6898;:5;6886:17;;6927:1;6922;:6;;6914:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6978:1;6971:8;;;6808:179;;;;:::o;27733:337::-;27843:1;27826:19;;:5;:19;;;;27818:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27924:1;27905:21;;:7;:21;;;;27897:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28008:6;27978:11;:18;27990:5;27978:18;;;;;;;;;;;;;;;:27;27997:7;27978:27;;;;;;;;;;;;;;;:36;;;;28046:7;28030:32;;28039:5;28030:32;;;28055:6;28030:32;;;;;;;;;;;;;;;;;;27733:337;;;:::o;28078:844::-;28193:1;28175:20;;:6;:20;;;;28167:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28277:1;28256:23;;:9;:23;;;;28248:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28347:1;28338:6;:10;28330:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28409:11;:19;28421:6;28409:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28433:11;:22;28445:9;28433:22;;;;;;;;;;;;;;;;;;;;;;;;;28432:23;28409:46;28405:510;;;28472:48;28494:6;28502:9;28513:6;28472:21;:48::i;:::-;28405:510;;;28543:11;:19;28555:6;28543:19;;;;;;;;;;;;;;;;;;;;;;;;;28542:20;:46;;;;;28566:11;:22;28578:9;28566:22;;;;;;;;;;;;;;;;;;;;;;;;;28542:46;28538:377;;;28605:46;28625:6;28633:9;28644:6;28605:19;:46::i;:::-;28538:377;;;28673:11;:19;28685:6;28673:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28696:11;:22;28708:9;28696:22;;;;;;;;;;;;;;;;;;;;;;;;;28673:45;28669:246;;;28735:48;28757:6;28765:9;28776:6;28735:21;:48::i;:::-;28669:246;;;28859:44;28877:6;28885:9;28896:6;28859:17;:44::i;:::-;28669:246;28538:377;28405:510;28078:844;;;:::o;9635:166::-;9721:7;9754:1;9749;:6;;9757:12;9741:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9792:1;9788;:5;9781:12;;9635:166;;;;;:::o;32189:163::-;32230:7;32251:15;32268;32287:19;:17;:19::i;:::-;32250:56;;;;32324:20;32336:7;32324;:11;;:20;;;;:::i;:::-;32317:27;;;;32189:163;:::o;8385:153::-;8443:7;8475:1;8471;:5;8463:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8529:1;8525;:5;;;;;;8518:12;;8385:153;;;;:::o;31581:258::-;31641:7;31650;31670:12;31685:51;31732:3;31686:40;22657:3;31687:20;31699:7;;31687;:11;;:20;;;;:::i;:::-;31686:26;;:40;;;;:::i;:::-;31685:46;;:51;;;;:::i;:::-;31670:66;;31747:23;31773:17;31785:4;31773:7;:11;;:17;;;;:::i;:::-;31747:43;;31809:15;31826:4;31801:30;;;;;;31581:258;;;:::o;31847:334::-;31942:7;31951;31960;31980:15;31998:24;32010:11;31998:7;:11;;:24;;;;:::i;:::-;31980:42;;32033:12;32048:21;32057:11;32048:4;:8;;:21;;;;:::i;:::-;32033:36;;32080:23;32106:17;32118:4;32106:7;:11;;:17;;;;:::i;:::-;32080:43;;32142:7;32151:15;32168:4;32134:39;;;;;;;;;31847:334;;;;;;;:::o;29909:506::-;30012:15;30029:23;30054:12;30068:23;30093:12;30109:19;30120:7;30109:10;:19::i;:::-;30011:117;;;;;;;;;;30157:28;30177:7;30157;:15;30165:6;30157:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30139:7;:15;30147:6;30139:15;;;;;;;;;;;;;;;:46;;;;30214:28;30234:7;30214;:15;30222:6;30214:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30196:7;:15;30204:6;30196:15;;;;;;;;;;;;;;;:46;;;;30274:39;30297:15;30274:7;:18;30282:9;30274:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30253:7;:18;30261:9;30253:18;;;;;;;;;;;;;;;:60;;;;30324:23;30336:4;30342;30324:11;:23::i;:::-;30380:9;30363:44;;30372:6;30363:44;;;30391:15;30363:44;;;;;;;;;;;;;;;;;;29909:506;;;;;;;;:::o;29383:518::-;29484:15;29501:23;29526:12;29540:23;29565:12;29581:19;29592:7;29581:10;:19::i;:::-;29483:117;;;;;;;;;;29629:28;29649:7;29629;:15;29637:6;29629:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29611:7;:15;29619:6;29611:15;;;;;;;;;;;;;;;:46;;;;29689:39;29712:15;29689:7;:18;29697:9;29689:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29668:7;:18;29676:9;29668:18;;;;;;;;;;;;;;;:60;;;;29760:39;29783:15;29760:7;:18;29768:9;29760:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29739:7;:18;29747:9;29739:18;;;;;;;;;;;;;;;:60;;;;29810:23;29822:4;29828;29810:11;:23::i;:::-;29866:9;29849:44;;29858:6;29849:44;;;29877:15;29849:44;;;;;;;;;;;;;;;;;;29383:518;;;;;;;;:::o;30423:577::-;30526:15;30543:23;30568:12;30582:23;30607:12;30623:19;30634:7;30623:10;:19::i;:::-;30525:117;;;;;;;;;;30671:28;30691:7;30671;:15;30679:6;30671:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30653:7;:15;30661:6;30653:15;;;;;;;;;;;;;;;:46;;;;30728:28;30748:7;30728;:15;30736:6;30728:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30710:7;:15;30718:6;30710:15;;;;;;;;;;;;;;;:46;;;;30788:39;30811:15;30788:7;:18;30796:9;30788:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30767:7;:18;30775:9;30767:18;;;;;;;;;;;;;;;:60;;;;30859:39;30882:15;30859:7;:18;30867:9;30859:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30838:7;:18;30846:9;30838:18;;;;;;;;;;;;;;;:60;;;;30909:23;30921:4;30927;30909:11;:23::i;:::-;30965:9;30948:44;;30957:6;30948:44;;;30976:15;30948:44;;;;;;;;;;;;;;;;;;30423:577;;;;;;;;:::o;28930:445::-;29029:15;29046:23;29071:12;29085:23;29110:12;29126:19;29137:7;29126:10;:19::i;:::-;29028:117;;;;;;;;;;29174:28;29194:7;29174;:15;29182:6;29174:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29156:7;:15;29164:6;29156:15;;;;;;;;;;;;;;;:46;;;;29234:39;29257:15;29234:7;:18;29242:9;29234:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29213:7;:18;29221:9;29213:18;;;;;;;;;;;;;;;:60;;;;29284:23;29296:4;29302;29284:11;:23::i;:::-;29340:9;29323:44;;29332:6;29323:44;;;29351:15;29323:44;;;;;;;;;;;;;;;;;;28930:445;;;;;;;;:::o;32360:555::-;32410:7;32419;32439:15;32457:7;;32439:25;;32475:15;32493:7;;32475:25;;32516:9;32511:289;32535:9;:16;;;;32531:1;:20;32511:289;;;32601:7;32577;:21;32585:9;32595:1;32585:12;;;;;;;;;;;;;;;;;;;;;;;;;32577:21;;;;;;;;;;;;;;;;:31;:66;;;;32636:7;32612;:21;32620:9;32630:1;32620:12;;;;;;;;;;;;;;;;;;;;;;;;;32612:21;;;;;;;;;;;;;;;;:31;32577:66;32573:97;;;32653:7;;32662;;32645:25;;;;;;;;;32573:97;32695:34;32707:7;:21;32715:9;32725:1;32715:12;;;;;;;;;;;;;;;;;;;;;;;;;32707:21;;;;;;;;;;;;;;;;32695:7;:11;;:34;;;;:::i;:::-;32685:44;;32754:34;32766:7;:21;32774:9;32784:1;32774:12;;;;;;;;;;;;;;;;;;;;;;;;;32766:21;;;;;;;;;;;;;;;;32754:7;:11;;:34;;;;:::i;:::-;32744:44;;32553:3;;;;;;;32511:289;;;;32824:20;32836:7;;32824;;:11;;:20;;;;:::i;:::-;32814:7;:30;32810:61;;;32854:7;;32863;;32846:25;;;;;;;;32810:61;32890:7;32899;32882:25;;;;;;32360:555;;;:::o;7687:220::-;7745:7;7774:1;7769;:6;7765:20;;;7784:1;7777:8;;;;7765:20;7796:9;7812:1;7808;:5;7796:17;;7841:1;7836;7832;:5;;;;;;:10;7824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7898:1;7891:8;;;7687:220;;;;;:::o;31008:147::-;31086:17;31098:4;31086:7;;:11;;:17;;;;:::i;:::-;31076:7;:27;;;;31127:20;31142:4;31127:10;;:14;;:20;;;;:::i;:::-;31114:10;:33;;;;31008:147;;:::o
Swarm Source
ipfs://5c6262399c11c0d85eb10b324e174096efa37c9f0ab1761cf2af5a70088f7e7c