Token
Token (TKN)
ERC-20
Overview
Max Total Supply
57,785,424,430.407562467577217707 TKN
Holders
4
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
5,147,187.091405297408190148 TKNLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "./pancake-swap/libraries/TransferHelper.sol"; import "./interfaces/IUniswapV2Pair.sol"; import "./interfaces/IUniswapV2Factory.sol"; import "./interfaces/IUniswapV2Router.sol"; import { BokkyPooBahsDateTimeLibrary as TimeLibrary } from "./libraries/BokkyPooBahsDateTimeLibrary.sol"; import "./TokenERC20.sol"; import "./Control.sol"; contract Token is TokenERC20, Control, ReentrancyGuard { IUniswapV2Router public immutable dexRouter; address public immutable dexFactory; address public pair; uint256 private _totalBurn; uint256 private _totalFee; mapping(address => UserLimit) private _userLimit; struct UserLimit { uint128 year; uint128 month; uint256 monthLimit; } modifier initialized() { require(_isInitialized, "Contract must be initialized"); _; } event Rebase(uint256 newTotalSupply, uint256 previousTotalSupply); // This is denominated in Fragments, because the gons-fragments conversion might change before // it's fully paid. constructor( string memory _name, string memory _symbol, address _admin, address _feeTaker, IUniswapV2Router _dexRouter, address _dexFactory ) TokenERC20(_name, _symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _admin); dexRouter = _dexRouter; dexFactory = _dexFactory; _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonsPerFragment = TOTAL_GONS / _totalSupply; _gonBalances[_admin] = TOTAL_GONS; feeAddress = _feeTaker; } /** * @notice Initialize contract once pool is created * @param _initialPrice: price with 18 decimals */ function initializeContract( uint256 _initialPrice, address _pair ) external onlyRole(DEFAULT_ADMIN_ROLE) { require(!_isInitialized, "Already initialized"); require(_pair != address(0), "Not valid address"); _isInitialized = true; lastRebasePrice = _initialPrice; pair = _pair; } /** * @notice Get what amount user can sell without fee * @param user: address of user * @return limitAvail fee free amount */ function getFreeToSell(address user) external view initialized returns (uint256 limitAvail) { (uint256 year, uint256 month, ) = TimeLibrary.timestampToDate(block.timestamp); UserLimit storage limit = _userLimit[user]; if (limit.year == 0 || limit.year != year || limit.month != month) { limitAvail = (balanceOf(user) * feeFree) / 100; } else { limitAvail = _maxSub((balanceOf(user) * feeFree) / 100, _userLimit[user].monthLimit); } } /** * @notice External Rebase function which makes inflation rebase or averagePriceFall rebase * @dev Notifies Fragments contract about a new rebase cycle. */ function rebase(uint256 currentPrice) external initialized isBackendRole { require(currentPrice <= lastRebasePrice * 99 / 100, "Rebase is not needed!"); uint256 currentSupply = (lastRebasePrice * _totalSupply) / currentPrice; uint256 supplyDelta = currentSupply - _totalSupply; uint256 previousSupply = _totalSupply; lastRebasePrice = currentPrice; _rebase(supplyDelta); IUniswapV2Pair(pair).skim(feeAddress); emit Rebase(currentSupply, previousSupply); } /** * @notice private function for rebase mechanism * @dev the function takes into account change of totalBurn, totalFee * @param supplyDelta: set how much should changes totalSupply */ function _rebase(uint256 supplyDelta) private { _totalSupply = (_totalSupply + supplyDelta > MAX_SUPPLY) ? MAX_SUPPLY : _totalSupply + supplyDelta; _gonsPerFragment = TOTAL_GONS / (_totalSupply + _totalFee + _totalBurn); } /** * @notice Override transfer function to account for the commission * @param from: address sender * @param to: address recipient * @param value: amount of tokens */ function _transfer( address from, address to, uint256 value ) internal override { require(to != address(0x0), "Not valid address"); require(value != 0, "Value must not be 0"); uint256 gonValue = value * _gonsPerFragment; uint256 fee; uint256 feeGon; if (_isDexAddress(to) && from != whitelistAddress) { (fee, feeGon) = _feeCount(from, value); require(gonValue + feeGon <= _gonBalances[from], "Not enough funds"); _feeToOwner(feeGon); _feeToBurn(fee); _feeToHolders(fee); _userLimit[from].monthLimit = _userLimit[from].monthLimit + (value); } _gonBalances[from] = _gonBalances[from] - gonValue - feeGon; _gonBalances[to] = _gonBalances[to] + (gonValue); if (_isDexAddress(to) && from != whitelistAddress) { _rebase(0); } emit Transfer(from, to, value + fee); } /** * @notice Update limit for user * @param user: address user */ function _updateLimit(address user) private { (uint256 year, uint256 month, ) = TimeLibrary.timestampToDate(block.timestamp); UserLimit storage limit = _userLimit[user]; if (limit.year == 0 || limit.year != year || limit.month != month) { limit.year = uint16(year); limit.month = uint16(month); limit.monthLimit = 0; } } /** * @notice Calculates fee * @param from: address sender * @param value: amount of transfer * @return fee in external tokens * @return feeGon in internal tokens */ function _feeCount(address from, uint256 value) private returns (uint256 fee, uint256 feeGon) { _updateLimit(from); // LimitAvailable = max((0.1 * balanceUser - curLimit),0) uint256 limitAvail = _maxSub((balanceOf(from) * feeFree) / 100, _userLimit[from].monthLimit); fee = (_maxSub(value, limitAvail) * transferFee) / 100; feeGon = fee * _gonsPerFragment; } /** * @notice Owner fee * @param feeGon: fee for transfer on Gon */ function _feeToOwner(uint256 feeGon) private { _gonBalances[feeAddress] = _gonBalances[feeAddress] + ((feeGon * operateFee) / 100); } /** * @notice Burn fee * @param fee: fee for transfer */ function _feeToBurn(uint256 fee) private { _totalBurn = _totalBurn + ((fee * burnFee) / 100); _totalSupply = _totalSupply - ((fee * burnFee) / 100); } /** * @notice Holders fee * @param fee: fee for transfer */ function _feeToHolders(uint256 fee) private { _totalFee = _totalFee + ((fee * holderFee) / 100); } function _isContract(address addr) private view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } function _isDexAddress(address destination) private view returns (bool) { if (!_isContract(destination)) return false; address token0; try IUniswapV2Pair(destination).token0() returns (address _token0) { token0 = _token0; } catch (bytes memory) { return false; } address token1; try IUniswapV2Pair(destination).token1() returns (address _token1) { token1 = _token1; } catch (bytes memory) { return false; } address goodPair = IUniswapV2Factory(dexFactory).getPair(token0, token1); if (goodPair != destination) { return false; } if (token0 != address(this) && token1 != address(this)) { return false; } return true; } /** * @notice max(0, left - right) * @param left: first var * @param right: second var * @return maximum from 0 and (left - right) */ function _maxSub(uint256 left, uint256 right) private pure returns (uint256) { return left >= right ? left - right : 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferETH: ETH transfer failed" ); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; // ---------------------------------------------------------------------------- // BokkyPooBah's DateTime Library v1.01 // // A gas-efficient Solidity date and time library // // https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary // // Tested date range 1970/01/01 to 2345/12/31 // // Conventions: // Unit | Range | Notes // :-------- |:-------------:|:----- // timestamp | >= 0 | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC // year | 1970 ... 2345 | // month | 1 ... 12 | // day | 1 ... 31 | // hour | 0 ... 23 | // minute | 0 ... 59 | // second | 0 ... 59 | // dayOfWeek | 1 ... 7 | 1 = Monday, ..., 7 = Sunday // // // Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence. // ---------------------------------------------------------------------------- library BokkyPooBahsDateTimeLibrary { uint256 constant SECONDS_PER_DAY = 24 * 60 * 60; uint256 constant SECONDS_PER_HOUR = 60 * 60; uint256 constant SECONDS_PER_MINUTE = 60; int256 constant OFFSET19700101 = 2440588; // uint256 constant SECONDS_PER_DAY = 180; // uint256 constant SECONDS_PER_HOUR = 60; // uint256 constant SECONDS_PER_MINUTE = 1; // int256 constant OFFSET19700101 = 2440588; function _daysToDate(uint256 _days) internal pure returns ( uint256 year, uint256 month, uint256 day ) { int256 __days = int256(_days); int256 L = __days + 68569 + OFFSET19700101; int256 N = (4 * L) / 146097; L = L - (146097 * N + 3) / 4; int256 _year = (4000 * (L + 1)) / 1461001; L = L - (1461 * _year) / 4 + 31; int256 _month = (80 * L) / 2447; int256 _day = L - (2447 * _month) / 80; L = _month / 11; _month = _month + 2 - 12 * L; _year = 100 * (N - 49) + _year + L; year = uint256(_year); month = uint256(_month); day = uint256(_day); } function timestampToDate(uint256 timestamp) internal pure returns ( uint256 year, uint256 month, uint256 day ) { (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY); } function addDays(uint256 timestamp, uint256 _days) internal pure returns (uint256 newTimestamp) { newTimestamp = timestamp + _days * SECONDS_PER_DAY; require(newTimestamp >= timestamp); } function diffDays(uint256 fromTimestamp, uint256 toTimestamp) internal pure returns (uint256 _days) { require(fromTimestamp <= toTimestamp); _days = (toTimestamp - fromTimestamp) / SECONDS_PER_DAY; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IUniswapV2Router { function WETH() external view returns (address); function factory() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IUniswapV2Pair { function token0() external view returns (address); function token1() external view returns (address); function skim(address to) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; abstract contract TokenERC20 is ERC20 { uint8 internal constant DECIMALS = 18; uint256 internal constant MAX_UINT256 = type(uint256).max; uint256 internal constant INITIAL_FRAGMENTS_SUPPLY = 2 * 10**9 * 10**DECIMALS; // TOTAL_GONS is a multiple of INITIAL_FRAGMENTS_SUPPLY so that _gonsPerFragment is an integer. // Use the highest value that fits in a uint256 for max granularity. uint256 internal constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); // MAX_SUPPLY = maximum integer < (sqrt(4*TOTAL_GONS + 1) - 1) / 2 uint256 internal constant MAX_SUPPLY = type(uint128).max; // (2^128) - 1 // Rate conversion uint256 internal _gonsPerFragment; uint256 internal _totalSupply; // Inner balance mapping(address => uint256) internal _gonBalances; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} /** * @return The total number of fragments. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @param who The address to query. * @return The balance of the specified address. */ function balanceOf(address who) public view override returns (uint256) { return _gonBalances[who] / _gonsPerFragment; } /** * @return Token decimals. */ function decimals() public pure override returns (uint8) { return DECIMALS; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "@openzeppelin/contracts/access/AccessControl.sol"; abstract contract Control is AccessControl { bytes32 public constant MANAGER = keccak256("manager"); bytes32 public constant BACKEND = keccak256("backend"); address public feeAddress; address public whitelistAddress; uint256 public lastRebasePrice; uint8 public transferFee = 50; uint8 public feeFree = 10; uint8 public operateFee = 10; uint8 public burnFee = 10; uint8 public holderFee = 80; uint16 public time = 3600; uint32 public coeffInflations = 1200; // coeff with 2 decimals bool internal _isInitialized; modifier isValidPercent(uint256 percent) { require(percent >= 0 && percent <= 100, "Not valid value"); _; } modifier isPermitToChange() { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || hasRole(MANAGER, msg.sender), "You are not allowed"); _; } modifier isBackendRole() { require(hasRole(BACKEND, msg.sender), "Not backend"); _; } modifier isValidAddress(address adr) { require(adr != address(0), "Address must not be '0x0'"); _; } /** * @notice Set address which will receive fee * @param _feeAddress: fee address */ function setFeeAddress(address _feeAddress) external isPermitToChange isValidAddress(_feeAddress) { feeAddress = _feeAddress; } /** * @notice Set whitelist for owner * @param _whitelistAddress: address from which would be added liqudity */ function setWhitelistAddress(address _whitelistAddress) external isPermitToChange isValidAddress(_whitelistAddress) { whitelistAddress = _whitelistAddress; } /** * @notice Set time which will price from oracle counts valid * @param _time: time in seconds */ function setTime(uint16 _time) external isPermitToChange { time = _time; } /** * @notice Set percentages which takes from any transfer to dex pools * @param _transferFee: number in range [0,100] */ function setTransferFee(uint8 _transferFee) external isValidPercent(_transferFee) isPermitToChange { transferFee = _transferFee; } /** * @notice Set percentages which user can sold monthly without fee * @param _feeFree: number in range [0,100] */ function setFeeFree(uint8 _feeFree) external isValidPercent(_feeFree) isPermitToChange { feeFree = _feeFree; } /** * @notice Set distribution in percentages of fee that takes from sold * @dev burn fee will calculate as 100 - operateFee - holderFee * @param _operateFee: fee to operation address in range [0,100] * @param _holderFee: fee to all holders in range [0,100] */ function setFee(uint8 _operateFee, uint8 _holderFee) external isValidPercent(_operateFee) isValidPercent(_holderFee) isPermitToChange { require(_operateFee + _holderFee <= 100, "Fee sum must be below 100"); operateFee = _operateFee; holderFee = _holderFee; burnFee = 100 - _operateFee - _holderFee; } /** * @notice Set rate of inflation for estimate price * @param inflKoef: rate of inflation with two decimals */ function setInflactionKoeff(uint32 inflKoef) external isPermitToChange { require(inflKoef != 0, "Must not be 0"); coeffInflations = inflKoef; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "../utils/Context.sol"; import "../utils/Strings.sol"; import "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [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. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 20000 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_feeTaker","type":"address"},{"internalType":"contract IUniswapV2Router","name":"_dexRouter","type":"address"},{"internalType":"address","name":"_dexFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousTotalSupply","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BACKEND","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coeffInflations","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeFree","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getFreeToSell","outputs":[{"internalType":"uint256","name":"limitAvail","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":"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":[],"name":"holderFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"_initialPrice","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"}],"name":"initializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRebasePrice","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":"operateFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentPrice","type":"uint256"}],"name":"rebase","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":"uint8","name":"_operateFee","type":"uint8"},{"internalType":"uint8","name":"_holderFee","type":"uint8"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeFree","type":"uint8"}],"name":"setFeeFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"inflKoef","type":"uint32"}],"name":"setInflactionKoeff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_time","type":"uint16"}],"name":"setTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_transferFee","type":"uint8"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistAddress","type":"address"}],"name":"setWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"time","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":[],"name":"transferFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"whitelistAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0604052600c80546001600160581b0319166804b00e10500a0a0a321790553480156200002c57600080fd5b5060405162003bc538038062003bc58339810160408190526200004f91620003e0565b8585818181600390805190602001906200006b92919062000254565b5080516200008190600490602084019062000254565b50506001600d55506200009a915060009050856200018d565b6001600160a01b03808316608052811660a052620000bb6012600a620005b3565b620000cb906377359400620005cb565b6006819055620000de6012600a620005b3565b620000ee906377359400620005cb565b620000fc9060001962000603565b6200010a906000196200061a565b62000116919062000634565b600555620001276012600a620005b3565b62000137906377359400620005cb565b620001459060001962000603565b62000153906000196200061a565b6001600160a01b039485166000908152600760205260409020555050600980546001600160a01b0319169190921617905550620006889050565b6200019982826200019d565b5050565b620001a9828262000227565b620001995760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001e33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b82805462000262906200064b565b90600052602060002090601f016020900481019282620002865760008555620002d1565b82601f10620002a157805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d1578251825591602001919060010190620002b4565b50620002df929150620002e3565b5090565b5b80821115620002df5760008155600101620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200032257600080fd5b81516001600160401b03808211156200033f576200033f620002fa565b604051601f8301601f19908116603f011681019082821181831017156200036a576200036a620002fa565b816040528381526020925086838588010111156200038757600080fd5b600091505b83821015620003ab57858201830151818301840152908201906200038c565b83821115620003bd5760008385830101525b9695505050505050565b6001600160a01b0381168114620003dd57600080fd5b50565b60008060008060008060c08789031215620003fa57600080fd5b86516001600160401b03808211156200041257600080fd5b620004208a838b0162000310565b975060208901519150808211156200043757600080fd5b506200044689828a0162000310565b95505060408701516200045981620003c7565b60608801519094506200046c81620003c7565b60808801519093506200047f81620003c7565b60a08801519092506200049281620003c7565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004f7578160001904821115620004db57620004db620004a0565b80851615620004e957918102915b93841c9390800290620004bb565b509250929050565b60008262000510575060016200024e565b816200051f575060006200024e565b8160018114620005385760028114620005435762000563565b60019150506200024e565b60ff841115620005575762000557620004a0565b50506001821b6200024e565b5060208310610133831016604e8410600b841016171562000588575081810a6200024e565b620005948383620004b6565b8060001904821115620005ab57620005ab620004a0565b029392505050565b6000620005c460ff841683620004ff565b9392505050565b6000816000190483118215151615620005e857620005e8620004a0565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620006155762000615620005ed565b500690565b6000828210156200062f576200062f620004a0565b500390565b600082620006465762000646620005ed565b500490565b600181811c908216806200066057607f821691505b602082108114156200068257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613510620006b56000396000818161067601526127720152600061033001526135106000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806370a0823111610191578063a8aa1b31116100e3578063bc4f2d6d11610097578063e5002a0511610071578063e5002a0514610704578063f6af343114610724578063fce589d81461074b57600080fd5b8063bc4f2d6d14610698578063d547741f146106ab578063dd62ed3e146106be57600080fd5b8063acb2ad6f116100c8578063acb2ad6f1461064f578063b6f2e8021461065c578063b8d8fbb41461067157600080fd5b8063a8aa1b311461061c578063a9059cbb1461063c57600080fd5b806391d1485411610145578063a217fddf1161011f578063a217fddf146105ee578063a224c745146105f6578063a457c2d71461060957600080fd5b806391d148541461058d57806395d89b41146105d35780639fdef416146105db57600080fd5b80638705fcd4116101765780638705fcd41461055457806389cc145a146105675780638b8676bd1461057a57600080fd5b806370a08231146105115780637e04e0231461052457600080fd5b806323b872dd1161024a57806339509351116101fe57806341275358116101d857806341275358146104cb5780635031429e146104eb57806366874f63146104fe57600080fd5b806339509351146104925780634087b80c146104a557806340ec8cc6146104b857600080fd5b80632f2ff15d1161022f5780632f2ff15d14610465578063313ce5671461047857806336568abe1461047f57600080fd5b806323b872dd1461042f578063248a9ca31461044257600080fd5b806316ada547116102a15780631b2df850116102865780631b2df850146103db5780631eaac44e146104025780631fbe53311461042657600080fd5b806316ada5471461039f57806318160ddd146103c957600080fd5b80630758d924116102d25780630758d9241461032b578063095ea7b3146103775780631075ae8b1461038a57600080fd5b806301ffc9a7146102ee57806306fdde0314610316575b600080fd5b6103016102fc366004612c4d565b61075f565b60405190151581526020015b60405180910390f35b61031e6107f8565b60405161030d9190612cbb565b6103527f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030d565b610301610385366004612d31565b61088a565b61039d610398366004612d5d565b6108a0565b005b600c546103b69065010000000000900461ffff1681565b60405161ffff909116815260200161030d565b6006545b60405190815260200161030d565b6103cd7f2447c43a6160806768d4c947ce727fb12b7f2700badae716947943ea245c25d681565b600c5461041490610100900460ff1681565b60405160ff909116815260200161030d565b6103cd600b5481565b61030161043d366004612d8d565b6109fb565b6103cd610450366004612dce565b60009081526008602052604090206001015490565b61039d610473366004612d5d565b610ac7565b6012610414565b61039d61048d366004612d5d565b610af2565b6103016104a0366004612d31565b610b8b565b61039d6104b3366004612dfd565b610bd4565b600c546104149062010000900460ff1681565b6009546103529073ffffffffffffffffffffffffffffffffffffffff1681565b61039d6104f9366004612e18565b610d15565b61039d61050c366004612e3e565b610e61565b6103cd61051f366004612e62565b610f56565b600c5461053f90670100000000000000900463ffffffff1681565b60405163ffffffff909116815260200161030d565b61039d610562366004612e62565b610f8a565b61039d610575366004612e7f565b6110ed565b6103cd610588366004612e62565b611349565b61030161059b366004612d5d565b600091825260086020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61031e6114ea565b61039d6105e9366004612dfd565b6114f9565b6103cd600081565b61039d610604366004612e62565b61163f565b610301610617366004612d31565b6117a2565b600e546103529073ffffffffffffffffffffffffffffffffffffffff1681565b61030161064a366004612d31565b611860565b600c546104149060ff1681565b600c5461041490640100000000900460ff1681565b6103527f000000000000000000000000000000000000000000000000000000000000000081565b61039d6106a6366004612dce565b61186d565b61039d6106b9366004612d5d565b611ac0565b6103cd6106cc366004612eb2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600a546103529073ffffffffffffffffffffffffffffffffffffffff1681565b6103cd7fb94b25585d64d4446ec0bdb6d1fad124bf592a2af40db157d3638260e499dae181565b600c54610414906301000000900460ff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461080790612ee0565b80601f016020809104026020016040519081016040528092919081815260200182805461083390612ee0565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6000610897338484611ae6565b50600192915050565b60006108ac8133611c65565b600c546b010000000000000000000000900460ff16156109135760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166109765760405162461bcd60e51b815260206004820152601160248201527f4e6f742076616c69642061646472657373000000000000000000000000000000604482015260640161090a565b50600c80547fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b010000000000000000000000179055600b91909155600e805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6000610a08848484611d1d565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610aaf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161090a565b610abc8533858403611ae6565b506001949350505050565b600082815260086020526040902060010154610ae38133611c65565b610aed838361205b565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b7d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161090a565b610b87828261214f565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610897918590610bcf908690612f63565b611ae6565b60ff81166064811115610c295760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610c9457503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610ce05760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b50600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610d8057503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610dcc5760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b63ffffffff8116610e1f5760405162461bcd60e51b815260206004820152600d60248201527f4d757374206e6f74206265203000000000000000000000000000000000000000604482015260640161090a565b600c805463ffffffff909216670100000000000000027fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610ecc57503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610f185760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b600c805461ffff90921665010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604081205490916107f291612faa565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610ff557503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6110415760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b8073ffffffffffffffffffffffffffffffffffffffff81166110a55760405162461bcd60e51b815260206004820152601960248201527f41646472657373206d757374206e6f7420626520273078302700000000000000604482015260640161090a565b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60ff821660648111156111425760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b60ff821660648111156111975760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff168061120257503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b61124e5760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b606461125a8486612fbe565b60ff1611156112ab5760405162461bcd60e51b815260206004820152601960248201527f4665652073756d206d7573742062652062656c6f772031303000000000000000604482015260640161090a565b600c805460ff858116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9188166201000002919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff909216919091171790558261131f856064612fe3565b6113299190612fe3565b600c60036101000a81548160ff021916908360ff16021790555050505050565b600c546000906b010000000000000000000000900460ff166113ad5760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a656400000000604482015260640161090a565b6000806113b94261220a565b5073ffffffffffffffffffffffffffffffffffffffff861660009081526011602052604090208054929450909250906fffffffffffffffffffffffffffffffff161580611419575080546fffffffffffffffffffffffffffffffff168314155b8061144b5750805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168214155b1561148257600c54606490610100900460ff1661146787610f56565b6114719190613006565b61147b9190612faa565b93506114e2565b600c546114df90606490610100900460ff1661149d88610f56565b6114a79190613006565b6114b19190612faa565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260116020526040902060010154612230565b93505b505050919050565b60606004805461080790612ee0565b60ff8116606481111561154e5760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff16806115b957503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6116055760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b50600c805460ff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff16806116aa57503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6116f65760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b8073ffffffffffffffffffffffffffffffffffffffff811661175a5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206d757374206e6f7420626520273078302700000000000000604482015260640161090a565b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156118495760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161090a565b6118563385858403611ae6565b5060019392505050565b6000610897338484611d1d565b600c546b010000000000000000000000900460ff166118ce5760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a656400000000604482015260640161090a565b3360009081527fbce8d6a95f072cbc4df6bdfc0f01d61ba904b234265fd69f67ae8e9cab08727b602052604090205460ff1661194c5760405162461bcd60e51b815260206004820152600b60248201527f4e6f74206261636b656e64000000000000000000000000000000000000000000604482015260640161090a565b6064600b54606361195d9190613006565b6119679190612faa565b8111156119b65760405162461bcd60e51b815260206004820152601560248201527f526562617365206973206e6f74206e6565646564210000000000000000000000604482015260640161090a565b600081600654600b546119c99190613006565b6119d39190612faa565b90506000600654826119e59190613043565b600654600b8590559091506119f982612252565b600e546009546040517fbc25cf7700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063bc25cf7790602401600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b505060408051868152602081018590527f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511935001905060405180910390a150505050565b600082815260086020526040902060010154611adc8133611c65565b610aed838361214f565b73ffffffffffffffffffffffffffffffffffffffff8316611b6e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161090a565b73ffffffffffffffffffffffffffffffffffffffff8216611bf75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b8757611cbd8173ffffffffffffffffffffffffffffffffffffffff16601461233b565b611cc883602061233b565b604051602001611cd992919061305a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261090a91600401612cbb565b73ffffffffffffffffffffffffffffffffffffffff8216611d805760405162461bcd60e51b815260206004820152601160248201527f4e6f742076616c69642061646472657373000000000000000000000000000000604482015260640161090a565b80611dcd5760405162461bcd60e51b815260206004820152601360248201527f56616c7565206d757374206e6f74206265203000000000000000000000000000604482015260640161090a565b600060055482611ddd9190613006565b9050600080611deb85612564565b8015611e125750600a5473ffffffffffffffffffffffffffffffffffffffff878116911614155b15611f1d57611e218685612878565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600760205260409020549193509150611e568285612f63565b1115611ea45760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e647300000000000000000000000000000000604482015260640161090a565b611ead816128e6565b611eb682612966565b611ebf826129d1565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260116020526040902060010154611ef3908590612f63565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601160205260409020600101555b73ffffffffffffffffffffffffffffffffffffffff86166000908152600760205260409020548190611f50908590613043565b611f5a9190613043565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600760205260408082209390935590871681522054611f97908490612f63565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902055611fc685612564565b8015611fed5750600a5473ffffffffffffffffffffffffffffffffffffffff878116911614155b15611ffc57611ffc6000612252565b73ffffffffffffffffffffffffffffffffffffffff8086169087167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6120428588612f63565b60405190815260200160405180910390a3505050505050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b8757600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556120f13390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610b8757600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000808061222361221e6201518086612faa565b612a09565b9196909550909350915050565b60008183101561224157600061224b565b61224b8284613043565b9392505050565b6006546fffffffffffffffffffffffffffffffff90612272908390612f63565b1161228a57806006546122859190612f63565b61229c565b6fffffffffffffffffffffffffffffffff5b6006819055600f5460105490916122b39190612f63565b6122bd9190612f63565b6122c96012600a6131fb565b6122d7906377359400613006565b612301907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61320a565b61232b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613043565b6123359190612faa565b60055550565b6060600061234a836002613006565b612355906002612f63565b67ffffffffffffffff81111561236d5761236d61321e565b6040519080825280601f01601f191660200182016040528015612397576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106123ce576123ce61324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106124315761243161324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061246d846002613006565b612478906001612f63565b90505b6001811115612515577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106124b9576124b961324d565b1a60f81b8282815181106124cf576124cf61324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361250e8161327c565b905061247b565b50831561224b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090a565b6000813b61257457506000919050565b60008273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156125bc57600080fd5b505afa92505050801561260a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612607918101906132b1565b60015b612648573d808015612638576040519150601f19603f3d011682016040523d82523d6000602084013e61263d565b606091505b506000949350505050565b905060008373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561269257600080fd5b505afa9250505080156126e0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126dd918101906132b1565b60015b61271f573d80801561270e576040519150601f19603f3d011682016040523d82523d6000602084013e612713565b606091505b50600095945050505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015280831660248301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063e6a439059060440160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ec91906132b1565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461282c57506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff83163014801590612868575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610abc57506000949350505050565b60008061288484612b7d565b600c546000906128a290606490610100900460ff1661149d88610f56565b600c5490915060649060ff166128b88684612230565b6128c29190613006565b6128cc9190612faa565b9250600554836128dc9190613006565b9150509250929050565b600c546064906128ff9062010000900460ff1683613006565b6129099190612faa565b60095473ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205461293b9190612f63565b60095473ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205550565b600c54606490612980906301000000900460ff1683613006565b61298a9190612faa565b600f546129979190612f63565b600f55600c546064906129b4906301000000900460ff1683613006565b6129be9190612faa565b6006546129cb9190613043565b60065550565b600c546064906129ec90640100000000900460ff1683613006565b6129f69190612faa565b601054612a039190612f63565b60105550565b60008080838162253d8c612a208362010bd96132ce565b612a2a91906132ce565b9050600062023ab1612a3d836004613342565b612a4791906133fe565b90506004612a588262023ab1613342565b612a639060036132ce565b612a6d91906133fe565b612a779083613466565b9150600062164b09612a8a8460016132ce565b612a9690610fa0613342565b612aa091906133fe565b90506004612ab0826105b5613342565b612aba91906133fe565b612ac49084613466565b612acf90601f6132ce565b9250600061098f612ae1856050613342565b612aeb91906133fe565b905060006050612afd8361098f613342565b612b0791906133fe565b612b119086613466565b9050612b1e600b836133fe565b9450612b2b85600c613342565b612b368360026132ce565b612b409190613466565b91508483612b4f603187613466565b612b5a906064613342565b612b6491906132ce565b612b6e91906132ce565b9a919950975095505050505050565b600080612b894261220a565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526011602052604090208054929450909250906fffffffffffffffffffffffffffffffff161580612be9575080546fffffffffffffffffffffffffffffffff168314155b80612c1b5750805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168214155b15612c475761ffff83811690831670010000000000000000000000000000000002178155600060018201555b50505050565b600060208284031215612c5f57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461224b57600080fd5b60005b83811015612caa578181015183820152602001612c92565b83811115612c475750506000910152565b6020815260008251806020840152612cda816040850160208701612c8f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff81168114612d2e57600080fd5b50565b60008060408385031215612d4457600080fd5b8235612d4f81612d0c565b946020939093013593505050565b60008060408385031215612d7057600080fd5b823591506020830135612d8281612d0c565b809150509250929050565b600080600060608486031215612da257600080fd5b8335612dad81612d0c565b92506020840135612dbd81612d0c565b929592945050506040919091013590565b600060208284031215612de057600080fd5b5035919050565b803560ff81168114612df857600080fd5b919050565b600060208284031215612e0f57600080fd5b61224b82612de7565b600060208284031215612e2a57600080fd5b813563ffffffff8116811461224b57600080fd5b600060208284031215612e5057600080fd5b813561ffff8116811461224b57600080fd5b600060208284031215612e7457600080fd5b813561224b81612d0c565b60008060408385031215612e9257600080fd5b612e9b83612de7565b9150612ea960208401612de7565b90509250929050565b60008060408385031215612ec557600080fd5b8235612ed081612d0c565b91506020830135612d8281612d0c565b600181811c90821680612ef457607f821691505b60208210811415612f2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612f7657612f76612f34565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612fb957612fb9612f7b565b500490565b600060ff821660ff84168060ff03821115612fdb57612fdb612f34565b019392505050565b600060ff821660ff841680821015612ffd57612ffd612f34565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561303e5761303e612f34565b500290565b60008282101561305557613055612f34565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613092816017850160208801612c8f565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516130cf816028840160208801612c8f565b01602801949350505050565b600181815b8085111561313457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561311a5761311a612f34565b8085161561312757918102915b93841c93908002906130e0565b509250929050565b60008261314b575060016107f2565b81613158575060006107f2565b816001811461316e576002811461317857613194565b60019150506107f2565b60ff84111561318957613189612f34565b50506001821b6107f2565b5060208310610133831016604e8410600b84101617156131b7575081810a6107f2565b6131c183836130db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156131f3576131f3612f34565b029392505050565b600061224b60ff84168361313c565b60008261321957613219612f7b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008161328b5761328b612f34565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000602082840312156132c357600080fd5b815161224b81612d0c565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561330857613308612f34565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561333c5761333c612f34565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561338357613383612f34565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156133be576133be612f34565b600087129250878205871284841616156133da576133da612f34565b878505871281841616156133f0576133f0612f34565b505050929093029392505050565b60008261340d5761340d612f7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561346157613461612f34565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156134a0576134a0612f34565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156134d4576134d4612f34565b5050039056fea264697066735822122016af3f5b98a2e65f0a6149824781dc875e6ae77b7bdf6680530bdfdf70bff5a164736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e0000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e0000000000000000000000008954afa98594b838bda56fe4c12a09d7739d179b0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab320000000000000000000000000000000000000000000000000000000000000005546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544b4e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102e95760003560e01c806370a0823111610191578063a8aa1b31116100e3578063bc4f2d6d11610097578063e5002a0511610071578063e5002a0514610704578063f6af343114610724578063fce589d81461074b57600080fd5b8063bc4f2d6d14610698578063d547741f146106ab578063dd62ed3e146106be57600080fd5b8063acb2ad6f116100c8578063acb2ad6f1461064f578063b6f2e8021461065c578063b8d8fbb41461067157600080fd5b8063a8aa1b311461061c578063a9059cbb1461063c57600080fd5b806391d1485411610145578063a217fddf1161011f578063a217fddf146105ee578063a224c745146105f6578063a457c2d71461060957600080fd5b806391d148541461058d57806395d89b41146105d35780639fdef416146105db57600080fd5b80638705fcd4116101765780638705fcd41461055457806389cc145a146105675780638b8676bd1461057a57600080fd5b806370a08231146105115780637e04e0231461052457600080fd5b806323b872dd1161024a57806339509351116101fe57806341275358116101d857806341275358146104cb5780635031429e146104eb57806366874f63146104fe57600080fd5b806339509351146104925780634087b80c146104a557806340ec8cc6146104b857600080fd5b80632f2ff15d1161022f5780632f2ff15d14610465578063313ce5671461047857806336568abe1461047f57600080fd5b806323b872dd1461042f578063248a9ca31461044257600080fd5b806316ada547116102a15780631b2df850116102865780631b2df850146103db5780631eaac44e146104025780631fbe53311461042657600080fd5b806316ada5471461039f57806318160ddd146103c957600080fd5b80630758d924116102d25780630758d9241461032b578063095ea7b3146103775780631075ae8b1461038a57600080fd5b806301ffc9a7146102ee57806306fdde0314610316575b600080fd5b6103016102fc366004612c4d565b61075f565b60405190151581526020015b60405180910390f35b61031e6107f8565b60405161030d9190612cbb565b6103527f0000000000000000000000008954afa98594b838bda56fe4c12a09d7739d179b81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030d565b610301610385366004612d31565b61088a565b61039d610398366004612d5d565b6108a0565b005b600c546103b69065010000000000900461ffff1681565b60405161ffff909116815260200161030d565b6006545b60405190815260200161030d565b6103cd7f2447c43a6160806768d4c947ce727fb12b7f2700badae716947943ea245c25d681565b600c5461041490610100900460ff1681565b60405160ff909116815260200161030d565b6103cd600b5481565b61030161043d366004612d8d565b6109fb565b6103cd610450366004612dce565b60009081526008602052604090206001015490565b61039d610473366004612d5d565b610ac7565b6012610414565b61039d61048d366004612d5d565b610af2565b6103016104a0366004612d31565b610b8b565b61039d6104b3366004612dfd565b610bd4565b600c546104149062010000900460ff1681565b6009546103529073ffffffffffffffffffffffffffffffffffffffff1681565b61039d6104f9366004612e18565b610d15565b61039d61050c366004612e3e565b610e61565b6103cd61051f366004612e62565b610f56565b600c5461053f90670100000000000000900463ffffffff1681565b60405163ffffffff909116815260200161030d565b61039d610562366004612e62565b610f8a565b61039d610575366004612e7f565b6110ed565b6103cd610588366004612e62565b611349565b61030161059b366004612d5d565b600091825260086020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61031e6114ea565b61039d6105e9366004612dfd565b6114f9565b6103cd600081565b61039d610604366004612e62565b61163f565b610301610617366004612d31565b6117a2565b600e546103529073ffffffffffffffffffffffffffffffffffffffff1681565b61030161064a366004612d31565b611860565b600c546104149060ff1681565b600c5461041490640100000000900460ff1681565b6103527f0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab3281565b61039d6106a6366004612dce565b61186d565b61039d6106b9366004612d5d565b611ac0565b6103cd6106cc366004612eb2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600a546103529073ffffffffffffffffffffffffffffffffffffffff1681565b6103cd7fb94b25585d64d4446ec0bdb6d1fad124bf592a2af40db157d3638260e499dae181565b600c54610414906301000000900460ff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461080790612ee0565b80601f016020809104026020016040519081016040528092919081815260200182805461083390612ee0565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b6000610897338484611ae6565b50600192915050565b60006108ac8133611c65565b600c546b010000000000000000000000900460ff16156109135760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166109765760405162461bcd60e51b815260206004820152601160248201527f4e6f742076616c69642061646472657373000000000000000000000000000000604482015260640161090a565b50600c80547fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b010000000000000000000000179055600b91909155600e805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6000610a08848484611d1d565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610aaf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161090a565b610abc8533858403611ae6565b506001949350505050565b600082815260086020526040902060010154610ae38133611c65565b610aed838361205b565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b7d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161090a565b610b87828261214f565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610897918590610bcf908690612f63565b611ae6565b60ff81166064811115610c295760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610c9457503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610ce05760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b50600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610d8057503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610dcc5760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b63ffffffff8116610e1f5760405162461bcd60e51b815260206004820152600d60248201527f4d757374206e6f74206265203000000000000000000000000000000000000000604482015260640161090a565b600c805463ffffffff909216670100000000000000027fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610ecc57503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b610f185760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b600c805461ffff90921665010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff909216919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604081205490916107f291612faa565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff1680610ff557503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6110415760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b8073ffffffffffffffffffffffffffffffffffffffff81166110a55760405162461bcd60e51b815260206004820152601960248201527f41646472657373206d757374206e6f7420626520273078302700000000000000604482015260640161090a565b50600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60ff821660648111156111425760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b60ff821660648111156111975760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff168061120257503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b61124e5760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b606461125a8486612fbe565b60ff1611156112ab5760405162461bcd60e51b815260206004820152601960248201527f4665652073756d206d7573742062652062656c6f772031303000000000000000604482015260640161090a565b600c805460ff858116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff9188166201000002919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff909216919091171790558261131f856064612fe3565b6113299190612fe3565b600c60036101000a81548160ff021916908360ff16021790555050505050565b600c546000906b010000000000000000000000900460ff166113ad5760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a656400000000604482015260640161090a565b6000806113b94261220a565b5073ffffffffffffffffffffffffffffffffffffffff861660009081526011602052604090208054929450909250906fffffffffffffffffffffffffffffffff161580611419575080546fffffffffffffffffffffffffffffffff168314155b8061144b5750805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168214155b1561148257600c54606490610100900460ff1661146787610f56565b6114719190613006565b61147b9190612faa565b93506114e2565b600c546114df90606490610100900460ff1661149d88610f56565b6114a79190613006565b6114b19190612faa565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260116020526040902060010154612230565b93505b505050919050565b60606004805461080790612ee0565b60ff8116606481111561154e5760405162461bcd60e51b815260206004820152600f60248201527f4e6f742076616c69642076616c75650000000000000000000000000000000000604482015260640161090a565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff16806115b957503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6116055760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b50600c805460ff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b3360009081527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7602052604090205460ff16806116aa57503360009081527f2a85e8ce93f0aaa0341d449fb07a41dd9b6348c7cca1a5a1c62aab4d8ab48794602052604090205460ff165b6116f65760405162461bcd60e51b815260206004820152601360248201527f596f7520617265206e6f7420616c6c6f77656400000000000000000000000000604482015260640161090a565b8073ffffffffffffffffffffffffffffffffffffffff811661175a5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206d757374206e6f7420626520273078302700000000000000604482015260640161090a565b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156118495760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161090a565b6118563385858403611ae6565b5060019392505050565b6000610897338484611d1d565b600c546b010000000000000000000000900460ff166118ce5760405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a656400000000604482015260640161090a565b3360009081527fbce8d6a95f072cbc4df6bdfc0f01d61ba904b234265fd69f67ae8e9cab08727b602052604090205460ff1661194c5760405162461bcd60e51b815260206004820152600b60248201527f4e6f74206261636b656e64000000000000000000000000000000000000000000604482015260640161090a565b6064600b54606361195d9190613006565b6119679190612faa565b8111156119b65760405162461bcd60e51b815260206004820152601560248201527f526562617365206973206e6f74206e6565646564210000000000000000000000604482015260640161090a565b600081600654600b546119c99190613006565b6119d39190612faa565b90506000600654826119e59190613043565b600654600b8590559091506119f982612252565b600e546009546040517fbc25cf7700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063bc25cf7790602401600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b505060408051868152602081018590527f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511935001905060405180910390a150505050565b600082815260086020526040902060010154611adc8133611c65565b610aed838361214f565b73ffffffffffffffffffffffffffffffffffffffff8316611b6e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161090a565b73ffffffffffffffffffffffffffffffffffffffff8216611bf75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b8757611cbd8173ffffffffffffffffffffffffffffffffffffffff16601461233b565b611cc883602061233b565b604051602001611cd992919061305a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261090a91600401612cbb565b73ffffffffffffffffffffffffffffffffffffffff8216611d805760405162461bcd60e51b815260206004820152601160248201527f4e6f742076616c69642061646472657373000000000000000000000000000000604482015260640161090a565b80611dcd5760405162461bcd60e51b815260206004820152601360248201527f56616c7565206d757374206e6f74206265203000000000000000000000000000604482015260640161090a565b600060055482611ddd9190613006565b9050600080611deb85612564565b8015611e125750600a5473ffffffffffffffffffffffffffffffffffffffff878116911614155b15611f1d57611e218685612878565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600760205260409020549193509150611e568285612f63565b1115611ea45760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e647300000000000000000000000000000000604482015260640161090a565b611ead816128e6565b611eb682612966565b611ebf826129d1565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260116020526040902060010154611ef3908590612f63565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601160205260409020600101555b73ffffffffffffffffffffffffffffffffffffffff86166000908152600760205260409020548190611f50908590613043565b611f5a9190613043565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600760205260408082209390935590871681522054611f97908490612f63565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260076020526040902055611fc685612564565b8015611fed5750600a5473ffffffffffffffffffffffffffffffffffffffff878116911614155b15611ffc57611ffc6000612252565b73ffffffffffffffffffffffffffffffffffffffff8086169087167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6120428588612f63565b60405190815260200160405180910390a3505050505050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b8757600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556120f13390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610b8757600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000808061222361221e6201518086612faa565b612a09565b9196909550909350915050565b60008183101561224157600061224b565b61224b8284613043565b9392505050565b6006546fffffffffffffffffffffffffffffffff90612272908390612f63565b1161228a57806006546122859190612f63565b61229c565b6fffffffffffffffffffffffffffffffff5b6006819055600f5460105490916122b39190612f63565b6122bd9190612f63565b6122c96012600a6131fb565b6122d7906377359400613006565b612301907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61320a565b61232b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613043565b6123359190612faa565b60055550565b6060600061234a836002613006565b612355906002612f63565b67ffffffffffffffff81111561236d5761236d61321e565b6040519080825280601f01601f191660200182016040528015612397576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106123ce576123ce61324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106124315761243161324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061246d846002613006565b612478906001612f63565b90505b6001811115612515577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106124b9576124b961324d565b1a60f81b8282815181106124cf576124cf61324d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361250e8161327c565b905061247b565b50831561224b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090a565b6000813b61257457506000919050565b60008273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156125bc57600080fd5b505afa92505050801561260a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612607918101906132b1565b60015b612648573d808015612638576040519150601f19603f3d011682016040523d82523d6000602084013e61263d565b606091505b506000949350505050565b905060008373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561269257600080fd5b505afa9250505080156126e0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126dd918101906132b1565b60015b61271f573d80801561270e576040519150601f19603f3d011682016040523d82523d6000602084013e612713565b606091505b50600095945050505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015280831660248301529192506000917f0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab32169063e6a439059060440160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ec91906132b1565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461282c57506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff83163014801590612868575073ffffffffffffffffffffffffffffffffffffffff82163014155b15610abc57506000949350505050565b60008061288484612b7d565b600c546000906128a290606490610100900460ff1661149d88610f56565b600c5490915060649060ff166128b88684612230565b6128c29190613006565b6128cc9190612faa565b9250600554836128dc9190613006565b9150509250929050565b600c546064906128ff9062010000900460ff1683613006565b6129099190612faa565b60095473ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205461293b9190612f63565b60095473ffffffffffffffffffffffffffffffffffffffff1660009081526007602052604090205550565b600c54606490612980906301000000900460ff1683613006565b61298a9190612faa565b600f546129979190612f63565b600f55600c546064906129b4906301000000900460ff1683613006565b6129be9190612faa565b6006546129cb9190613043565b60065550565b600c546064906129ec90640100000000900460ff1683613006565b6129f69190612faa565b601054612a039190612f63565b60105550565b60008080838162253d8c612a208362010bd96132ce565b612a2a91906132ce565b9050600062023ab1612a3d836004613342565b612a4791906133fe565b90506004612a588262023ab1613342565b612a639060036132ce565b612a6d91906133fe565b612a779083613466565b9150600062164b09612a8a8460016132ce565b612a9690610fa0613342565b612aa091906133fe565b90506004612ab0826105b5613342565b612aba91906133fe565b612ac49084613466565b612acf90601f6132ce565b9250600061098f612ae1856050613342565b612aeb91906133fe565b905060006050612afd8361098f613342565b612b0791906133fe565b612b119086613466565b9050612b1e600b836133fe565b9450612b2b85600c613342565b612b368360026132ce565b612b409190613466565b91508483612b4f603187613466565b612b5a906064613342565b612b6491906132ce565b612b6e91906132ce565b9a919950975095505050505050565b600080612b894261220a565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526011602052604090208054929450909250906fffffffffffffffffffffffffffffffff161580612be9575080546fffffffffffffffffffffffffffffffff168314155b80612c1b5750805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168214155b15612c475761ffff83811690831670010000000000000000000000000000000002178155600060018201555b50505050565b600060208284031215612c5f57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461224b57600080fd5b60005b83811015612caa578181015183820152602001612c92565b83811115612c475750506000910152565b6020815260008251806020840152612cda816040850160208701612c8f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff81168114612d2e57600080fd5b50565b60008060408385031215612d4457600080fd5b8235612d4f81612d0c565b946020939093013593505050565b60008060408385031215612d7057600080fd5b823591506020830135612d8281612d0c565b809150509250929050565b600080600060608486031215612da257600080fd5b8335612dad81612d0c565b92506020840135612dbd81612d0c565b929592945050506040919091013590565b600060208284031215612de057600080fd5b5035919050565b803560ff81168114612df857600080fd5b919050565b600060208284031215612e0f57600080fd5b61224b82612de7565b600060208284031215612e2a57600080fd5b813563ffffffff8116811461224b57600080fd5b600060208284031215612e5057600080fd5b813561ffff8116811461224b57600080fd5b600060208284031215612e7457600080fd5b813561224b81612d0c565b60008060408385031215612e9257600080fd5b612e9b83612de7565b9150612ea960208401612de7565b90509250929050565b60008060408385031215612ec557600080fd5b8235612ed081612d0c565b91506020830135612d8281612d0c565b600181811c90821680612ef457607f821691505b60208210811415612f2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612f7657612f76612f34565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612fb957612fb9612f7b565b500490565b600060ff821660ff84168060ff03821115612fdb57612fdb612f34565b019392505050565b600060ff821660ff841680821015612ffd57612ffd612f34565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561303e5761303e612f34565b500290565b60008282101561305557613055612f34565b500390565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613092816017850160208801612c8f565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516130cf816028840160208801612c8f565b01602801949350505050565b600181815b8085111561313457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561311a5761311a612f34565b8085161561312757918102915b93841c93908002906130e0565b509250929050565b60008261314b575060016107f2565b81613158575060006107f2565b816001811461316e576002811461317857613194565b60019150506107f2565b60ff84111561318957613189612f34565b50506001821b6107f2565b5060208310610133831016604e8410600b84101617156131b7575081810a6107f2565b6131c183836130db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156131f3576131f3612f34565b029392505050565b600061224b60ff84168361313c565b60008261321957613219612f7b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008161328b5761328b612f34565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000602082840312156132c357600080fd5b815161224b81612d0c565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561330857613308612f34565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561333c5761333c612f34565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561338357613383612f34565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156133be576133be612f34565b600087129250878205871284841616156133da576133da612f34565b878505871281841616156133f0576133f0612f34565b505050929093029392505050565b60008261340d5761340d612f7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561346157613461612f34565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156134a0576134a0612f34565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156134d4576134d4612f34565b5050039056fea264697066735822122016af3f5b98a2e65f0a6149824781dc875e6ae77b7bdf6680530bdfdf70bff5a164736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e0000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e0000000000000000000000008954afa98594b838bda56fe4c12a09d7739d179b0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab320000000000000000000000000000000000000000000000000000000000000005546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003544b4e0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Token
Arg [1] : _symbol (string): TKN
Arg [2] : _admin (address): 0x5d4Ca4d8295E644B2a1578e5127eaa9edd544C3E
Arg [3] : _feeTaker (address): 0x5d4Ca4d8295E644B2a1578e5127eaa9edd544C3E
Arg [4] : _dexRouter (address): 0x8954AfA98594b838bda56FE4C12a09D7739D179b
Arg [5] : _dexFactory (address): 0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e
Arg [3] : 0000000000000000000000005d4ca4d8295e644b2a1578e5127eaa9edd544c3e
Arg [4] : 0000000000000000000000008954afa98594b838bda56fe4c12a09d7739d179b
Arg [5] : 0000000000000000000000005757371414417b8c6caad45baef941abc7d3ab32
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 546f6b656e000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 544b4e0000000000000000000000000000000000000000000000000000000000
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.