Token
Phantom (PTM)
ERC-20
Overview
Max Total Supply
60,005.261000000000004666 PTM
Holders
9
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1 PTMLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PhantomToken
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.ftmscan.com on 2022-03-21 */ // Sources flattened with hardhat v2.9.1 https://hardhat.org // File @openzeppelin/contracts/utils/math/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract ERC20Capped is ERC20 { uint256 private immutable _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor(uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override { require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); super._mint(account, amount); } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } contract PhantomToken is Ownable, ERC20Capped { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool public trade = false; uint256 public minReflectionBalance=3000e18; // Cap limit uint256 private constant CAP = 100000000e18; uint256 private constant BUY_PRICE = 1e18; // 1 PTM is equal to 1 FTM uint256 private constant USER_PERCENTAGE = 85; uint256 private constant REFLECTION_PERCENTAGE = 9; uint256 private constant MARKETING_PERCENTAGE = 3; uint256 private constant LIQUIDITY_PERCENTAGE = 2; uint256 private constant BUY_BURN_PERCENTAGE = 1; uint256 private constant TOTAL_SUPPLY_LIMIT = 0.1e18; // Tokennomics vaiables uint256 public privateSale = CAP.mul(4e18).div(100e18); // Private sale: 4% -> 4 PTM uint256 public preSale = CAP.mul(15e18).div(100e18); // presale : 15% -> 15 MIO uint256 public airDrop = CAP.mul(5e18).div(100e18); // AirDrop: 3% -> 3 MIO uint256 public devloper = CAP.mul(7.5e18).div(100e18); // Developer: 7,5% -> 7.5 MIO uint256 public marketing = CAP.mul(7.5e18).div(100e18); // Marketing 7,5% -> 7.5 MIO address public makrtetingAddress = 0x914F65b86E8a0e44D531dddf15314e634b8F9A6b; address public routerAddress = 0xcCAFCf876caB8f9542d6972f87B5D62e1182767d; address public burnAddress = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; address[] public holders; mapping(address => bool) public include; mapping(uint256 => address) public tradeTokens; mapping(address => bool) public exclude; event Distribute( address indexed to, uint256 value, string name, address minter ); constructor() ERC20("Phantom", "PTM") ERC20Capped(CAP) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( routerAddress ); // Testnet // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } /** * @notice Distributes the tokens to private sale. * @param amount amount to transfer/mint * @param sender addres is where the tokens to send or mint */ function distributePrivateSale(uint256 amount, address sender) public onlyOwner { require(privateSale >= amount, "LOW BALANCE"); privateSale = privateSale.sub(amount); _mint(sender, amount); emit Distribute(sender, amount, "PRIVATE SALE", msg.sender); } /** * @notice Distributes the tokens to pre sale. * @param amount amount to transfer/mint * @param sender addres is where the tokens to send or mint */ function distributePreSale(uint256 amount, address sender) public onlyOwner { require(preSale >= amount, "LOW BALANCE"); preSale = preSale.sub(amount); _mint(sender, amount); emit Distribute(sender, amount, "PRESALE", msg.sender); } /** * @notice Distributes the tokens to airdrop. * @param amount amount to transfer/mint * @param sender addres is where the tokens to send or mint */ function distributeAirDrop(uint256 amount, address sender) public onlyOwner { require(airDrop >= amount, "LOW BALANCE"); airDrop = airDrop.sub(amount); _mint(sender, amount); emit Distribute(sender, amount, "AIRDROP", msg.sender); } /** * @notice Distributes the tokens to developers. * @param amount amount to transfer/mint * @param sender addres is where the tokens to send or mint */ function distributeDevloper(uint256 amount, address sender) public onlyOwner { require(devloper >= amount, "LOW BALANCE"); devloper = devloper.sub(amount); _mint(sender, amount); emit Distribute(sender, amount, "DEVELOPER", msg.sender); } /** * @notice Distributes the tokens to marketing. * @param amount amount to transfer/mint * @param sender addres is where the tokens to send or mint */ function distributeMarketing(uint256 amount, address sender) public onlyOwner { require(marketing >= amount, "LOW BALANCE"); marketing = marketing.sub(amount); _mint(sender, amount); emit Distribute(sender, amount, "MARKETING", msg.sender); } /** * @notice When Trade is enabled , this buy function will let you trade your FTM to PTM */ function buy(uint256 _token ) payable public { require(trade, "TRADE DISABLED"); require(msg.value > 0, "LOW BALANCE"); address token = tradeTokens[_token]; if(exclude[msg.sender]) { _mint(msg.sender, msg.value); } else { ( uint256 reflectionAmount, uint256 ptmAmount, uint256 marketingAmount, uint256 liquidityAmount, uint256 buyBurnAmount ) = _taxCalculation(msg.value); _mint(msg.sender, ptmAmount); _reflection(reflectionAmount,token); payable(makrtetingAddress).transfer(marketingAmount); uint256 liqAmount = (liquidityAmount.mul(BUY_PRICE)).div(1e18); _mint(address(this), liqAmount); _addLiquidity(liqAmount, liquidityAmount); // (PTM,FTM) _buyBurn(buyBurnAmount); } } /** * @notice When Trade is enabled , this sell function will let you trade your PTM to FTM */ function sell(uint256 amount,uint256 _token) public { require(trade, "TRADE DISABLED"); require(amount > 0, "ZERO AMOUNT"); uint256 supplyPercentage = totalSupply().mul(TOTAL_SUPPLY_LIMIT).div(100e18); require(amount < supplyPercentage, "EXCEED LIMIT"); address token = tradeTokens[_token]; if(exclude[msg.sender]) { transferFrom(msg.sender, address(this),amount); IERC20(token).transfer(msg.sender,amount); } else { ( uint256 reflectionAmount, uint256 ptmAmount, uint256 marketingAmount, uint256 liquidityAmount, uint256 buyBurnAmount ) = _taxCalculation(amount); _transfer(msg.sender, address(this), ptmAmount); payable(msg.sender).transfer(ptmAmount); payable(makrtetingAddress).transfer(marketingAmount); uint256 liqAmount = (liquidityAmount.mul(BUY_PRICE)).div(1e18); _mint(address(this), liqAmount); _addLiquidity(liqAmount, liquidityAmount); _buyBurn(buyBurnAmount); _reflection(reflectionAmount,token); } } function _afterTokenTransfer( address from, address to, uint256 amount ) internal override { if (from != address(this)) { if (balanceOf(from) == 0) { for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == from) { holders[i] = holders[holders.length - 1]; holders.pop(); include[from] = false; break; } } } } if (to != address(this) && !include[to]) { include[to] = true; holders.push(to); } } function _taxCalculation(uint256 amount) internal pure returns ( uint256, uint256, uint256, uint256, uint256 ) { uint256 userAmount = (amount).mul(USER_PERCENTAGE).div(100); uint256 marketingAmount = amount.mul(MARKETING_PERCENTAGE).div(100); uint256 reflectionAmount = amount.mul(REFLECTION_PERCENTAGE).div(100); uint256 liquidityAmount = amount.mul(LIQUIDITY_PERCENTAGE).div(100); uint256 buyBurnAmount = amount.mul(BUY_BURN_PERCENTAGE).div(100); return ( reflectionAmount, userAmount, marketingAmount, liquidityAmount, buyBurnAmount ); } function _reflection(uint256 amount,address token) internal { for (uint256 i = 0; i < holders.length; i++) { if (include[holders[i]] && msg.sender != holders[i]) { uint256 getPercentage = (balanceOf(holders[i]) .div(totalSupply()) .mul(100))*1e18; uint256 perUserReflection = amount.mul(getPercentage).div(100e18); if (perUserReflection > 0 && balanceOf(holders[i]) > minReflectionBalance) { IERC20(token).transfer(holders[i],perUserReflection); } } } } 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 owner(), block.timestamp + 360000000 ); } function _buyBurn(uint256 amount) private { // generate the pancake pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, address(msg.sender), block.timestamp + 360 ); transfer(burnAddress,amount); } function pay() public payable { // nothing to do } function updateTrade(bool _trade) public onlyOwner { trade = _trade; } function updateMarketingAddress(address _makrtetingAddress) public onlyOwner { makrtetingAddress = _makrtetingAddress; } function updateRouterAddress(address _routerAddress) public onlyOwner { routerAddress = _routerAddress; } function addTradeToken(uint256 key,address _token) public onlyOwner { tradeTokens[key]=_token; } function withDraw(address _token,uint256 _amount) public onlyOwner { IERC20(_token).transfer(owner(), _amount); } function excludeAddress(address account , bool value) public onlyOwner { exclude[account]=value; } function setMinReflectionBalance(uint256 limit) public onlyOwner { minReflectionBalance = limit ; } }
[{"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":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"Distribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"addTradeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cap","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":"devloper","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"distributeAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"distributeDevloper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"distributeMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"distributePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"distributePrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exclude","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"include","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makrtetingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMinReflectionBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tradeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"address","name":"_makrtetingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"updateRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_trade","type":"bool"}],"name":"updateTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withDraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526006805460ff60a01b1916905568a2a15d09519be000006007556200006b68056bc75e2d63100000620000576a52b7d2dcc80cd2e4000000673782dace9d90000062000450602090811b620015c517901c565b6200046560201b620015d81790919060201c565b600855620000a968056bc75e2d631000006200005767d02ab486cedc00006a52b7d2dcc80cd2e40000006200045060201b620015c51790919060201c565b600955620000e768056bc75e2d6310000062000057674563918244f400006a52b7d2dcc80cd2e40000006200045060201b620015c51790919060201c565b600a556200012568056bc75e2d63100000620000576768155a43676e00006a52b7d2dcc80cd2e40000006200045060201b620015c51790919060201c565b600b556200016368056bc75e2d63100000620000576768155a43676e00006a52b7d2dcc80cd2e40000006200045060201b620015c51790919060201c565b600c55600d80546001600160a01b031990811673914f65b86e8a0e44d531dddf15314e634b8f9a6b17909155600e8054821673ccafcf876cab8f9542d6972f87b5d62e1182767d179055600f805490911673d99d1c33f9fc3444f8101754abc46c52416550d1179055348015620001d957600080fd5b506a52b7d2dcc80cd2e4000000604051806040016040528060078152602001665068616e746f6d60c81b8152506040518060400160405280600381526020016250544d60e81b8152506200023c620002366200047360201b60201c565b62000477565b815162000251906004906020850190620004c7565b50805162000267906005906020840190620004c7565b50505060008111620002965760405162461bcd60e51b81526004016200028d90620005b0565b60405180910390fd5b608052600e546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a015591600480820192602092909190829003018186803b158015620002e457600080fd5b505afa158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f91906200056d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a391906200056d565b6040518363ffffffff1660e01b8152600401620003c292919062000596565b602060405180830381600087803b158015620003dd57600080fd5b505af1158015620003f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041891906200056d565b600680546001600160a01b0319166001600160a01b0394909416939093179092555060601b6001600160601b03191660a05262000671565b60006200045e828462000608565b9392505050565b60006200045e8284620005e7565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620004d59062000634565b90600052602060002090601f016020900481019282620004f9576000855562000544565b82601f106200051457805160ff191683800117855562000544565b8280016001018555821562000544579182015b828111156200054457825182559160200191906001019062000527565b506200055292915062000556565b5090565b5b8082111562000552576000815560010162000557565b6000602082840312156200057f578081fd5b81516001600160a01b03811681146200045e578182fd5b6001600160a01b0392831681529116602082015260400190565b60208082526015908201527f45524332304361707065643a2063617020697320300000000000000000000000604082015260600190565b6000826200060357634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200062f57634e487b7160e01b81526011600452602481fd5b500290565b6002810460018216806200064957607f821691505b602082108114156200066b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160601c6129506200069a6000396000610cbe01526000610b5d01526129506000f3fe6080604052600436106102875760003560e01c80635a7adf7f1161015a578063a37cf7c8116100c1578063d627e70f1161007a578063d627e70f14610725578063d79875eb1461073a578063d96a094a1461075a578063dd62ed3e1461076d578063f2fde38b1461078d578063f9a78666146107ad57610287565b8063a37cf7c81461067b578063a457c2d71461069b578063a9059cbb146106bb578063ba1f879f146106db578063c8673928146106f0578063ca5d08801461071057610287565b80638451e1df116101135780638451e1df146105d15780638da5cb5b146105f15780639234493914610606578063948dfa7f1461062657806395d89b411461064657806398f320df1461065b57610287565b80635a7adf7f146105325780636ce30f911461054757806370a082311461056757806370d5ae0514610587578063715018a61461059c57806377810826146105b157610287565b80632a11ced0116101fe57806339509351116101b7578063395093511461047d5780633eaf927f1461049d57806340c10f19146104bd57806349bd5a5e146104dd5780634febf53d146104f2578063534c5cc31461051257610287565b80632a11ced0146103dc5780632d3e474a146103fc578063313ce56714610411578063321cf3fe146104335780633268cc5614610453578063355274ea1461046857610287565b8063191e2e8311610250578063191e2e831461034a5780631b9265b81461036a5780631f0ba6c9146103725780632369bf831461038757806323b872dd146103a75780632865a2d9146103c757610287565b8062e6be7b1461028c57806306fdde03146102ae578063095ea7b3146102d95780631694505e1461030657806318160ddd14610328575b600080fd5b34801561029857600080fd5b506102ac6102a7366004612085565b6107c2565b005b3480156102ba57600080fd5b506102c361082c565b6040516102d0919061232b565b60405180910390f35b3480156102e557600080fd5b506102f96102f4366004612162565b6108be565b6040516102d091906122b7565b34801561031257600080fd5b5061031b6108e0565b6040516102d0919061224f565b34801561033457600080fd5b5061033d6108ef565b6040516102d091906126cf565b34801561035657600080fd5b506102ac610365366004612162565b6108f5565b6102ac6109c0565b34801561037e57600080fd5b506102f96109c2565b34801561039357600080fd5b506102ac6103a2366004612085565b6109d2565b3480156103b357600080fd5b506102f96103c23660046120f5565b610a33565b3480156103d357600080fd5b5061033d610a61565b3480156103e857600080fd5b5061031b6103f73660046121c5565b610a67565b34801561040857600080fd5b5061033d610a91565b34801561041d57600080fd5b50610426610a97565b6040516102d091906127ef565b34801561043f57600080fd5b506102ac61044e3660046121dd565b610a9c565b34801561045f57600080fd5b5061031b610b4c565b34801561047457600080fd5b5061033d610b5b565b34801561048957600080fd5b506102f9610498366004612162565b610b7f565b3480156104a957600080fd5b506102ac6104b83660046121dd565b610bcb565b3480156104c957600080fd5b506102ac6104d8366004612162565b610c6f565b3480156104e957600080fd5b5061031b610cbc565b3480156104fe57600080fd5b506102f961050d366004612085565b610ce0565b34801561051e57600080fd5b506102ac61052d3660046121c5565b610cf5565b34801561053e57600080fd5b5061033d610d39565b34801561055357600080fd5b5061031b6105623660046121c5565b610d3f565b34801561057357600080fd5b5061033d610582366004612085565b610d5a565b34801561059357600080fd5b5061031b610d75565b3480156105a857600080fd5b506102ac610d84565b3480156105bd57600080fd5b506102ac6105cc366004612135565b610dcd565b3480156105dd57600080fd5b506102ac6105ec3660046121dd565b610e37565b3480156105fd57600080fd5b5061031b610edb565b34801561061257600080fd5b506102ac61062136600461218d565b610eea565b34801561063257600080fd5b506102ac6106413660046121dd565b610f47565b34801561065257600080fd5b506102c3610feb565b34801561066757600080fd5b506102ac6106763660046121dd565b610ffa565b34801561068757600080fd5b506102ac6106963660046121dd565b61109e565b3480156106a757600080fd5b506102f96106b6366004612162565b61110b565b3480156106c757600080fd5b506102f96106d6366004612162565b61116c565b3480156106e757600080fd5b5061033d611184565b3480156106fc57600080fd5b506102f961070b366004612085565b61118a565b34801561071c57600080fd5b5061033d61119f565b34801561073157600080fd5b5061031b6111a5565b34801561074657600080fd5b506102ac610755366004612201565b6111b4565b6102ac6107683660046121c5565b6113ee565b34801561077957600080fd5b5061033d6107883660046120bd565b611523565b34801561079957600080fd5b506102ac6107a8366004612085565b61154e565b3480156107b957600080fd5b5061033d6115bf565b6107ca6115e4565b6001600160a01b03166107db610edb565b6001600160a01b03161461080a5760405162461bcd60e51b815260040161080190612511565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461083b9061286b565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061286b565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b6000806108c96115e4565b90506108d68185856115e8565b5060019392505050565b6006546001600160a01b031681565b60035490565b6108fd6115e4565b6001600160a01b031661090e610edb565b6001600160a01b0316146109345760405162461bcd60e51b815260040161080190612511565b816001600160a01b031663a9059cbb61094b610edb565b836040518363ffffffff1660e01b8152600401610969929190612263565b602060405180830381600087803b15801561098357600080fd5b505af1158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb91906121a9565b505050565b565b600654600160a01b900460ff1681565b6109da6115e4565b6001600160a01b03166109eb610edb565b6001600160a01b031614610a115760405162461bcd60e51b815260040161080190612511565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080610a3e6115e4565b9050610a4b85828561169c565b610a568585856116e0565b506001949350505050565b60075481565b60108181548110610a7757600080fd5b6000918252602090912001546001600160a01b0316905081565b600c5481565b601290565b610aa46115e4565b6001600160a01b0316610ab5610edb565b6001600160a01b031614610adb5760405162461bcd60e51b815260040161080190612511565b81600c541015610afd5760405162461bcd60e51b815260040161080190612449565b600c54610b0a9083611804565b600c55610b178183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b40929190612746565b60405180910390a25050565b600e546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080610b8a6115e4565b6001600160a01b038082166000908152600260209081526040808320938916835292905220549091506108d69082908690610bc69087906127fd565b6115e8565b610bd36115e4565b6001600160a01b0316610be4610edb565b6001600160a01b031614610c0a5760405162461bcd60e51b815260040161080190612511565b81600b541015610c2c5760405162461bcd60e51b815260040161080190612449565b600b54610c399083611804565b600b55610c468183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b4092919061270e565b610c776115e4565b6001600160a01b0316610c88610edb565b6001600160a01b031614610cae5760405162461bcd60e51b815260040161080190612511565b610cb88282611810565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60136020526000908152604090205460ff1681565b610cfd6115e4565b6001600160a01b0316610d0e610edb565b6001600160a01b031614610d345760405162461bcd60e51b815260040161080190612511565b600755565b60095481565b6012602052600090815260409020546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600f546001600160a01b031681565b610d8c6115e4565b6001600160a01b0316610d9d610edb565b6001600160a01b031614610dc35760405162461bcd60e51b815260040161080190612511565b6109c06000611853565b610dd56115e4565b6001600160a01b0316610de6610edb565b6001600160a01b031614610e0c5760405162461bcd60e51b815260040161080190612511565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b610e3f6115e4565b6001600160a01b0316610e50610edb565b6001600160a01b031614610e765760405162461bcd60e51b815260040161080190612511565b816008541015610e985760405162461bcd60e51b815260040161080190612449565b600854610ea59083611804565b600855610eb28183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b409291906127b4565b6000546001600160a01b031690565b610ef26115e4565b6001600160a01b0316610f03610edb565b6001600160a01b031614610f295760405162461bcd60e51b815260040161080190612511565b60068054911515600160a01b0260ff60a01b19909216919091179055565b610f4f6115e4565b6001600160a01b0316610f60610edb565b6001600160a01b031614610f865760405162461bcd60e51b815260040161080190612511565b81600a541015610fa85760405162461bcd60e51b815260040161080190612449565b600a54610fb59083611804565b600a55610fc28183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b409291906126d8565b60606005805461083b9061286b565b6110026115e4565b6001600160a01b0316611013610edb565b6001600160a01b0316146110395760405162461bcd60e51b815260040161080190612511565b81600954101561105b5760405162461bcd60e51b815260040161080190612449565b6009546110689083611804565b6009556110758183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b4092919061277e565b6110a66115e4565b6001600160a01b03166110b7610edb565b6001600160a01b0316146110dd5760405162461bcd60e51b815260040161080190612511565b60009182526012602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000806111166115e4565b6001600160a01b038082166000908152600260209081526040808320938916835292905220549091508381101561115f5760405162461bcd60e51b815260040161080190612653565b610a5682868684036115e8565b6000806111776115e4565b90506108d68185856116e0565b60085481565b60116020526000908152604090205460ff1681565b600a5481565b600d546001600160a01b031681565b600654600160a01b900460ff166111dd5760405162461bcd60e51b8152600401610801906125b0565b600082116111fd5760405162461bcd60e51b81526004016108019061258b565b600061122c68056bc75e2d6310000061122667016345785d8a00006112206108ef565b906115c5565b906115d8565b905080831061124d5760405162461bcd60e51b8152600401610801906124eb565b6000828152601260209081526040808320543384526013909252909120546001600160a01b039091169060ff16156113115761128a333086610a33565b5060405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906112b99033908890600401612263565b602060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b91906121a9565b506113e8565b6000806000806000611322896118a3565b945094509450945094506113373330866116e0565b604051339085156108fc029086906000818181858888f19350505050158015611364573d6000803e3d6000fd5b50600d546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561139f573d6000803e3d6000fd5b5060006113b8670de0b6b3a764000061122685826115c5565b90506113c43082611810565b6113ce818461191d565b6113d7826119dc565b6113e18688611b75565b5050505050505b50505050565b600654600160a01b900460ff166114175760405162461bcd60e51b8152600401610801906125b0565b600034116114375760405162461bcd60e51b815260040161080190612449565b6000818152601260209081526040808320543384526013909252909120546001600160a01b039091169060ff1615611478576114733334611810565b610cb8565b6000806000806000611489346118a3565b9450945094509450945061149d3385611810565b6114a78587611b75565b600d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156114e1573d6000803e3d6000fd5b5060006114fa670de0b6b3a764000061122685826115c5565b90506115063082611810565b611510818461191d565b611519826119dc565b5050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6115566115e4565b6001600160a01b0316611567610edb565b6001600160a01b03161461158d5760405162461bcd60e51b815260040161080190612511565b6001600160a01b0381166115b35760405162461bcd60e51b8152600401610801906123c1565b6115bc81611853565b50565b600b5481565b60006115d18284612835565b9392505050565b60006115d18284612815565b3390565b6001600160a01b03831661160e5760405162461bcd60e51b81526004016108019061260f565b6001600160a01b0382166116345760405162461bcd60e51b815260040161080190612407565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061168f9085906126cf565b60405180910390a3505050565b60006116a88484611523565b905060001981146113e857818110156116d35760405162461bcd60e51b81526004016108019061246e565b6113e884848484036115e8565b6001600160a01b0383166117065760405162461bcd60e51b815260040161080190612546565b6001600160a01b03821661172c5760405162461bcd60e51b81526004016108019061237e565b6117378383836109bb565b6001600160a01b038316600090815260016020526040902054818110156117705760405162461bcd60e51b8152600401610801906124a5565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906117a79084906127fd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f191906126cf565b60405180910390a36113e8848484611d9e565b60006115d18284612854565b611818610b5b565b816118216108ef565b61182b91906127fd565b11156118495760405162461bcd60e51b8152600401610801906125d8565b610cb88282611fbd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080808080806118ba60646112268960556115c5565b905060006118ce60646112268a60036115c5565b905060006118e260646112268b60096115c5565b905060006118f660646112268c60026115c5565b9050600061190a60646112268d60016115c5565b929b949a50929850965094509092505050565b6006546119359030906001600160a01b0316846115e8565b6006546001600160a01b031663f305d719823085600080611954610edb565b611962426315752a006127fd565b6040518863ffffffff1660e01b81526004016119839695949392919061227c565b6060604051808303818588803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119d59190612222565b5050505050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611a4157600080fd5b505afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7991906120a1565b81600081518110611a9a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611adc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526006541663b6f9de958360008433611b0c426101686127fd565b6040518663ffffffff1660e01b8152600401611b2b94939291906122c2565b6000604051808303818588803b158015611b4457600080fd5b505af1158015611b58573d6000803e3d6000fd5b5050600f546109bb93506001600160a01b0316915084905061116c565b60005b6010548110156109bb576011600060108381548110611ba757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff168015611c10575060108181548110611bf757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03163314155b15611d8c576000611c656064611220611c276108ef565b61122660108781548110611c4b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610d5a565b611c7790670de0b6b3a7640000612835565b90506000611c9268056bc75e2d6310000061122687856115c5565b9050600081118015611cc85750600754611cc660108581548110611c4b57634e487b7160e01b600052603260045260246000fd5b115b15611d8957836001600160a01b031663a9059cbb60108581548110611cfd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e084901b168152611d35916001600160a01b0316908590600401612263565b602060405180830381600087803b158015611d4f57600080fd5b505af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8791906121a9565b505b50505b80611d96816128a6565b915050611b78565b6001600160a01b0383163014611f1e57611db783610d5a565b611f1e5760005b601054811015611f1c57836001600160a01b031660108281548110611df357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611f0a5760108054611e1e90600190612854565b81548110611e3c57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110611e7657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506010805480611ec357634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03861682526011905260409020805460ff19169055611f1c565b80611f14816128a6565b915050611dbe565b505b6001600160a01b0382163014801590611f5057506001600160a01b03821660009081526011602052604090205460ff16155b156109bb57506001600160a01b03166000818152601160205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b031916909117905550565b6001600160a01b038216611fe35760405162461bcd60e51b815260040161080190612698565b611fef600083836109bb565b806003600082825461200191906127fd565b90915550506001600160a01b0382166000908152600160205260408120805483929061202e9084906127fd565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120719085906126cf565b60405180910390a3610cb860008383611d9e565b600060208284031215612096578081fd5b81356115d1816128d7565b6000602082840312156120b2578081fd5b81516115d1816128d7565b600080604083850312156120cf578081fd5b82356120da816128d7565b915060208301356120ea816128d7565b809150509250929050565b600080600060608486031215612109578081fd5b8335612114816128d7565b92506020840135612124816128d7565b929592945050506040919091013590565b60008060408385031215612147578182fd5b8235612152816128d7565b915060208301356120ea816128ec565b60008060408385031215612174578182fd5b823561217f816128d7565b946020939093013593505050565b60006020828403121561219e578081fd5b81356115d1816128ec565b6000602082840312156121ba578081fd5b81516115d1816128ec565b6000602082840312156121d6578081fd5b5035919050565b600080604083850312156121ef578182fd5b8235915060208301356120ea816128d7565b60008060408385031215612213578182fd5b50508035926020909101359150565b600080600060608486031215612236578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b8181101561230b5784516001600160a01b0316835293830193918301916001016122e6565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b818110156123575785810183015185820160400152820161233b565b818111156123685783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a4c4f572042414c414e434560a81b604082015260600190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600c908201526b115610d1515108131253525560a21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600b908201526a16915493c8105353d5539560aa1b604082015260600190565b6020808252600e908201526d151490511148111254d05093115160921b604082015260600190565b60208082526019908201527f45524332304361707065643a2063617020657863656564656400000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b91825260606020830181905260079083015266041495244524f560cc1b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600990830152682222ab22a627a822a960b91b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600990830152684d41524b4554494e4760b81b60808301526001600160a01b0316604082015260a00190565b9182526060602083018190526007908301526650524553414c4560c81b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600c908301526b505249564154452053414c4560a01b60808301526001600160a01b0316604082015260a00190565b60ff91909116815260200190565b60008219821115612810576128106128c1565b500190565b60008261283057634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561284f5761284f6128c1565b500290565b600082821015612866576128666128c1565b500390565b60028104600182168061287f57607f821691505b602082108114156128a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128ba576128ba6128c1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146115bc57600080fd5b80151581146115bc57600080fdfe676e322eadff064ccc238edd7c188316a7b2c6bb317c1192efae3119e76231a9a2646970667358221220e59b1290a5b219c76d4a861cc1b9bf1be0081434c5ac63d4f66d5c4db4cd11ef64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102875760003560e01c80635a7adf7f1161015a578063a37cf7c8116100c1578063d627e70f1161007a578063d627e70f14610725578063d79875eb1461073a578063d96a094a1461075a578063dd62ed3e1461076d578063f2fde38b1461078d578063f9a78666146107ad57610287565b8063a37cf7c81461067b578063a457c2d71461069b578063a9059cbb146106bb578063ba1f879f146106db578063c8673928146106f0578063ca5d08801461071057610287565b80638451e1df116101135780638451e1df146105d15780638da5cb5b146105f15780639234493914610606578063948dfa7f1461062657806395d89b411461064657806398f320df1461065b57610287565b80635a7adf7f146105325780636ce30f911461054757806370a082311461056757806370d5ae0514610587578063715018a61461059c57806377810826146105b157610287565b80632a11ced0116101fe57806339509351116101b7578063395093511461047d5780633eaf927f1461049d57806340c10f19146104bd57806349bd5a5e146104dd5780634febf53d146104f2578063534c5cc31461051257610287565b80632a11ced0146103dc5780632d3e474a146103fc578063313ce56714610411578063321cf3fe146104335780633268cc5614610453578063355274ea1461046857610287565b8063191e2e8311610250578063191e2e831461034a5780631b9265b81461036a5780631f0ba6c9146103725780632369bf831461038757806323b872dd146103a75780632865a2d9146103c757610287565b8062e6be7b1461028c57806306fdde03146102ae578063095ea7b3146102d95780631694505e1461030657806318160ddd14610328575b600080fd5b34801561029857600080fd5b506102ac6102a7366004612085565b6107c2565b005b3480156102ba57600080fd5b506102c361082c565b6040516102d0919061232b565b60405180910390f35b3480156102e557600080fd5b506102f96102f4366004612162565b6108be565b6040516102d091906122b7565b34801561031257600080fd5b5061031b6108e0565b6040516102d0919061224f565b34801561033457600080fd5b5061033d6108ef565b6040516102d091906126cf565b34801561035657600080fd5b506102ac610365366004612162565b6108f5565b6102ac6109c0565b34801561037e57600080fd5b506102f96109c2565b34801561039357600080fd5b506102ac6103a2366004612085565b6109d2565b3480156103b357600080fd5b506102f96103c23660046120f5565b610a33565b3480156103d357600080fd5b5061033d610a61565b3480156103e857600080fd5b5061031b6103f73660046121c5565b610a67565b34801561040857600080fd5b5061033d610a91565b34801561041d57600080fd5b50610426610a97565b6040516102d091906127ef565b34801561043f57600080fd5b506102ac61044e3660046121dd565b610a9c565b34801561045f57600080fd5b5061031b610b4c565b34801561047457600080fd5b5061033d610b5b565b34801561048957600080fd5b506102f9610498366004612162565b610b7f565b3480156104a957600080fd5b506102ac6104b83660046121dd565b610bcb565b3480156104c957600080fd5b506102ac6104d8366004612162565b610c6f565b3480156104e957600080fd5b5061031b610cbc565b3480156104fe57600080fd5b506102f961050d366004612085565b610ce0565b34801561051e57600080fd5b506102ac61052d3660046121c5565b610cf5565b34801561053e57600080fd5b5061033d610d39565b34801561055357600080fd5b5061031b6105623660046121c5565b610d3f565b34801561057357600080fd5b5061033d610582366004612085565b610d5a565b34801561059357600080fd5b5061031b610d75565b3480156105a857600080fd5b506102ac610d84565b3480156105bd57600080fd5b506102ac6105cc366004612135565b610dcd565b3480156105dd57600080fd5b506102ac6105ec3660046121dd565b610e37565b3480156105fd57600080fd5b5061031b610edb565b34801561061257600080fd5b506102ac61062136600461218d565b610eea565b34801561063257600080fd5b506102ac6106413660046121dd565b610f47565b34801561065257600080fd5b506102c3610feb565b34801561066757600080fd5b506102ac6106763660046121dd565b610ffa565b34801561068757600080fd5b506102ac6106963660046121dd565b61109e565b3480156106a757600080fd5b506102f96106b6366004612162565b61110b565b3480156106c757600080fd5b506102f96106d6366004612162565b61116c565b3480156106e757600080fd5b5061033d611184565b3480156106fc57600080fd5b506102f961070b366004612085565b61118a565b34801561071c57600080fd5b5061033d61119f565b34801561073157600080fd5b5061031b6111a5565b34801561074657600080fd5b506102ac610755366004612201565b6111b4565b6102ac6107683660046121c5565b6113ee565b34801561077957600080fd5b5061033d6107883660046120bd565b611523565b34801561079957600080fd5b506102ac6107a8366004612085565b61154e565b3480156107b957600080fd5b5061033d6115bf565b6107ca6115e4565b6001600160a01b03166107db610edb565b6001600160a01b03161461080a5760405162461bcd60e51b815260040161080190612511565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461083b9061286b565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061286b565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b6000806108c96115e4565b90506108d68185856115e8565b5060019392505050565b6006546001600160a01b031681565b60035490565b6108fd6115e4565b6001600160a01b031661090e610edb565b6001600160a01b0316146109345760405162461bcd60e51b815260040161080190612511565b816001600160a01b031663a9059cbb61094b610edb565b836040518363ffffffff1660e01b8152600401610969929190612263565b602060405180830381600087803b15801561098357600080fd5b505af1158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb91906121a9565b505050565b565b600654600160a01b900460ff1681565b6109da6115e4565b6001600160a01b03166109eb610edb565b6001600160a01b031614610a115760405162461bcd60e51b815260040161080190612511565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080610a3e6115e4565b9050610a4b85828561169c565b610a568585856116e0565b506001949350505050565b60075481565b60108181548110610a7757600080fd5b6000918252602090912001546001600160a01b0316905081565b600c5481565b601290565b610aa46115e4565b6001600160a01b0316610ab5610edb565b6001600160a01b031614610adb5760405162461bcd60e51b815260040161080190612511565b81600c541015610afd5760405162461bcd60e51b815260040161080190612449565b600c54610b0a9083611804565b600c55610b178183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b40929190612746565b60405180910390a25050565b600e546001600160a01b031681565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000090565b600080610b8a6115e4565b6001600160a01b038082166000908152600260209081526040808320938916835292905220549091506108d69082908690610bc69087906127fd565b6115e8565b610bd36115e4565b6001600160a01b0316610be4610edb565b6001600160a01b031614610c0a5760405162461bcd60e51b815260040161080190612511565b81600b541015610c2c5760405162461bcd60e51b815260040161080190612449565b600b54610c399083611804565b600b55610c468183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b4092919061270e565b610c776115e4565b6001600160a01b0316610c88610edb565b6001600160a01b031614610cae5760405162461bcd60e51b815260040161080190612511565b610cb88282611810565b5050565b7f00000000000000000000000021d9eb04a47fcace5b3864bbaec28cae446ba97581565b60136020526000908152604090205460ff1681565b610cfd6115e4565b6001600160a01b0316610d0e610edb565b6001600160a01b031614610d345760405162461bcd60e51b815260040161080190612511565b600755565b60095481565b6012602052600090815260409020546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600f546001600160a01b031681565b610d8c6115e4565b6001600160a01b0316610d9d610edb565b6001600160a01b031614610dc35760405162461bcd60e51b815260040161080190612511565b6109c06000611853565b610dd56115e4565b6001600160a01b0316610de6610edb565b6001600160a01b031614610e0c5760405162461bcd60e51b815260040161080190612511565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b610e3f6115e4565b6001600160a01b0316610e50610edb565b6001600160a01b031614610e765760405162461bcd60e51b815260040161080190612511565b816008541015610e985760405162461bcd60e51b815260040161080190612449565b600854610ea59083611804565b600855610eb28183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b409291906127b4565b6000546001600160a01b031690565b610ef26115e4565b6001600160a01b0316610f03610edb565b6001600160a01b031614610f295760405162461bcd60e51b815260040161080190612511565b60068054911515600160a01b0260ff60a01b19909216919091179055565b610f4f6115e4565b6001600160a01b0316610f60610edb565b6001600160a01b031614610f865760405162461bcd60e51b815260040161080190612511565b81600a541015610fa85760405162461bcd60e51b815260040161080190612449565b600a54610fb59083611804565b600a55610fc28183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b409291906126d8565b60606005805461083b9061286b565b6110026115e4565b6001600160a01b0316611013610edb565b6001600160a01b0316146110395760405162461bcd60e51b815260040161080190612511565b81600954101561105b5760405162461bcd60e51b815260040161080190612449565b6009546110689083611804565b6009556110758183611810565b806001600160a01b03166000805160206128fb8339815191528333604051610b4092919061277e565b6110a66115e4565b6001600160a01b03166110b7610edb565b6001600160a01b0316146110dd5760405162461bcd60e51b815260040161080190612511565b60009182526012602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6000806111166115e4565b6001600160a01b038082166000908152600260209081526040808320938916835292905220549091508381101561115f5760405162461bcd60e51b815260040161080190612653565b610a5682868684036115e8565b6000806111776115e4565b90506108d68185856116e0565b60085481565b60116020526000908152604090205460ff1681565b600a5481565b600d546001600160a01b031681565b600654600160a01b900460ff166111dd5760405162461bcd60e51b8152600401610801906125b0565b600082116111fd5760405162461bcd60e51b81526004016108019061258b565b600061122c68056bc75e2d6310000061122667016345785d8a00006112206108ef565b906115c5565b906115d8565b905080831061124d5760405162461bcd60e51b8152600401610801906124eb565b6000828152601260209081526040808320543384526013909252909120546001600160a01b039091169060ff16156113115761128a333086610a33565b5060405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906112b99033908890600401612263565b602060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b91906121a9565b506113e8565b6000806000806000611322896118a3565b945094509450945094506113373330866116e0565b604051339085156108fc029086906000818181858888f19350505050158015611364573d6000803e3d6000fd5b50600d546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561139f573d6000803e3d6000fd5b5060006113b8670de0b6b3a764000061122685826115c5565b90506113c43082611810565b6113ce818461191d565b6113d7826119dc565b6113e18688611b75565b5050505050505b50505050565b600654600160a01b900460ff166114175760405162461bcd60e51b8152600401610801906125b0565b600034116114375760405162461bcd60e51b815260040161080190612449565b6000818152601260209081526040808320543384526013909252909120546001600160a01b039091169060ff1615611478576114733334611810565b610cb8565b6000806000806000611489346118a3565b9450945094509450945061149d3385611810565b6114a78587611b75565b600d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156114e1573d6000803e3d6000fd5b5060006114fa670de0b6b3a764000061122685826115c5565b90506115063082611810565b611510818461191d565b611519826119dc565b5050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6115566115e4565b6001600160a01b0316611567610edb565b6001600160a01b03161461158d5760405162461bcd60e51b815260040161080190612511565b6001600160a01b0381166115b35760405162461bcd60e51b8152600401610801906123c1565b6115bc81611853565b50565b600b5481565b60006115d18284612835565b9392505050565b60006115d18284612815565b3390565b6001600160a01b03831661160e5760405162461bcd60e51b81526004016108019061260f565b6001600160a01b0382166116345760405162461bcd60e51b815260040161080190612407565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061168f9085906126cf565b60405180910390a3505050565b60006116a88484611523565b905060001981146113e857818110156116d35760405162461bcd60e51b81526004016108019061246e565b6113e884848484036115e8565b6001600160a01b0383166117065760405162461bcd60e51b815260040161080190612546565b6001600160a01b03821661172c5760405162461bcd60e51b81526004016108019061237e565b6117378383836109bb565b6001600160a01b038316600090815260016020526040902054818110156117705760405162461bcd60e51b8152600401610801906124a5565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906117a79084906127fd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f191906126cf565b60405180910390a36113e8848484611d9e565b60006115d18284612854565b611818610b5b565b816118216108ef565b61182b91906127fd565b11156118495760405162461bcd60e51b8152600401610801906125d8565b610cb88282611fbd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080808080806118ba60646112268960556115c5565b905060006118ce60646112268a60036115c5565b905060006118e260646112268b60096115c5565b905060006118f660646112268c60026115c5565b9050600061190a60646112268d60016115c5565b929b949a50929850965094509092505050565b6006546119359030906001600160a01b0316846115e8565b6006546001600160a01b031663f305d719823085600080611954610edb565b611962426315752a006127fd565b6040518863ffffffff1660e01b81526004016119839695949392919061227c565b6060604051808303818588803b15801561199c57600080fd5b505af11580156119b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119d59190612222565b5050505050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611a4157600080fd5b505afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7991906120a1565b81600081518110611a9a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611adc57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526006541663b6f9de958360008433611b0c426101686127fd565b6040518663ffffffff1660e01b8152600401611b2b94939291906122c2565b6000604051808303818588803b158015611b4457600080fd5b505af1158015611b58573d6000803e3d6000fd5b5050600f546109bb93506001600160a01b0316915084905061116c565b60005b6010548110156109bb576011600060108381548110611ba757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff168015611c10575060108181548110611bf757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03163314155b15611d8c576000611c656064611220611c276108ef565b61122660108781548110611c4b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610d5a565b611c7790670de0b6b3a7640000612835565b90506000611c9268056bc75e2d6310000061122687856115c5565b9050600081118015611cc85750600754611cc660108581548110611c4b57634e487b7160e01b600052603260045260246000fd5b115b15611d8957836001600160a01b031663a9059cbb60108581548110611cfd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e084901b168152611d35916001600160a01b0316908590600401612263565b602060405180830381600087803b158015611d4f57600080fd5b505af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8791906121a9565b505b50505b80611d96816128a6565b915050611b78565b6001600160a01b0383163014611f1e57611db783610d5a565b611f1e5760005b601054811015611f1c57836001600160a01b031660108281548110611df357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611f0a5760108054611e1e90600190612854565b81548110611e3c57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110611e7657634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506010805480611ec357634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03861682526011905260409020805460ff19169055611f1c565b80611f14816128a6565b915050611dbe565b505b6001600160a01b0382163014801590611f5057506001600160a01b03821660009081526011602052604090205460ff16155b156109bb57506001600160a01b03166000818152601160205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b031916909117905550565b6001600160a01b038216611fe35760405162461bcd60e51b815260040161080190612698565b611fef600083836109bb565b806003600082825461200191906127fd565b90915550506001600160a01b0382166000908152600160205260408120805483929061202e9084906127fd565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120719085906126cf565b60405180910390a3610cb860008383611d9e565b600060208284031215612096578081fd5b81356115d1816128d7565b6000602082840312156120b2578081fd5b81516115d1816128d7565b600080604083850312156120cf578081fd5b82356120da816128d7565b915060208301356120ea816128d7565b809150509250929050565b600080600060608486031215612109578081fd5b8335612114816128d7565b92506020840135612124816128d7565b929592945050506040919091013590565b60008060408385031215612147578182fd5b8235612152816128d7565b915060208301356120ea816128ec565b60008060408385031215612174578182fd5b823561217f816128d7565b946020939093013593505050565b60006020828403121561219e578081fd5b81356115d1816128ec565b6000602082840312156121ba578081fd5b81516115d1816128ec565b6000602082840312156121d6578081fd5b5035919050565b600080604083850312156121ef578182fd5b8235915060208301356120ea816128d7565b60008060408385031215612213578182fd5b50508035926020909101359150565b600080600060608486031215612236578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b8181101561230b5784516001600160a01b0316835293830193918301916001016122e6565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b818110156123575785810183015185820160400152820161233b565b818111156123685783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a4c4f572042414c414e434560a81b604082015260600190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252600c908201526b115610d1515108131253525560a21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600b908201526a16915493c8105353d5539560aa1b604082015260600190565b6020808252600e908201526d151490511148111254d05093115160921b604082015260600190565b60208082526019908201527f45524332304361707065643a2063617020657863656564656400000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b91825260606020830181905260079083015266041495244524f560cc1b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600990830152682222ab22a627a822a960b91b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600990830152684d41524b4554494e4760b81b60808301526001600160a01b0316604082015260a00190565b9182526060602083018190526007908301526650524553414c4560c81b60808301526001600160a01b0316604082015260a00190565b918252606060208301819052600c908301526b505249564154452053414c4560a01b60808301526001600160a01b0316604082015260a00190565b60ff91909116815260200190565b60008219821115612810576128106128c1565b500190565b60008261283057634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561284f5761284f6128c1565b500290565b600082821015612866576128666128c1565b500390565b60028104600182168061287f57607f821691505b602082108114156128a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128ba576128ba6128c1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146115bc57600080fd5b80151581146115bc57600080fdfe676e322eadff064ccc238edd7c188316a7b2c6bb317c1192efae3119e76231a9a2646970667358221220e59b1290a5b219c76d4a861cc1b9bf1be0081434c5ac63d4f66d5c4db4cd11ef64736f6c63430008000033
Deployed Bytecode Sourcemap
31139:11514:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41979:142;;;;;;;;;;-1:-1:-1;41979:142:0;;;;;:::i;:::-;;:::i;:::-;;11236:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13587:201;;;;;;;;;;-1:-1:-1;13587:201:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31227:41::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12356:108::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42269:132::-;;;;;;;;;;-1:-1:-1;42269:132:0;;;;;:::i;:::-;;:::i;41650:64::-;;;:::i;31322:25::-;;;;;;;;;;;;;:::i;41814:157::-;;;;;;;;;;-1:-1:-1;41814:157:0;;;;;:::i;:::-;;:::i;14368:295::-;;;;;;;;;;-1:-1:-1;14368:295:0;;;;;:::i;:::-;;:::i;31354:43::-;;;;;;;;;;;;;:::i;32636:24::-;;;;;;;;;;-1:-1:-1;32636:24:0;;;;;:::i;:::-;;:::i;32267:54::-;;;;;;;;;;;;;:::i;12198:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35678:306::-;;;;;;;;;;-1:-1:-1;35678:306:0;;;;;:::i;:::-;;:::i;32452:83::-;;;;;;;;;;;;;:::i;22451:::-;;;;;;;;;;;;;:::i;15072:240::-;;;;;;;;;;-1:-1:-1;15072:240:0;;;;;:::i;:::-;;:::i;35186:302::-;;;;;;;;;;-1:-1:-1;35186:302:0;;;;;:::i;:::-;;:::i;33421:95::-;;;;;;;;;;-1:-1:-1;33421:95:0;;;;;:::i;:::-;;:::i;31275:38::-;;;;;;;;;;;;;:::i;32766:39::-;;;;;;;;;;-1:-1:-1;32766:39:0;;;;;:::i;:::-;;:::i;42531:119::-;;;;;;;;;;-1:-1:-1;42531:119:0;;;;;:::i;:::-;;:::i;32007:51::-;;;;;;;;;;;;;:::i;32713:46::-;;;;;;;;;;-1:-1:-1;32713:46:0;;;;;:::i;:::-;;:::i;12527:127::-;;;;;;;;;;-1:-1:-1;12527:127:0;;;;;:::i;:::-;;:::i;32542:81::-;;;;;;;;;;;;;:::i;23873:103::-;;;;;;;;;;;;;:::i;42407:118::-;;;;;;;;;;-1:-1:-1;42407:118:0;;;;;:::i;:::-;;:::i;33709:317::-;;;;;;;;;;-1:-1:-1;33709:317:0;;;;;:::i;:::-;;:::i;23222:87::-;;;;;;;;;;;;;:::i;41722:84::-;;;;;;;;;;-1:-1:-1;41722:84:0;;;;;:::i;:::-;;:::i;34699:296::-;;;;;;;;;;-1:-1:-1;34699:296:0;;;;;:::i;:::-;;:::i;11455:104::-;;;;;;;;;;;;;:::i;34215:296::-;;;;;;;;;;-1:-1:-1;34215:296:0;;;;;:::i;:::-;;:::i;42127:134::-;;;;;;;;;;-1:-1:-1;42127:134:0;;;;;:::i;:::-;;:::i;15815:438::-;;;;;;;;;;-1:-1:-1;15815:438:0;;;;;:::i;:::-;;:::i;12860:193::-;;;;;;;;;;-1:-1:-1;12860:193:0;;;;;:::i;:::-;;:::i;31917:54::-;;;;;;;;;;;;;:::i;32667:39::-;;;;;;;;;;-1:-1:-1;32667:39:0;;;;;:::i;:::-;;:::i;32096:50::-;;;;;;;;;;;;;:::i;32359:86::-;;;;;;;;;;;;;:::i;37195:1234::-;;;;;;;;;;-1:-1:-1;37195:1234:0;;;;;:::i;:::-;;:::i;36103:961::-;;;;;;:::i;:::-;;:::i;13116:151::-;;;;;;;;;;-1:-1:-1;13116:151:0;;;;;:::i;:::-;;:::i;24131:201::-;;;;;;;;;;-1:-1:-1;24131:201:0;;;;;:::i;:::-;;:::i;32177:53::-;;;;;;;;;;;;;:::i;41979:142::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;;;;;;;;;42083:13:::1;:30:::0;;-1:-1:-1;;;;;;42083:30:0::1;-1:-1:-1::0;;;;;42083:30:0;;;::::1;::::0;;;::::1;::::0;;41979:142::o;11236:100::-;11290:13;11323:5;11316:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11236:100;:::o;13587:201::-;13670:4;13687:13;13703:12;:10;:12::i;:::-;13687:28;;13726:32;13735:5;13742:7;13751:6;13726:8;:32::i;:::-;-1:-1:-1;13776:4:0;;13587:201;-1:-1:-1;;;13587:201:0:o;31227:41::-;;;-1:-1:-1;;;;;31227:41:0;;:::o;12356:108::-;12444:12;;12356:108;:::o;42269:132::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;42359:6:::1;-1:-1:-1::0;;;;;42352:23:0::1;;42376:7;:5;:7::i;:::-;42385;42352:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42269:132:::0;;:::o;41650:64::-;:::o;31322:25::-;;;-1:-1:-1;;;31322:25:0;;;;;:::o;41814:157::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;41925:17:::1;:38:::0;;-1:-1:-1;;;;;;41925:38:0::1;-1:-1:-1::0;;;;;41925:38:0;;;::::1;::::0;;;::::1;::::0;;41814:157::o;14368:295::-;14499:4;14516:15;14534:12;:10;:12::i;:::-;14516:30;;14557:38;14573:4;14579:7;14588:6;14557:15;:38::i;:::-;14606:27;14616:4;14622:2;14626:6;14606:9;:27::i;:::-;-1:-1:-1;14651:4:0;;14368:295;-1:-1:-1;;;;14368:295:0:o;31354:43::-;;;;:::o;32636:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32636:24:0;;-1:-1:-1;32636:24:0;:::o;32267:54::-;;;;:::o;12198:93::-;12281:2;12198:93;:::o;35678:306::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;35811:6:::1;35798:9;;:19;;35790:43;;;;-1:-1:-1::0;;;35790:43:0::1;;;;;;;:::i;:::-;35856:9;::::0;:21:::1;::::0;35870:6;35856:13:::1;:21::i;:::-;35844:9;:33:::0;35888:21:::1;35894:6:::0;35902;35888:5:::1;:21::i;:::-;35936:6;-1:-1:-1::0;;;;;35925:51:0::1;-1:-1:-1::0;;;;;;;;;;;35944:6:0::1;35965:10;35925:51;;;;;;;:::i;:::-;;;;;;;;35678:306:::0;;:::o;32452:83::-;;;-1:-1:-1;;;;;32452:83:0;;:::o;22451:::-;22522:4;22451:83;:::o;15072:240::-;15160:4;15177:13;15193:12;:10;:12::i;:::-;-1:-1:-1;;;;;15241:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;15177:28;;-1:-1:-1;15216:66:0;;15177:28;;15232:7;;15241:40;;15271:10;;15241:40;:::i;:::-;15216:8;:66::i;35186:302::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;35317:6:::1;35305:8;;:18;;35297:42;;;;-1:-1:-1::0;;;35297:42:0::1;;;;;;;:::i;:::-;35361:8;::::0;:20:::1;::::0;35374:6;35361:12:::1;:20::i;:::-;35350:8;:31:::0;35392:21:::1;35398:6:::0;35406;35392:5:::1;:21::i;:::-;35440:6;-1:-1:-1::0;;;;;35429:51:0::1;-1:-1:-1::0;;;;;;;;;;;35448:6:0::1;35469:10;35429:51;;;;;;;:::i;33421:95::-:0;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;33491:17:::1;33497:2;33501:6;33491:5;:17::i;:::-;33421:95:::0;;:::o;31275:38::-;;;:::o;32766:39::-;;;;;;;;;;;;;;;:::o;42531:119::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;42613:20:::1;:28:::0;42531:119::o;32007:51::-;;;;:::o;32713:46::-;;;;;;;;;;;;-1:-1:-1;;;;;32713:46:0;;:::o;12527:127::-;-1:-1:-1;;;;;12628:18:0;12601:7;12628:18;;;:9;:18;;;;;;;12527:127::o;32542:81::-;;;-1:-1:-1;;;;;32542:81:0;;:::o;23873:103::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;23938:30:::1;23965:1;23938:18;:30::i;42407:118::-:0;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42495:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:22;;-1:-1:-1;;42495:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42407:118::o;33709:317::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;33846:6:::1;33831:11;;:21;;33823:45;;;;-1:-1:-1::0;;;33823:45:0::1;;;;;;;:::i;:::-;33893:11;::::0;:23:::1;::::0;33909:6;33893:15:::1;:23::i;:::-;33879:11;:37:::0;33927:21:::1;33933:6:::0;33941;33927:5:::1;:21::i;:::-;33975:6;-1:-1:-1::0;;;;;33964:54:0::1;-1:-1:-1::0;;;;;;;;;;;33983:6:0::1;34007:10;33964:54;;;;;;;:::i;23222:87::-:0;23268:7;23295:6;-1:-1:-1;;;;;23295:6:0;23222:87;:::o;41722:84::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;41784:5:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;41784:14:0::1;-1:-1:-1::0;;;;41784:14:0;;::::1;::::0;;;::::1;::::0;;41722:84::o;34699:296::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;34828:6:::1;34817:7;;:17;;34809:41;;;;-1:-1:-1::0;;;34809:41:0::1;;;;;;;:::i;:::-;34871:7;::::0;:19:::1;::::0;34883:6;34871:11:::1;:19::i;:::-;34861:7;:29:::0;34901:21:::1;34907:6:::0;34915;34901:5:::1;:21::i;:::-;34949:6;-1:-1:-1::0;;;;;34938:49:0::1;-1:-1:-1::0;;;;;;;;;;;34957:6:0::1;34976:10;34938:49;;;;;;;:::i;11455:104::-:0;11511:13;11544:7;11537:14;;;;;:::i;34215:296::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;34344:6:::1;34333:7;;:17;;34325:41;;;;-1:-1:-1::0;;;34325:41:0::1;;;;;;;:::i;:::-;34387:7;::::0;:19:::1;::::0;34399:6;34387:11:::1;:19::i;:::-;34377:7;:29:::0;34417:21:::1;34423:6:::0;34431;34417:5:::1;:21::i;:::-;34465:6;-1:-1:-1::0;;;;;34454:49:0::1;-1:-1:-1::0;;;;;;;;;;;34473:6:0::1;34492:10;34454:49;;;;;;;:::i;42127:134::-:0;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;42230:16:::1;::::0;;;:11:::1;:16;::::0;;;;;:23;;-1:-1:-1;;;;;;42230:23:0::1;-1:-1:-1::0;;;;;42230:23:0;;::::1;::::0;;;::::1;::::0;;42127:134::o;15815:438::-;15908:4;15925:13;15941:12;:10;:12::i;:::-;-1:-1:-1;;;;;15991:18:0;;;15964:24;15991:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;15925:28;;-1:-1:-1;16037:35:0;;;;16029:85;;;;-1:-1:-1;;;16029:85:0;;;;;;;:::i;:::-;16150:60;16159:5;16166:7;16194:15;16175:16;:34;16150:8;:60::i;12860:193::-;12939:4;12956:13;12972:12;:10;:12::i;:::-;12956:28;;12995;13005:5;13012:2;13016:6;12995:9;:28::i;31917:54::-;;;;:::o;32667:39::-;;;;;;;;;;;;;;;:::o;32096:50::-;;;;:::o;32359:86::-;;;-1:-1:-1;;;;;32359:86:0;;:::o;37195:1234::-;37266:5;;-1:-1:-1;;;37266:5:0;;;;37258:32;;;;-1:-1:-1;;;37258:32:0;;;;;;;:::i;:::-;37318:1;37309:6;:10;37301:34;;;;-1:-1:-1;;;37301:34:0;;;;;;;:::i;:::-;37346:24;37373:49;37415:6;37373:37;31873:6;37373:13;:11;:13::i;:::-;:17;;:37::i;:::-;:41;;:49::i;:::-;37346:76;;37451:16;37442:6;:25;37434:50;;;;-1:-1:-1;;;37434:50:0;;;;;;;:::i;:::-;37497:13;37513:19;;;:11;:19;;;;;;;;;37555:10;37547:19;;:7;:19;;;;;;;-1:-1:-1;;;;;37513:19:0;;;;37547;;37544:868;;;37595:46;37608:10;37628:4;37634:6;37595:12;:46::i;:::-;-1:-1:-1;37659:41:0;;-1:-1:-1;;;37659:41:0;;-1:-1:-1;;;;;37659:22:0;;;;;:41;;37682:10;;37693:6;;37659:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37544:868;;;37764:24;37803:17;37835:23;37873;37911:21;37946:23;37962:6;37946:15;:23::i;:::-;37749:220;;;;;;;;;;37980:47;37990:10;38010:4;38017:9;37980;:47::i;:::-;38038:39;;38046:10;;38038:39;;;;;38067:9;;38038:39;;;;38067:9;38046:10;38038:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38098:17:0;;38090:52;;-1:-1:-1;;;;;38098:17:0;;;;38090:52;;;;;38126:15;;38098:17;38090:52;38098:17;38090:52;38126:15;38098:17;38090:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38155:17:0;38175:42;38212:4;38176:30;:15;38212:4;38176:19;:30::i;38175:42::-;38155:62;;38228:31;38242:4;38249:9;38228:5;:31::i;:::-;38270:41;38284:9;38295:15;38270:13;:41::i;:::-;38322:23;38331:13;38322:8;:23::i;:::-;38356:35;38368:16;38385:5;38356:11;:35::i;:::-;37544:868;;;;;;;37195:1234;;;;:::o;36103:961::-;36167:5;;-1:-1:-1;;;36167:5:0;;;;36159:32;;;;-1:-1:-1;;;36159:32:0;;;;;;;:::i;:::-;36222:1;36210:9;:13;36202:37;;;;-1:-1:-1;;;36202:37:0;;;;;;;:::i;:::-;36251:13;36267:19;;;:11;:19;;;;;;;;;36308:10;36300:19;;:7;:19;;;;;;;-1:-1:-1;;;;;36267:19:0;;;;36300;;36297:756;;;36345:28;36351:10;36363:9;36345:5;:28::i;:::-;36297:756;;;36454:24;36493:17;36525:23;36563;36601:21;36636:26;36652:9;36636:15;:26::i;:::-;36439:223;;;;;;;;;;36674:28;36680:10;36692:9;36674:5;:28::i;:::-;36713:35;36725:16;36742:5;36713:11;:35::i;:::-;36767:17;;36759:52;;-1:-1:-1;;;;;36767:17:0;;;;36759:52;;;;;36795:15;;36767:17;36759:52;36767:17;36759:52;36795:15;36767:17;36759:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36824:17:0;36844:42;36881:4;36845:30;:15;36881:4;36845:19;:30::i;36844:42::-;36824:62;;36897:31;36911:4;36918:9;36897:5;:31::i;:::-;36939:41;36953:9;36964:15;36939:13;:41::i;:::-;37004:23;37013:13;37004:8;:23::i;:::-;36297:756;;;;;;36103:961;;:::o;13116:151::-;-1:-1:-1;;;;;13232:18:0;;;13205:7;13232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13116:151::o;24131:201::-;23453:12;:10;:12::i;:::-;-1:-1:-1;;;;;23442:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;23442:23:0;;23434:68;;;;-1:-1:-1;;;23434:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24220:22:0;::::1;24212:73;;;;-1:-1:-1::0;;;24212:73:0::1;;;;;;;:::i;:::-;24296:28;24315:8;24296:18;:28::i;:::-;24131:201:::0;:::o;32177:53::-;;;;:::o;3701:98::-;3759:7;3786:5;3790:1;3786;:5;:::i;:::-;3779:12;3701:98;-1:-1:-1;;;3701:98:0:o;4100:::-;4158:7;4185:5;4189:1;4185;:5;:::i;10238:98::-;10318:10;10238:98;:::o;19451:380::-;-1:-1:-1;;;;;19587:19:0;;19579:68;;;;-1:-1:-1;;;19579:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19666:21:0;;19658:68;;;;-1:-1:-1;;;19658:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19739:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;19791:32;;;;;19769:6;;19791:32;:::i;:::-;;;;;;;;19451:380;;;:::o;20118:453::-;20253:24;20280:25;20290:5;20297:7;20280:9;:25::i;:::-;20253:52;;-1:-1:-1;;20320:16:0;:37;20316:248;;20402:6;20382:16;:26;;20374:68;;;;-1:-1:-1;;;20374:68:0;;;;;;;:::i;:::-;20486:51;20495:5;20502:7;20530:6;20511:16;:25;20486:8;:51::i;16732:671::-;-1:-1:-1;;;;;16863:18:0;;16855:68;;;;-1:-1:-1;;;16855:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16942:16:0;;16934:64;;;;-1:-1:-1;;;16934:64:0;;;;;;;:::i;:::-;17011:38;17032:4;17038:2;17042:6;17011:20;:38::i;:::-;-1:-1:-1;;;;;17084:15:0;;17062:19;17084:15;;;:9;:15;;;;;;17118:21;;;;17110:72;;;;-1:-1:-1;;;17110:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17218:15:0;;;;;;;:9;:15;;;;;;17236:20;;;17218:38;;17278:13;;;;;;;;:23;;17250:6;;17218:15;17278:23;;17250:6;;17278:23;:::i;:::-;;;;;;;;17334:2;-1:-1:-1;;;;;17319:26:0;17328:4;-1:-1:-1;;;;;17319:26:0;;17338:6;17319:26;;;;;;:::i;:::-;;;;;;;;17358:37;17378:4;17384:2;17388:6;17358:19;:37::i;3344:98::-;3402:7;3429:5;3433:1;3429;:5;:::i;22592:207::-;22717:5;:3;:5::i;:::-;22707:6;22685:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:37;;22677:75;;;;-1:-1:-1;;;22677:75:0;;;;;;;:::i;:::-;22763:28;22775:7;22784:6;22763:11;:28::i;24492:191::-;24566:16;24585:6;;-1:-1:-1;;;;;24602:17:0;;;-1:-1:-1;;;;;;24602:17:0;;;;;;24635:40;;24585:6;;;;;;;24635:40;;24566:16;24635:40;24492:191;;:::o;39150:779::-;39255:7;;;;;;39399:38;39433:3;39399:29;39400:6;31593:2;39399:12;:29::i;:38::-;39378:59;-1:-1:-1;39448:23:0;39474:41;39511:3;39474:32;:6;31707:1;39474:10;:32::i;:41::-;39448:67;-1:-1:-1;39526:24:0;39553:42;39591:3;39553:33;:6;31651:1;39553:10;:33::i;:42::-;39526:69;-1:-1:-1;39606:23:0;39632:41;39669:3;39632:32;:6;31763:1;39632:10;:32::i;:41::-;39606:67;-1:-1:-1;39684:21:0;39708:40;39744:3;39708:31;:6;31818:1;39708:10;:31::i;:40::-;39781:16;;39812:10;;-1:-1:-1;39837:15:0;;-1:-1:-1;39837:15:0;-1:-1:-1;39781:16:0;-1:-1:-1;39150:779:0;;-1:-1:-1;;;39150:779:0:o;40579:527::-;40761:15;;40729:62;;40746:4;;-1:-1:-1;;;;;40761:15:0;40779:11;40729:8;:62::i;:::-;40834:15;;-1:-1:-1;;;;;40834:15:0;:31;40873:9;40906:4;40926:11;40834:15;;41038:7;:5;:7::i;:::-;41060:27;:15;41078:9;41060:27;:::i;:::-;40834:264;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40579:527;;:::o;41117:525::-;41254:16;;;41268:1;41254:16;;;;;;;;41230:21;;41254:16;;;;;;;;-1:-1:-1;;41291:15:0;;:22;;;-1:-1:-1;;;41291:22:0;;;;41230:40;;-1:-1:-1;;;;;;41291:15:0;;;;:20;;-1:-1:-1;41291:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41281:4;41286:1;41281:7;;;;;;-1:-1:-1;;;41281:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;41281:32:0;;;-1:-1:-1;;;;;41281:32:0;;;;;41342:4;41324;41329:1;41324:7;;;;;;-1:-1:-1;;;41324:7:0;;;;;;;;;-1:-1:-1;;;;;41324:23:0;;;:7;;;;;;;;;:23;41357:15;;;:66;41431:6;41357:15;41500:4;41527:10;41553:21;:15;41571:3;41553:21;:::i;:::-;41357:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41605:11:0;;41596:28;;-1:-1:-1;;;;;;41605:11:0;;-1:-1:-1;41617:6:0;;-1:-1:-1;41596:8:0;:28::i;39937:636::-;40013:9;40008:558;40032:7;:14;40028:18;;40008:558;;;40072:7;:19;40080:7;40088:1;40080:10;;;;;;-1:-1:-1;;;40080:10:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40080:10:0;40072:19;;;;;;;;;;;;;;;:47;;;;;40109:7;40117:1;40109:10;;;;;;-1:-1:-1;;;40109:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40109:10:0;40095;:24;;40072:47;40068:487;;;40140:21;40165:93;40254:3;40165:62;40213:13;:11;:13::i;:::-;40165:21;40175:7;40183:1;40175:10;;;;;;-1:-1:-1;;;40175:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40175:10:0;40165:9;:21::i;:93::-;40164:100;;40260:4;40164:100;:::i;:::-;40140:124;-1:-1:-1;40283:25:0;40311:37;40341:6;40311:25;:6;40140:124;40311:10;:25::i;:37::-;40283:65;;40393:1;40373:17;:21;:69;;;;;40422:20;;40398:21;40408:7;40416:1;40408:10;;;;;;-1:-1:-1;;;40408:10:0;;;;;;;;40398:21;:44;40373:69;40369:171;;;40475:5;-1:-1:-1;;;;;40468:22:0;;40491:7;40499:1;40491:10;;;;;;-1:-1:-1;;;40491:10:0;;;;;;;;;;;;;;;;;;;40468:52;;-1:-1:-1;;;;;;40468:52:0;;;;;;;;;-1:-1:-1;;;;;40491:10:0;;40502:17;;40468:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40369:171;40068:487;;;40048:3;;;;:::i;:::-;;;;40008:558;;38437:705;-1:-1:-1;;;;;38575:21:0;;38591:4;38575:21;38571:435;;38617:15;38627:4;38617:9;:15::i;:::-;38613:382;;38663:9;38658:322;38682:7;:14;38678:18;;38658:322;;;38744:4;-1:-1:-1;;;;;38730:18:0;:7;38738:1;38730:10;;;;;;-1:-1:-1;;;38730:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38730:10:0;:18;38726:235;;;38790:7;38798:14;;:18;;38815:1;;38798:18;:::i;:::-;38790:27;;;;;;-1:-1:-1;;;38790:27:0;;;;;;;;;;;;;;;;;;;38777:7;:10;;-1:-1:-1;;;;;38790:27:0;;;;38785:1;;38777:10;;;;-1:-1:-1;;;38777:10:0;;;;;;;;;;;;;;;;;:40;;;;;-1:-1:-1;;;;;38777:40:0;;;;;-1:-1:-1;;;;;38777:40:0;;;;;;38844:7;:13;;;;;-1:-1:-1;;;38844:13:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38844:13:0;;;;;-1:-1:-1;;;;;;38844:13:0;;;;;;;;;-1:-1:-1;;;;;38884:13:0;;;;:7;:13;;;;;:21;;-1:-1:-1;;38884:21:0;;;38932:5;;38726:235;38698:3;;;;:::i;:::-;;;;38658:322;;;;38613:382;-1:-1:-1;;;;;39022:19:0;;39036:4;39022:19;;;;:35;;-1:-1:-1;;;;;;39046:11:0;;;;;;:7;:11;;;;;;;;39045:12;39022:35;39018:117;;;-1:-1:-1;;;;;;39074:11:0;;;;;:7;:11;;;;;:18;;-1:-1:-1;;39074:18:0;39088:4;39074:18;;;;;;39107:7;:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;39107:16:0;;;;;;-1:-1:-1;38437:705:0:o;17690:399::-;-1:-1:-1;;;;;17774:21:0;;17766:65;;;;-1:-1:-1;;;17766:65:0;;;;;;;:::i;:::-;17844:49;17873:1;17877:7;17886:6;17844:20;:49::i;:::-;17922:6;17906:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17939:18:0;;;;;;:9;:18;;;;;:28;;17961:6;;17939:18;:28;;17961:6;;17939:28;:::i;:::-;;;;-1:-1:-1;;17983:37:0;;-1:-1:-1;;;;;17983:37:0;;;18000:1;;17983:37;;;;18013:6;;17983:37;:::i;:::-;;;;;;;;18033:48;18061:1;18065:7;18074:6;18033:19;:48::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:396::-;;;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:33;1665:5;1638:33;:::i;:::-;1690:5;-1:-1:-1;1747:2:1;1732:18;;1719:32;1760;1719;1760;:::i;1829:327::-;;;1958:2;1946:9;1937:7;1933:23;1929:32;1926:2;;;1979:6;1971;1964:22;1926:2;2023:9;2010:23;2042:33;2069:5;2042:33;:::i;:::-;2094:5;2146:2;2131:18;;;;2118:32;;-1:-1:-1;;;1916:240:1:o;2161:253::-;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2335:9;2322:23;2354:30;2378:5;2354:30;:::i;2419:257::-;;2539:2;2527:9;2518:7;2514:23;2510:32;2507:2;;;2560:6;2552;2545:22;2507:2;2597:9;2591:16;2616:30;2640:5;2616:30;:::i;2681:190::-;;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2814:6;2806;2799:22;2761:2;-1:-1:-1;2842:23:1;;2751:120;-1:-1:-1;2751:120:1:o;2876:327::-;;;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3026:6;3018;3011:22;2973:2;3067:9;3054:23;3044:33;;3127:2;3116:9;3112:18;3099:32;3140:33;3167:5;3140:33;:::i;3208:258::-;;;3337:2;3325:9;3316:7;3312:23;3308:32;3305:2;;;3358:6;3350;3343:22;3305:2;-1:-1:-1;;3386:23:1;;;3456:2;3441:18;;;3428:32;;-1:-1:-1;3295:171:1:o;3471:316::-;;;;3628:2;3616:9;3607:7;3603:23;3599:32;3596:2;;;3649:6;3641;3634:22;3596:2;3683:9;3677:16;3667:26;;3733:2;3722:9;3718:18;3712:25;3702:35;;3777:2;3766:9;3762:18;3756:25;3746:35;;3586:201;;;;;:::o;3792:203::-;-1:-1:-1;;;;;3956:32:1;;;;3938:51;;3926:2;3911:18;;3893:102::o;4000:274::-;-1:-1:-1;;;;;4192:32:1;;;;4174:51;;4256:2;4241:18;;4234:34;4162:2;4147:18;;4129:145::o;4279:607::-;-1:-1:-1;;;;;4638:15:1;;;4620:34;;4685:2;4670:18;;4663:34;;;;4728:2;4713:18;;4706:34;;;;4771:2;4756:18;;4749:34;;;;4820:15;;;4814:3;4799:19;;4792:44;4600:3;4852:19;;4845:35;;;;4569:3;4554:19;;4536:350::o;4891:187::-;5056:14;;5049:22;5031:41;;5019:2;5004:18;;4986:92::o;5318:911::-;;5600:3;5589:9;5585:19;5631:6;5620:9;5613:25;5657:2;5695:3;5690:2;5679:9;5675:18;5668:31;5719:6;5754;5748:13;5785:6;5777;5770:22;5823:3;5812:9;5808:19;5801:26;;5862:2;5854:6;5850:15;5836:29;;5883:4;5896:195;5910:6;5907:1;5904:13;5896:195;;;5975:13;;-1:-1:-1;;;;;5971:39:1;5959:52;;6066:15;;;;6031:12;;;;6007:1;5925:9;5896:195;;;-1:-1:-1;;;;;;;6147:32:1;;;;6142:2;6127:18;;6120:60;-1:-1:-1;;;6211:2:1;6196:18;6189:34;6108:3;5561:668;-1:-1:-1;;5561:668:1:o;6234:603::-;;6375:2;6404;6393:9;6386:21;6436:6;6430:13;6479:6;6474:2;6463:9;6459:18;6452:34;6504:4;6517:140;6531:6;6528:1;6525:13;6517:140;;;6626:14;;;6622:23;;6616:30;6592:17;;;6611:2;6588:26;6581:66;6546:10;;6517:140;;;6675:6;6672:1;6669:13;6666:2;;;6745:4;6740:2;6731:6;6720:9;6716:22;6712:31;6705:45;6666:2;-1:-1:-1;6821:2:1;6800:15;-1:-1:-1;;6796:29:1;6781:45;;;;6828:2;6777:54;;6355:482;-1:-1:-1;;;6355:482:1:o;6842:399::-;7044:2;7026:21;;;7083:2;7063:18;;;7056:30;7122:34;7117:2;7102:18;;7095:62;-1:-1:-1;;;7188:2:1;7173:18;;7166:33;7231:3;7216:19;;7016:225::o;7246:402::-;7448:2;7430:21;;;7487:2;7467:18;;;7460:30;7526:34;7521:2;7506:18;;7499:62;-1:-1:-1;;;7592:2:1;7577:18;;7570:36;7638:3;7623:19;;7420:228::o;7653:398::-;7855:2;7837:21;;;7894:2;7874:18;;;7867:30;7933:34;7928:2;7913:18;;7906:62;-1:-1:-1;;;7999:2:1;7984:18;;7977:32;8041:3;8026:19;;7827:224::o;8056:335::-;8258:2;8240:21;;;8297:2;8277:18;;;8270:30;-1:-1:-1;;;8331:2:1;8316:18;;8309:41;8382:2;8367:18;;8230:161::o;8396:353::-;8598:2;8580:21;;;8637:2;8617:18;;;8610:30;8676:31;8671:2;8656:18;;8649:59;8740:2;8725:18;;8570:179::o;8754:402::-;8956:2;8938:21;;;8995:2;8975:18;;;8968:30;9034:34;9029:2;9014:18;;9007:62;-1:-1:-1;;;9100:2:1;9085:18;;9078:36;9146:3;9131:19;;8928:228::o;9161:336::-;9363:2;9345:21;;;9402:2;9382:18;;;9375:30;-1:-1:-1;;;9436:2:1;9421:18;;9414:42;9488:2;9473:18;;9335:162::o;9502:356::-;9704:2;9686:21;;;9723:18;;;9716:30;9782:34;9777:2;9762:18;;9755:62;9849:2;9834:18;;9676:182::o;9863:401::-;10065:2;10047:21;;;10104:2;10084:18;;;10077:30;10143:34;10138:2;10123:18;;10116:62;-1:-1:-1;;;10209:2:1;10194:18;;10187:35;10254:3;10239:19;;10037:227::o;10269:335::-;10471:2;10453:21;;;10510:2;10490:18;;;10483:30;-1:-1:-1;;;10544:2:1;10529:18;;10522:41;10595:2;10580:18;;10443:161::o;10609:338::-;10811:2;10793:21;;;10850:2;10830:18;;;10823:30;-1:-1:-1;;;10884:2:1;10869:18;;10862:44;10938:2;10923:18;;10783:164::o;10952:349::-;11154:2;11136:21;;;11193:2;11173:18;;;11166:30;11232:27;11227:2;11212:18;;11205:55;11292:2;11277:18;;11126:175::o;11306:400::-;11508:2;11490:21;;;11547:2;11527:18;;;11520:30;11586:34;11581:2;11566:18;;11559:62;-1:-1:-1;;;11652:2:1;11637:18;;11630:34;11696:3;11681:19;;11480:226::o;11711:401::-;11913:2;11895:21;;;11952:2;11932:18;;;11925:30;11991:34;11986:2;11971:18;;11964:62;-1:-1:-1;;;12057:2:1;12042:18;;12035:35;12102:3;12087:19;;11885:227::o;12117:355::-;12319:2;12301:21;;;12358:2;12338:18;;;12331:30;12397:33;12392:2;12377:18;;12370:61;12463:2;12448:18;;12291:181::o;12477:177::-;12623:25;;;12611:2;12596:18;;12578:76::o;12659:500::-;12899:25;;;12960:2;12955;12940:18;;12933:30;;;12999:1;12979:18;;;12972:29;-1:-1:-1;;;13032:3:1;13017:19;;13010:38;-1:-1:-1;;;;;13120:32:1;13115:2;13100:18;;13093:60;13080:3;13065:19;;12889:270::o;13164:502::-;13404:25;;;13465:2;13460;13445:18;;13438:30;;;13504:1;13484:18;;;13477:29;-1:-1:-1;;;13537:3:1;13522:19;;13515:40;-1:-1:-1;;;;;13627:32:1;13622:2;13607:18;;13600:60;13587:3;13572:19;;13394:272::o;13671:502::-;13911:25;;;13972:2;13967;13952:18;;13945:30;;;14011:1;13991:18;;;13984:29;-1:-1:-1;;;14044:3:1;14029:19;;14022:40;-1:-1:-1;;;;;14134:32:1;14129:2;14114:18;;14107:60;14094:3;14079:19;;13901:272::o;14178:500::-;14418:25;;;14479:2;14474;14459:18;;14452:30;;;14518:1;14498:18;;;14491:29;-1:-1:-1;;;14551:3:1;14536:19;;14529:38;-1:-1:-1;;;;;14639:32:1;14634:2;14619:18;;14612:60;14599:3;14584:19;;14408:270::o;14683:506::-;14923:25;;;14984:2;14979;14964:18;;14957:30;;;15023:2;15003:18;;;14996:30;-1:-1:-1;;;15057:3:1;15042:19;;15035:43;-1:-1:-1;;;;;15150:32:1;15145:2;15130:18;;15123:60;15110:3;15095:19;;14913:276::o;15194:184::-;15366:4;15354:17;;;;15336:36;;15324:2;15309:18;;15291:87::o;15383:128::-;;15454:1;15450:6;15447:1;15444:13;15441:2;;;15460:18;;:::i;:::-;-1:-1:-1;15496:9:1;;15431:80::o;15516:217::-;;15582:1;15572:2;;-1:-1:-1;;;15607:31:1;;15661:4;15658:1;15651:15;15689:4;15614:1;15679:15;15572:2;-1:-1:-1;15718:9:1;;15562:171::o;15738:168::-;;15844:1;15840;15836:6;15832:14;15829:1;15826:21;15821:1;15814:9;15807:17;15803:45;15800:2;;;15851:18;;:::i;:::-;-1:-1:-1;15891:9:1;;15790:116::o;15911:125::-;;15979:1;15976;15973:8;15970:2;;;15984:18;;:::i;:::-;-1:-1:-1;16021:9:1;;15960:76::o;16041:380::-;16126:1;16116:12;;16173:1;16163:12;;;16184:2;;16238:4;16230:6;16226:17;16216:27;;16184:2;16291;16283:6;16280:14;16260:18;16257:38;16254:2;;;16337:10;16332:3;16328:20;16325:1;16318:31;16372:4;16369:1;16362:15;16400:4;16397:1;16390:15;16254:2;;16096:325;;;:::o;16426:135::-;;-1:-1:-1;;16486:17:1;;16483:2;;;16506:18;;:::i;:::-;-1:-1:-1;16553:1:1;16542:13;;16473:88::o;16566:127::-;16627:10;16622:3;16618:20;16615:1;16608:31;16658:4;16655:1;16648:15;16682:4;16679:1;16672:15;16698:133;-1:-1:-1;;;;;16775:31:1;;16765:42;;16755:2;;16821:1;16818;16811:12;16836:120;16924:5;16917:13;16910:21;16903:5;16900:32;16890:2;;16946:1;16943;16936:12
Swarm Source
ipfs://e59b1290a5b219c76d4a861cc1b9bf1be0081434c5ac63d4f66d5c4db4cd11ef
[ 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.