ERC-20
Overview
Max Total Supply
200,000,000 Amm0x
Holders
118
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
25,940.409289081607547856 Amm0xValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Amm0x
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-06 */ // SPDX-License-Identifier: Unlicensed // Inspired by https://reflect.finance/ pragma solidity 0.8.13; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract Amm0x is Context, IERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; using Address for address; struct Fees { uint256 reflectFee; uint256 liquidityFee; uint256 burnFee; uint256 teamFee; } IUniswapV2Router02 public immutable uniswapV2Router; // Pancake V2 Router 0x10ED43C718714eb63d5aA57B78B54704E256024E; // Uniswap V2 Router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; address private constant deadWallet = 0x000000000000000000000000000000000000dEaD; address public teamWallet; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 2 * 10**8 * 10**18; //200 million uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private whaleLimit = _rTotal.div(100); string private constant _name = "Amm0x Token"; string private constant _symbol = "Amm0x"; uint8 private constant _decimals = 18; uint256 private _reflectionFee = 2; uint256 private _liquidityTax = 2; uint256 private _burningFee = 2; uint256 private _teamTax = 2; event SwapAndLiquify(uint256, uint256, uint256, uint256); event ExcludeAccount(address); event IncludeAccount(address); event ChangeFees(uint256); event ExcludeFromFee(address); event IncludeInFee(address); event EmergencyWithdraw(uint256); constructor( address _router, address _teamWallet ) { uniswapV2Router = IUniswapV2Router02(_router); teamWallet = _teamWallet; _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_router] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcluded(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflect(uint256 tAmount) external { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); emit ExcludeAccount(account); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } emit IncludeAccount(account); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 currentReflectionFee = _reflectionFee; uint256 currentLiquidityFee = _liquidityTax; uint256 currentBurnFee = _burningFee; uint256 currentTeamFee = _teamTax; if (sender != owner()) { require( amount + balanceOf(recipient) <= whaleLimit, "Transfer amount exceeds whaleLimit." ); } if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { _reflectionFee = 0; _liquidityTax = 0; _burningFee = 0; _teamTax = 0; } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { _reflectionFee = currentReflectionFee; _liquidityTax = currentLiquidityFee; _burningFee = currentBurnFee; _teamTax = currentTeamFee; } } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _liquidityFee(rFees.liquidityFee, tFees.liquidityFee); _burnFee(rFees.burnFee, tFees.burnFee); _teamFee(rFees.teamFee, tFees.teamFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _liquidityFee(rFees.liquidityFee, tFees.liquidityFee); _burnFee(rFees.burnFee, tFees.burnFee); _teamFee(rFees.teamFee, tFees.teamFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _liquidityFee(rFees.liquidityFee, tFees.liquidityFee); _burnFee(rFees.burnFee, tFees.burnFee); _teamFee(rFees.teamFee, tFees.teamFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _liquidityFee(rFees.liquidityFee, tFees.liquidityFee); _burnFee(rFees.burnFee, tFees.burnFee); _teamFee(rFees.teamFee, tFees.teamFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rReflectFee, uint256 tReflectFee) private { _rTotal = _rTotal.sub(rReflectFee); _tFeeTotal = _tFeeTotal.add(tReflectFee); } function _liquidityFee(uint256 rLiquidityFee, uint256 tLiquidityFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidityFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidityFee); } function _burnFee(uint256 rBurnFee, uint256 tBurnFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rBurnFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tBurnFee); } function _teamFee(uint256 rTeamFee, uint256 tTeamFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rTeamFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tTeamFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, Fees memory, uint256, Fees memory ) { (uint256 tTransferAmount, Fees memory tFees) = _getTValues(tAmount); uint256 currentRate = _getRate(); ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees ) = _getRValues(tAmount, tFees, currentRate); return (rAmount, rTransferAmount, rFees, tTransferAmount, tFees); } function _getTValues(uint256 tAmount) private view returns (uint256, Fees memory) { Fees memory tFees; tFees.reflectFee = tAmount.mul(_reflectionFee).div(100); tFees.liquidityFee = tAmount.mul(_liquidityTax).div(100); tFees.burnFee = tAmount.mul(_burningFee).div(100); tFees.teamFee = tAmount.mul(_teamTax).div(100); uint256 tTransferAmount = tAmount .sub(tFees.reflectFee) .sub(tFees.liquidityFee) .sub(tFees.burnFee) .sub(tFees.teamFee); return (tTransferAmount, tFees); } function _getRValues( uint256 tAmount, Fees memory tFees, uint256 currentRate ) private pure returns ( uint256, uint256, Fees memory ) { Fees memory rFees; uint256 rAmount = tAmount.mul(currentRate); rFees.reflectFee = tFees.reflectFee.mul(currentRate); rFees.liquidityFee = tFees.liquidityFee.mul(currentRate); rFees.burnFee = tFees.burnFee.mul(currentRate); rFees.teamFee = tFees.teamFee.mul(currentRate); uint256 rTransferAmount = rAmount .sub(rFees.reflectFee) .sub(rFees.liquidityFee) .sub(rFees.burnFee) .sub(rFees.teamFee); return (rAmount, rTransferAmount, rFees); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function reflectionFee() external view returns (uint256) { return _reflectionFee; } function changeFees( uint256 _newReflectionFee, uint256 _newLiquidityFee, uint256 _newBurnFee, uint256 _newTeamFee ) external onlyOwner returns (bool) { uint256 totalFee = _newReflectionFee .add(_newLiquidityFee) .add(_newBurnFee) .add(_newTeamFee); require(totalFee <= 15, "max fee limit exceeded"); _reflectionFee = _newReflectionFee; _liquidityTax = _newLiquidityFee; _burningFee = _newBurnFee; _teamTax = _newTeamFee; emit ChangeFees(totalFee); return true; } function liquidityFee() public view returns (uint256) { return _liquidityTax; } function burningFee() public view returns (uint256) { return _burningFee; } function teamFee() public view returns (uint256) { return _teamTax; } function excludeFromFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); return true; } function includeInFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = false; emit IncludeInFee(account); return true; } function swapAndLiquify() external nonReentrant onlyOwner returns (bool) { uint256 balanceInContract = balanceOf(address(this)); uint256 half = balanceInContract.div(2); uint256 otherHalf = balanceInContract.sub(half); uint256 initialBalance = address(this).balance; uint256 lf = liquidityFee(); uint256 bf = burningFee(); uint256 tf = teamFee(); uint256 denominator = lf + bf + tf; uint256 liquidityAmount = half.mul(lf).div(denominator); uint256 burnAmount = half.mul(bf).div(denominator); uint256 teamAmount = half.mul(tf).div(denominator); emit SwapAndLiquify( half, liquidityAmount, burnAmount, teamAmount ); swapTokensForEth(liquidityAmount); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); if (teamAmount > 0) { _sendTeam(teamAmount); } if (burnAmount > 0) { _burn(burnAmount); } return true; } function calculateLiquidity() external view returns (uint256) { uint256 balanceInContract = balanceOf(address(this)); uint256 lf = liquidityFee(); uint256 bf = burningFee(); uint256 tf = teamFee(); uint256 denominator = lf + bf + tf; return balanceInContract.mul(lf).div(denominator); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _burn(uint256 burnAmount) internal { _transfer(address(this), deadWallet, burnAmount); emit Transfer(address(this), deadWallet, burnAmount); } function _sendTeam(uint256 teamAmount) internal { _transfer(address(this), teamWallet, teamAmount); emit Transfer(address(this), teamWallet, teamAmount); } function setTeamWallet(address _newAddress) external onlyOwner { teamWallet = _newAddress; } function emergencyWithdraw() external nonReentrant onlyOwner { uint256 ethBalance = address(this).balance; (bool success, ) = payable(owner()).call{value: ethBalance}(""); require(success, "Transfer failed!"); emit EmergencyWithdraw(ethBalance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeInFee","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":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"burningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_newBurnFee","type":"uint256"},{"internalType":"uint256","name":"_newTeamFee","type":"uint256"}],"name":"changeFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526200001d6aa56fa5b99019a5c8000000600019620002ed565b6200002b9060001962000304565b6009556200004b6064600954620001e260201b6200146b1790919060201c565b600b556002600c556002600d556002600e556002600f553480156200006f57600080fd5b5060405162002e5f38038062002e5f833981016040819052620000929162000347565b6200009d3362000233565b600180556001600160a01b03828116608052600880546001600160a01b03191691831691909117905560095460026000620000e06000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600560006200011a6200028360201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155908616835291208054909216179055620001816000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6aa56fa5b99019a5c8000000604051620001d291815260200190565b60405180910390a35050620003ee565b60006200022c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200029260201b60201c565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b60008183620002bf5760405162461bcd60e51b8152600401620002b691906200037f565b60405180910390fd5b506000620002ce8486620003d7565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b600082620002ff57620002ff620002d7565b500690565b6000828210156200032557634e487b7160e01b600052601160045260246000fd5b500390565b80516001600160a01b03811681146200034257600080fd5b919050565b600080604083850312156200035b57600080fd5b62000366836200032a565b915062000376602084016200032a565b90509250929050565b600060208083528351808285015260005b81811015620003ae5785810183015185820160400152820162000390565b81811115620003c1576000604083870101525b50601f01601f1916929092016040019392505050565b600082620003e957620003e9620002d7565b500490565b608051612a326200042d600039600081816102f201528181611c0d01528181611cc601528181611d0201528181611d7c0152611da30152612a326000f3fe6080604052600436106101fd5760003560e01c806383ad79941161010d578063b29ad50a116100a0578063dd62ed3e1161006f578063dd62ed3e146105d3578063ea2f0b3714610619578063f2cc0c1814610639578063f2fde38b14610659578063f84354f11461067957600080fd5b8063b29ad50a1461055b578063cba0e99614610570578063d7c94efd146105a9578063db2e21bc146105be57600080fd5b806398118cb4116100dc57806398118cb4146104f1578063a457c2d714610506578063a66604fc14610526578063a9059cbb1461053b57600080fd5b806383ad79941461047b5780638da5cb5b1461049057806390f712cc146104ae57806395d89b41146104c357600080fd5b80632d838119116101905780634549b0391161015f5780634549b039146103e65780635992704414610406578063650c42261461042657806370a0823114610446578063715018a61461046657600080fd5b80632d8381191461036a578063313ce5671461038a57806339509351146103a6578063437823ec146103c657600080fd5b80631525ff7d116101cc5780631525ff7d146102c05780631694505e146102e057806318160ddd1461032c57806323b872dd1461034a57600080fd5b8063053ab1821461020957806306fdde031461022b578063095ea7b31461027157806313114a9d146102a157600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061022961022436600461260f565b610699565b005b34801561023757600080fd5b5060408051808201909152600b81526a20b6b6983c102a37b5b2b760a91b60208201525b6040516102689190612628565b60405180910390f35b34801561027d57600080fd5b5061029161028c366004612692565b610786565b6040519015158152602001610268565b3480156102ad57600080fd5b50600a545b604051908152602001610268565b3480156102cc57600080fd5b506102296102db3660046126be565b61079d565b3480156102ec57600080fd5b506103147f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610268565b34801561033857600080fd5b506aa56fa5b99019a5c80000006102b2565b34801561035657600080fd5b506102916103653660046126db565b6107e9565b34801561037657600080fd5b506102b261038536600461260f565b610852565b34801561039657600080fd5b5060405160128152602001610268565b3480156103b257600080fd5b506102916103c1366004612692565b6108d6565b3480156103d257600080fd5b506102916103e13660046126be565b61090c565b3480156103f257600080fd5b506102b261040136600461271c565b6109bd565b34801561041257600080fd5b50600854610314906001600160a01b031681565b34801561043257600080fd5b50610291610441366004612751565b610a51565b34801561045257600080fd5b506102b26104613660046126be565b610b33565b34801561047257600080fd5b50610229610b92565b34801561048757600080fd5b50600c546102b2565b34801561049c57600080fd5b506000546001600160a01b0316610314565b3480156104ba57600080fd5b50600e546102b2565b3480156104cf57600080fd5b50604080518082019091526005815264082dada60f60db1b602082015261025b565b3480156104fd57600080fd5b50600d546102b2565b34801561051257600080fd5b50610291610521366004612692565b610bc8565b34801561053257600080fd5b506102b2610c17565b34801561054757600080fd5b50610291610556366004612692565b610c83565b34801561056757600080fd5b50610291610c90565b34801561057c57600080fd5b5061029161058b3660046126be565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105b557600080fd5b50600f546102b2565b3480156105ca57600080fd5b50610229610e53565b3480156105df57600080fd5b506102b26105ee366004612783565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561062557600080fd5b506102916106343660046126be565b610fb7565b34801561064557600080fd5b506102296106543660046126be565b611059565b34801561066557600080fd5b506102296106743660046126be565b6111e3565b34801561068557600080fd5b506102296106943660046126be565b61127e565b3360008181526006602052604090205460ff16156107135760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b600061071e836114ad565b505050506001600160a01b038316600090815260026020526040902054909150610748908261154c565b6001600160a01b03831660009081526002602052604090205560095461076e908261154c565b600955600a5461077e908461158e565b600a55505050565b60006107933384846115ed565b5060015b92915050565b6000546001600160a01b031633146107c75760405162461bcd60e51b815260040161070a906127b1565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006107f6848484611711565b6108488433610843856040518060600160405280602881526020016129b0602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a87565b6115ed565b5060019392505050565b60006009548211156108b95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161070a565b60006108c3611ac1565b90506108cf838261146b565b9392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610793918590610843908661158e565b600080546001600160a01b031633146109375760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03821661095d5760405162461bcd60e51b815260040161070a906127e6565b6001600160a01b038216600081815260056020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a1506001919050565b60006aa56fa5b99019a5c8000000831115610a1a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161070a565b81610a38576000610a2a846114ad565b509294506107979350505050565b6000610a43846114ad565b509194506107979350505050565b600080546001600160a01b03163314610a7c5760405162461bcd60e51b815260040161070a906127b1565b6000610a9483610a8e86818a8a61158e565b9061158e565b9050600f811115610ae05760405162461bcd60e51b81526020600482015260166024820152751b585e08199959481b1a5b5a5d08195e18d95959195960521b604482015260640161070a565b600c869055600d859055600e849055600f8390556040518181527f806326a10244294aae451f3fb879c0cd5b079235927ce63a105b8a07240c928f9060200160405180910390a150600195945050505050565b6001600160a01b03811660009081526006602052604081205460ff1615610b7057506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461079790610852565b6000546001600160a01b03163314610bbc5760405162461bcd60e51b815260040161070a906127b1565b610bc66000611ae4565b565b60006107933384610843856040518060600160405280602581526020016129d8602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a87565b600080610c2330610b33565b90506000610c30600d5490565b90506000610c3d600e5490565b90506000610c4a600f5490565b9050600081610c59848661283e565b610c63919061283e565b9050610c7981610c738787611b34565b9061146b565b9550505050505090565b6000610793338484611711565b6000600260015403610ce45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161070a565b60026001556000546001600160a01b03163314610d135760405162461bcd60e51b815260040161070a906127b1565b6000610d1e30610b33565b90506000610d2d82600261146b565b90506000610d3b838361154c565b9050476000610d49600d5490565b90506000610d56600e5490565b90506000610d63600f5490565b9050600081610d72848661283e565b610d7c919061283e565b90506000610d8e82610c738a88611b34565b90506000610da083610c738b88611b34565b90506000610db284610c738c88611b34565b604080518c815260208101869052908101849052606081018290529091507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f9060800160405180910390a1610e0683611bb6565b6000610e12478a61154c565b9050610e1e8a82611d76565b8115610e2d57610e2d82611e7c565b8215610e3c57610e3c83611edc565b60019c505050505050505050505050506001805590565b600260015403610ea55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161070a565b60026001556000546001600160a01b03163314610ed45760405162461bcd60e51b815260040161070a906127b1565b476000610ee96000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b5050905080610f7c5760405162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015260640161070a565b6040518281527f99d7f8b71cfb9126984f7a5eed3a40e64a8959e9b0e442221546fb04ec6a489c9060200160405180910390a1505060018055565b600080546001600160a01b03163314610fe25760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b0382166110085760405162461bcd60e51b815260040161070a906127e6565b6001600160a01b038216600081815260056020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016109ad565b6000546001600160a01b031633146110835760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03811660009081526006602052604090205460ff16156110ec5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161070a565b6001600160a01b03811660009081526002602052604090205415611146576001600160a01b03811660009081526002602052604090205461112c90610852565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556007805491820181559093527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b0319168417905590519182527f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d591015b60405180910390a150565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b0381166112725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161070a565b61127b81611ae4565b50565b6000546001600160a01b031633146112a85760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03811660009081526006602052604090205460ff166113105760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161070a565b60005b60075481101561143157816001600160a01b03166007828154811061133a5761133a612856565b6000918252602090912001546001600160a01b03160361141f57600780546113649060019061286c565b8154811061137457611374612856565b600091825260209091200154600780546001600160a01b0390921691839081106113a0576113a0612856565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff1916905560078054806113f8576113f8612883565b600082815260209020810160001990810180546001600160a01b0319169055019055611431565b8061142981612899565b915050611313565b506040516001600160a01b03821681527f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c906020016111d8565b60006108cf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f1f565b6000806114db6040518060800160405280600081526020016000815260200160008152602001600081525090565b60006115086040518060800160405280600081526020016000815260200160008152602001600081525090565b60008061151488611f4d565b915091506000611522611ac1565b905060008060006115348c8686612047565b919e909d50909b509599509397509395505050505050565b60006108cf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b60008061159b838561283e565b9050838110156108cf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161070a565b6001600160a01b03831661164f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161070a565b6001600160a01b0382166116b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161070a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161070a565b6001600160a01b0382166117d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161070a565b600081116118395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161070a565b600c54600d54600e54600f546000546001600160a01b038881169116146118ca57600b5461186687610b33565b611870908761283e565b11156118ca5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220616d6f756e742065786365656473207768616c654c696d60448201526234ba1760e91b606482015260840161070a565b6001600160a01b03871660009081526005602052604090205460ff168061190957506001600160a01b03861660009081526005602052604090205460ff165b15611923576000600c819055600d819055600e819055600f555b6001600160a01b03871660009081526006602052604090205460ff16801561196457506001600160a01b03861660009081526006602052604090205460ff16155b1561197957611974878787612130565b611a25565b6001600160a01b03871660009081526006602052604090205460ff161580156119ba57506001600160a01b03861660009081526006602052604090205460ff165b156119ca57611974878787612283565b6001600160a01b03871660009081526006602052604090205460ff168015611a0a57506001600160a01b03861660009081526006602052604090205460ff165b15611a1a57611974878787612329565b611a25878787612399565b6001600160a01b03871660009081526005602052604090205460ff1680611a6457506001600160a01b03861660009081526005602052604090205460ff165b15611a7e57600c849055600d839055600e829055600f8190555b50505050505050565b60008184841115611aab5760405162461bcd60e51b815260040161070a9190612628565b506000611ab8848661286c565b95945050505050565b6000806000611ace6123da565b9092509050611add828261146b565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082600003611b4657506000610797565b6000611b5283856128b2565b905082611b5f85836128d1565b146108cf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161070a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611beb57611beb612856565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8d91906128f3565b81600181518110611ca057611ca0612856565b60200260200101906001600160a01b031690816001600160a01b031681525050611ceb307f0000000000000000000000000000000000000000000000000000000000000000846115ed565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d40908590600090869030904290600401612910565b600060405180830381600087803b158015611d5a57600080fd5b505af1158015611d6e573d6000803e3d6000fd5b505050505050565b611da1307f0000000000000000000000000000000000000000000000000000000000000000846115ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611de86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612981565b5050505050565b600854611e949030906001600160a01b031683611711565b6008546040518281526001600160a01b039091169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b611ee93061dead83611711565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ed1565b60008183611f405760405162461bcd60e51b815260040161070a9190612628565b506000611ab884866128d1565b6000611f7a6040518060800160405280600081526020016000815260200160008152602001600081525090565b611fa56040518060800160405280600081526020016000815260200160008152602001600081525090565b611fbf6064610c73600c5487611b3490919063ffffffff16565b8152600d54611fd690606490610c73908790611b34565b6020820152600e54611ff090606490610c73908790611b34565b6040820152600f5461200a90606490610c73908790611b34565b6060820181905260408201516020830151835160009361203c9390926120369283919082908c9061154c565b9061154c565b959194509092505050565b6000806120756040518060800160405280600081526020016000815260200160008152602001600081525090565b6120a06040518060800160405280600081526020016000815260200160008152602001600081525090565b60006120ac8887611b34565b87519091506120bb9087611b34565b825260208701516120cc9087611b34565b602083015260408701516120e09087611b34565b604083015260608701516120f49087611b34565b60608301819052604083015160208401518451600093612120939092612036928391908290899061154c565b9199919850919650945050505050565b6000806000806000612141866114ad565b6001600160a01b038d1660009081526003602052604090205494995092975090955093509150612171908761154c565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546121a0908661154c565b6001600160a01b03808a1660009081526002602052604080822093909355908916815220546121cf908561158e565b6001600160a01b038816600090815260026020526040902055825181516121f6919061257e565b612208836020015182602001516125a2565b61221a836040015182604001516125a2565b61222c836060015182606001516125a2565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227191815260200190565b60405180910390a35050505050505050565b6000806000806000612294866114ad565b6001600160a01b038d16600090815260026020526040902054949950929750909550935091506122c4908661154c565b6001600160a01b03808a16600090815260026020908152604080832094909455918a168152600390915220546122fa908361158e565b6001600160a01b0388166000908152600360209081526040808320939093556002905220546121cf908561158e565b600080600080600061233a866114ad565b6001600160a01b038d166000908152600360205260409020549499509297509095509350915061236a908761154c565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546122c4908661154c565b60008060008060006123aa866114ad565b6001600160a01b038d16600090815260026020526040902054949950929750909550935091506121a0908661154c565b60095460009081906aa56fa5b99019a5c8000000825b60075481101561253d5782600260006007848154811061241257612412612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061247d575081600360006007848154811061245657612456612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561249b575050600954936aa56fa5b99019a5c80000009350915050565b6124e160026000600784815481106124b5576124b5612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061154c565b925061252960036000600784815481106124fd576124fd612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061154c565b91508061253581612899565b9150506123f0565b50600954612556906aa56fa5b99019a5c800000061146b565b821015612575575050600954926aa56fa5b99019a5c800000092509050565b90939092509050565b60095461258b908361154c565b600955600a5461259b908261158e565b600a555050565b306000908152600260205260409020546125bc908361158e565b3060009081526002602090815260408083209390935560069052205460ff161561260b57306000908152600360205260409020546125fa908261158e565b306000908152600360205260409020555b5050565b60006020828403121561262157600080fd5b5035919050565b600060208083528351808285015260005b8181101561265557858101830151858201604001528201612639565b81811115612667576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461127b57600080fd5b600080604083850312156126a557600080fd5b82356126b08161267d565b946020939093013593505050565b6000602082840312156126d057600080fd5b81356108cf8161267d565b6000806000606084860312156126f057600080fd5b83356126fb8161267d565b9250602084013561270b8161267d565b929592945050506040919091013590565b6000806040838503121561272f57600080fd5b823591506020830135801515811461274657600080fd5b809150509250929050565b6000806000806080858703121561276757600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561279657600080fd5b82356127a18161267d565b915060208301356127468161267d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f45524332303a206163636f756e7420697320746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561285157612851612828565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561287e5761287e612828565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016128ab576128ab612828565b5060010190565b60008160001904831182151516156128cc576128cc612828565b500290565b6000826128ee57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561290557600080fd5b81516108cf8161267d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129605784516001600160a01b03168352938301939183019160010161293b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561299657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ccef9e3ae82ca62a1a97f976f2af001ffe06be5f970dbed0622a2ecd9b3dbe7a64736f6c634300080d00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000de359c8dfc3ba7785d4df81b42323673146cc1b9
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c806383ad79941161010d578063b29ad50a116100a0578063dd62ed3e1161006f578063dd62ed3e146105d3578063ea2f0b3714610619578063f2cc0c1814610639578063f2fde38b14610659578063f84354f11461067957600080fd5b8063b29ad50a1461055b578063cba0e99614610570578063d7c94efd146105a9578063db2e21bc146105be57600080fd5b806398118cb4116100dc57806398118cb4146104f1578063a457c2d714610506578063a66604fc14610526578063a9059cbb1461053b57600080fd5b806383ad79941461047b5780638da5cb5b1461049057806390f712cc146104ae57806395d89b41146104c357600080fd5b80632d838119116101905780634549b0391161015f5780634549b039146103e65780635992704414610406578063650c42261461042657806370a0823114610446578063715018a61461046657600080fd5b80632d8381191461036a578063313ce5671461038a57806339509351146103a6578063437823ec146103c657600080fd5b80631525ff7d116101cc5780631525ff7d146102c05780631694505e146102e057806318160ddd1461032c57806323b872dd1461034a57600080fd5b8063053ab1821461020957806306fdde031461022b578063095ea7b31461027157806313114a9d146102a157600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061022961022436600461260f565b610699565b005b34801561023757600080fd5b5060408051808201909152600b81526a20b6b6983c102a37b5b2b760a91b60208201525b6040516102689190612628565b60405180910390f35b34801561027d57600080fd5b5061029161028c366004612692565b610786565b6040519015158152602001610268565b3480156102ad57600080fd5b50600a545b604051908152602001610268565b3480156102cc57600080fd5b506102296102db3660046126be565b61079d565b3480156102ec57600080fd5b506103147f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610268565b34801561033857600080fd5b506aa56fa5b99019a5c80000006102b2565b34801561035657600080fd5b506102916103653660046126db565b6107e9565b34801561037657600080fd5b506102b261038536600461260f565b610852565b34801561039657600080fd5b5060405160128152602001610268565b3480156103b257600080fd5b506102916103c1366004612692565b6108d6565b3480156103d257600080fd5b506102916103e13660046126be565b61090c565b3480156103f257600080fd5b506102b261040136600461271c565b6109bd565b34801561041257600080fd5b50600854610314906001600160a01b031681565b34801561043257600080fd5b50610291610441366004612751565b610a51565b34801561045257600080fd5b506102b26104613660046126be565b610b33565b34801561047257600080fd5b50610229610b92565b34801561048757600080fd5b50600c546102b2565b34801561049c57600080fd5b506000546001600160a01b0316610314565b3480156104ba57600080fd5b50600e546102b2565b3480156104cf57600080fd5b50604080518082019091526005815264082dada60f60db1b602082015261025b565b3480156104fd57600080fd5b50600d546102b2565b34801561051257600080fd5b50610291610521366004612692565b610bc8565b34801561053257600080fd5b506102b2610c17565b34801561054757600080fd5b50610291610556366004612692565b610c83565b34801561056757600080fd5b50610291610c90565b34801561057c57600080fd5b5061029161058b3660046126be565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105b557600080fd5b50600f546102b2565b3480156105ca57600080fd5b50610229610e53565b3480156105df57600080fd5b506102b26105ee366004612783565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561062557600080fd5b506102916106343660046126be565b610fb7565b34801561064557600080fd5b506102296106543660046126be565b611059565b34801561066557600080fd5b506102296106743660046126be565b6111e3565b34801561068557600080fd5b506102296106943660046126be565b61127e565b3360008181526006602052604090205460ff16156107135760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b600061071e836114ad565b505050506001600160a01b038316600090815260026020526040902054909150610748908261154c565b6001600160a01b03831660009081526002602052604090205560095461076e908261154c565b600955600a5461077e908461158e565b600a55505050565b60006107933384846115ed565b5060015b92915050565b6000546001600160a01b031633146107c75760405162461bcd60e51b815260040161070a906127b1565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006107f6848484611711565b6108488433610843856040518060600160405280602881526020016129b0602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a87565b6115ed565b5060019392505050565b60006009548211156108b95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161070a565b60006108c3611ac1565b90506108cf838261146b565b9392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610793918590610843908661158e565b600080546001600160a01b031633146109375760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03821661095d5760405162461bcd60e51b815260040161070a906127e6565b6001600160a01b038216600081815260056020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a1506001919050565b60006aa56fa5b99019a5c8000000831115610a1a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161070a565b81610a38576000610a2a846114ad565b509294506107979350505050565b6000610a43846114ad565b509194506107979350505050565b600080546001600160a01b03163314610a7c5760405162461bcd60e51b815260040161070a906127b1565b6000610a9483610a8e86818a8a61158e565b9061158e565b9050600f811115610ae05760405162461bcd60e51b81526020600482015260166024820152751b585e08199959481b1a5b5a5d08195e18d95959195960521b604482015260640161070a565b600c869055600d859055600e849055600f8390556040518181527f806326a10244294aae451f3fb879c0cd5b079235927ce63a105b8a07240c928f9060200160405180910390a150600195945050505050565b6001600160a01b03811660009081526006602052604081205460ff1615610b7057506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461079790610852565b6000546001600160a01b03163314610bbc5760405162461bcd60e51b815260040161070a906127b1565b610bc66000611ae4565b565b60006107933384610843856040518060600160405280602581526020016129d8602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a87565b600080610c2330610b33565b90506000610c30600d5490565b90506000610c3d600e5490565b90506000610c4a600f5490565b9050600081610c59848661283e565b610c63919061283e565b9050610c7981610c738787611b34565b9061146b565b9550505050505090565b6000610793338484611711565b6000600260015403610ce45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161070a565b60026001556000546001600160a01b03163314610d135760405162461bcd60e51b815260040161070a906127b1565b6000610d1e30610b33565b90506000610d2d82600261146b565b90506000610d3b838361154c565b9050476000610d49600d5490565b90506000610d56600e5490565b90506000610d63600f5490565b9050600081610d72848661283e565b610d7c919061283e565b90506000610d8e82610c738a88611b34565b90506000610da083610c738b88611b34565b90506000610db284610c738c88611b34565b604080518c815260208101869052908101849052606081018290529091507f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f9060800160405180910390a1610e0683611bb6565b6000610e12478a61154c565b9050610e1e8a82611d76565b8115610e2d57610e2d82611e7c565b8215610e3c57610e3c83611edc565b60019c505050505050505050505050506001805590565b600260015403610ea55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161070a565b60026001556000546001600160a01b03163314610ed45760405162461bcd60e51b815260040161070a906127b1565b476000610ee96000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b5050905080610f7c5760405162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015260640161070a565b6040518281527f99d7f8b71cfb9126984f7a5eed3a40e64a8959e9b0e442221546fb04ec6a489c9060200160405180910390a1505060018055565b600080546001600160a01b03163314610fe25760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b0382166110085760405162461bcd60e51b815260040161070a906127e6565b6001600160a01b038216600081815260056020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016109ad565b6000546001600160a01b031633146110835760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03811660009081526006602052604090205460ff16156110ec5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161070a565b6001600160a01b03811660009081526002602052604090205415611146576001600160a01b03811660009081526002602052604090205461112c90610852565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556007805491820181559093527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b0319168417905590519182527f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d591015b60405180910390a150565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b0381166112725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161070a565b61127b81611ae4565b50565b6000546001600160a01b031633146112a85760405162461bcd60e51b815260040161070a906127b1565b6001600160a01b03811660009081526006602052604090205460ff166113105760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161070a565b60005b60075481101561143157816001600160a01b03166007828154811061133a5761133a612856565b6000918252602090912001546001600160a01b03160361141f57600780546113649060019061286c565b8154811061137457611374612856565b600091825260209091200154600780546001600160a01b0390921691839081106113a0576113a0612856565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff1916905560078054806113f8576113f8612883565b600082815260209020810160001990810180546001600160a01b0319169055019055611431565b8061142981612899565b915050611313565b506040516001600160a01b03821681527f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c906020016111d8565b60006108cf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f1f565b6000806114db6040518060800160405280600081526020016000815260200160008152602001600081525090565b60006115086040518060800160405280600081526020016000815260200160008152602001600081525090565b60008061151488611f4d565b915091506000611522611ac1565b905060008060006115348c8686612047565b919e909d50909b509599509397509395505050505050565b60006108cf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b60008061159b838561283e565b9050838110156108cf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161070a565b6001600160a01b03831661164f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161070a565b6001600160a01b0382166116b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161070a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161070a565b6001600160a01b0382166117d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161070a565b600081116118395760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161070a565b600c54600d54600e54600f546000546001600160a01b038881169116146118ca57600b5461186687610b33565b611870908761283e565b11156118ca5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220616d6f756e742065786365656473207768616c654c696d60448201526234ba1760e91b606482015260840161070a565b6001600160a01b03871660009081526005602052604090205460ff168061190957506001600160a01b03861660009081526005602052604090205460ff165b15611923576000600c819055600d819055600e819055600f555b6001600160a01b03871660009081526006602052604090205460ff16801561196457506001600160a01b03861660009081526006602052604090205460ff16155b1561197957611974878787612130565b611a25565b6001600160a01b03871660009081526006602052604090205460ff161580156119ba57506001600160a01b03861660009081526006602052604090205460ff165b156119ca57611974878787612283565b6001600160a01b03871660009081526006602052604090205460ff168015611a0a57506001600160a01b03861660009081526006602052604090205460ff165b15611a1a57611974878787612329565b611a25878787612399565b6001600160a01b03871660009081526005602052604090205460ff1680611a6457506001600160a01b03861660009081526005602052604090205460ff165b15611a7e57600c849055600d839055600e829055600f8190555b50505050505050565b60008184841115611aab5760405162461bcd60e51b815260040161070a9190612628565b506000611ab8848661286c565b95945050505050565b6000806000611ace6123da565b9092509050611add828261146b565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082600003611b4657506000610797565b6000611b5283856128b2565b905082611b5f85836128d1565b146108cf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161070a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611beb57611beb612856565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8d91906128f3565b81600181518110611ca057611ca0612856565b60200260200101906001600160a01b031690816001600160a01b031681525050611ceb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115ed565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611d40908590600090869030904290600401612910565b600060405180830381600087803b158015611d5a57600080fd5b505af1158015611d6e573d6000803e3d6000fd5b505050505050565b611da1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115ed565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080611de86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612981565b5050505050565b600854611e949030906001600160a01b031683611711565b6008546040518281526001600160a01b039091169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b611ee93061dead83611711565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ed1565b60008183611f405760405162461bcd60e51b815260040161070a9190612628565b506000611ab884866128d1565b6000611f7a6040518060800160405280600081526020016000815260200160008152602001600081525090565b611fa56040518060800160405280600081526020016000815260200160008152602001600081525090565b611fbf6064610c73600c5487611b3490919063ffffffff16565b8152600d54611fd690606490610c73908790611b34565b6020820152600e54611ff090606490610c73908790611b34565b6040820152600f5461200a90606490610c73908790611b34565b6060820181905260408201516020830151835160009361203c9390926120369283919082908c9061154c565b9061154c565b959194509092505050565b6000806120756040518060800160405280600081526020016000815260200160008152602001600081525090565b6120a06040518060800160405280600081526020016000815260200160008152602001600081525090565b60006120ac8887611b34565b87519091506120bb9087611b34565b825260208701516120cc9087611b34565b602083015260408701516120e09087611b34565b604083015260608701516120f49087611b34565b60608301819052604083015160208401518451600093612120939092612036928391908290899061154c565b9199919850919650945050505050565b6000806000806000612141866114ad565b6001600160a01b038d1660009081526003602052604090205494995092975090955093509150612171908761154c565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546121a0908661154c565b6001600160a01b03808a1660009081526002602052604080822093909355908916815220546121cf908561158e565b6001600160a01b038816600090815260026020526040902055825181516121f6919061257e565b612208836020015182602001516125a2565b61221a836040015182604001516125a2565b61222c836060015182606001516125a2565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227191815260200190565b60405180910390a35050505050505050565b6000806000806000612294866114ad565b6001600160a01b038d16600090815260026020526040902054949950929750909550935091506122c4908661154c565b6001600160a01b03808a16600090815260026020908152604080832094909455918a168152600390915220546122fa908361158e565b6001600160a01b0388166000908152600360209081526040808320939093556002905220546121cf908561158e565b600080600080600061233a866114ad565b6001600160a01b038d166000908152600360205260409020549499509297509095509350915061236a908761154c565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546122c4908661154c565b60008060008060006123aa866114ad565b6001600160a01b038d16600090815260026020526040902054949950929750909550935091506121a0908661154c565b60095460009081906aa56fa5b99019a5c8000000825b60075481101561253d5782600260006007848154811061241257612412612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061247d575081600360006007848154811061245657612456612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561249b575050600954936aa56fa5b99019a5c80000009350915050565b6124e160026000600784815481106124b5576124b5612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061154c565b925061252960036000600784815481106124fd576124fd612856565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061154c565b91508061253581612899565b9150506123f0565b50600954612556906aa56fa5b99019a5c800000061146b565b821015612575575050600954926aa56fa5b99019a5c800000092509050565b90939092509050565b60095461258b908361154c565b600955600a5461259b908261158e565b600a555050565b306000908152600260205260409020546125bc908361158e565b3060009081526002602090815260408083209390935560069052205460ff161561260b57306000908152600360205260409020546125fa908261158e565b306000908152600360205260409020555b5050565b60006020828403121561262157600080fd5b5035919050565b600060208083528351808285015260005b8181101561265557858101830151858201604001528201612639565b81811115612667576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461127b57600080fd5b600080604083850312156126a557600080fd5b82356126b08161267d565b946020939093013593505050565b6000602082840312156126d057600080fd5b81356108cf8161267d565b6000806000606084860312156126f057600080fd5b83356126fb8161267d565b9250602084013561270b8161267d565b929592945050506040919091013590565b6000806040838503121561272f57600080fd5b823591506020830135801515811461274657600080fd5b809150509250929050565b6000806000806080858703121561276757600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561279657600080fd5b82356127a18161267d565b915060208301356127468161267d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f45524332303a206163636f756e7420697320746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561285157612851612828565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561287e5761287e612828565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016128ab576128ab612828565b5060010190565b60008160001904831182151516156128cc576128cc612828565b500290565b6000826128ee57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561290557600080fd5b81516108cf8161267d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129605784516001600160a01b03168352938301939183019160010161293b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561299657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ccef9e3ae82ca62a1a97f976f2af001ffe06be5f970dbed0622a2ecd9b3dbe7a64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000de359c8dfc3ba7785d4df81b42323673146cc1b9
-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _teamWallet (address): 0xdE359C8dfc3bA7785D4dF81b42323673146Cc1B9
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000de359c8dfc3ba7785d4df81b42323673146cc1b9
Deployed Bytecode Sourcemap
26888:21371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31726:419;;;;;;;;;;-1:-1:-1;31726:419:0;;;;;:::i;:::-;;:::i;:::-;;29133:85;;;;;;;;;;-1:-1:-1;29205:5:0;;;;;;;;;;;;-1:-1:-1;;;29205:5:0;;;;29133:85;;;;;;;:::i;:::-;;;;;;;;30130:195;;;;;;;;;;-1:-1:-1;30130:195:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;30130:195:0;1257:187:1;31629:89:0;;;;;;;;;;-1:-1:-1;31700:10:0;;31629:89;;;1595:25:1;;;1583:2;1568:18;31629:89:0;1449:177:1;47793:106:0;;;;;;;;;;-1:-1:-1;47793:106:0;;;;;:::i;:::-;;:::i;27171:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;27171:51:0;1883:230:1;29416:97:0;;;;;;;;;;-1:-1:-1;27922:18:0;29416:97;;30333:448;;;;;;;;;;-1:-1:-1;30333:448:0;;;;;:::i;:::-;;:::i;32638:322::-;;;;;;;;;;-1:-1:-1;32638:322:0;;;;;:::i;:::-;;:::i;29323:85::-;;;;;;;;;;-1:-1:-1;29323:85:0;;28239:2;2721:36:1;;2709:2;2694:18;29323:85:0;2579:184:1;30789:302:0;;;;;;;;;;-1:-1:-1;30789:302:0;;;;;:::i;:::-;;:::i;44329:268::-;;;;;;;;;;-1:-1:-1;44329:268:0;;;;;:::i;:::-;;:::i;32153:477::-;;;;;;;;;;-1:-1:-1;32153:477:0;;;;;:::i;:::-;;:::i;27792:25::-;;;;;;;;;;-1:-1:-1;27792:25:0;;;;-1:-1:-1;;;;;27792:25:0;;;43384:640;;;;;;;;;;-1:-1:-1;43384:640:0;;;;;:::i;:::-;;:::i;29521:198::-;;;;;;;;;;-1:-1:-1;29521:198:0;;;;;:::i;:::-;;:::i;14093:103::-;;;;;;;;;;;;;:::i;43279:97::-;;;;;;;;;;-1:-1:-1;43354:14:0;;43279:97;;13442:87;;;;;;;;;;-1:-1:-1;13488:7:0;13515:6;-1:-1:-1;;;;;13515:6:0;13442:87;;44133:89;;;;;;;;;;-1:-1:-1;44203:11:0;;44133:89;;29226;;;;;;;;;;-1:-1:-1;29300:7:0;;;;;;;;;;;;-1:-1:-1;;;29300:7:0;;;;29226:89;;44032:93;;;;;;;;;;-1:-1:-1;44104:13:0;;44032:93;;31099:402;;;;;;;;;;-1:-1:-1;31099:402:0;;;;;:::i;:::-;;:::i;46060:349::-;;;;;;;;;;;;;:::i;29727:201::-;;;;;;;;;;-1:-1:-1;29727:201:0;;;;;:::i;:::-;;:::i;44878:1174::-;;;;;;;;;;;;;:::i;31509:112::-;;;;;;;;;;-1:-1:-1;31509:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;31593:20:0;31569:4;31593:20;;;:11;:20;;;;;;;;;31509:112;44230:83;;;;;;;;;;-1:-1:-1;44297:8:0;;44230:83;;47923:296;;;;;;;;;;;;;:::i;29936:186::-;;;;;;;;;;-1:-1:-1;29936:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;30087:18:0;;;30055:7;30087:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29936:186;44605:265;;;;;;;;;;-1:-1:-1;44605:265:0;;;;;:::i;:::-;;:::i;32968:370::-;;;;;;;;;;-1:-1:-1;32968:370:0;;;;;:::i;:::-;;:::i;14351:238::-;;;;;;;;;;-1:-1:-1;14351:238:0;;;;;:::i;:::-;;:::i;33346:511::-;;;;;;;;;;-1:-1:-1;33346:511:0;;;;;:::i;:::-;;:::i;31726:419::-;5046:10;31780:14;31843:19;;;:11;:19;;;;;;;;31842:20;31820:114;;;;-1:-1:-1;;;31820:114:0;;4307:2:1;31820:114:0;;;4289:21:1;4346:2;4326:18;;;4319:30;4385:34;4365:18;;;4358:62;-1:-1:-1;;;4436:18:1;;;4429:42;4488:19;;31820:114:0;;;;;;;;;31946:15;31973:19;31984:7;31973:10;:19::i;:::-;-1:-1:-1;;;;;;;;;32021:15:0;;;;;;:7;:15;;;;;;31945:47;;-1:-1:-1;32021:28:0;;31945:47;32021:19;:28::i;:::-;-1:-1:-1;;;;;32003:15:0;;;;;;:7;:15;;;;;:46;32070:7;;:20;;32082:7;32070:11;:20::i;:::-;32060:7;:30;32114:10;;:23;;32129:7;32114:14;:23::i;:::-;32101:10;:36;-1:-1:-1;;;31726:419:0:o;30130:195::-;30234:4;30256:39;5046:10;30279:7;30288:6;30256:8;:39::i;:::-;-1:-1:-1;30313:4:0;30130:195;;;;;:::o;47793:106::-;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;47867:10:::1;:24:::0;;-1:-1:-1;;;;;;47867:24:0::1;-1:-1:-1::0;;;;;47867:24:0;;;::::1;::::0;;;::::1;::::0;;47793:106::o;30333:448::-;30467:4;30484:36;30494:6;30502:9;30513:6;30484:9;:36::i;:::-;30531:220;30554:6;5046:10;30602:138;30658:6;30602:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30602:19:0;;;;;;:11;:19;;;;;;;;5046:10;30602:33;;;;;;;;;;:37;:138::i;:::-;30531:8;:220::i;:::-;-1:-1:-1;30769:4:0;30333:448;;;;;:::o;32638:322::-;32732:7;32790;;32779;:18;;32757:110;;;;-1:-1:-1;;;32757:110:0;;5081:2:1;32757:110:0;;;5063:21:1;5120:2;5100:18;;;5093:30;5159:34;5139:18;;;5132:62;-1:-1:-1;;;5210:18:1;;;5203:40;5260:19;;32757:110:0;4879:406:1;32757:110:0;32878:19;32900:10;:8;:10::i;:::-;32878:32;-1:-1:-1;32928:24:0;:7;32878:32;32928:11;:24::i;:::-;32921:31;32638:322;-1:-1:-1;;;32638:322:0:o;30789:302::-;5046:10;30906:4;31000:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31000:34:0;;;;;;;;;;30906:4;;30928:133;;30978:7;;31000:50;;31039:10;31000:38;:50::i;44329:268::-;44398:4;13515:6;;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44423:21:0;::::1;44415:68;;;;-1:-1:-1::0;;;44415:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44494:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;44494:34:0::1;44524:4;44494:34;::::0;;44544:23;;2056:51:1;;;44544:23:0::1;::::0;2029:18:1;44544:23:0::1;;;;;;;;-1:-1:-1::0;44585:4:0::1;44329:268:::0;;;:::o;32153:477::-;32273:7;27922:18;32306:7;:18;;32298:62;;;;-1:-1:-1;;;32298:62:0;;5895:2:1;32298:62:0;;;5877:21:1;5934:2;5914:18;;;5907:30;5973:33;5953:18;;;5946:61;6024:18;;32298:62:0;5693:355:1;32298:62:0;32376:17;32371:252;;32411:15;32438:19;32449:7;32438:10;:19::i;:::-;-1:-1:-1;32410:47:0;;-1:-1:-1;32472:14:0;;-1:-1:-1;;;;32472:14:0;32371:252;32522:23;32555:19;32566:7;32555:10;:19::i;:::-;-1:-1:-1;32519:55:0;;-1:-1:-1;32589:22:0;;-1:-1:-1;;;;32589:22:0;43384:640;43580:4;13515:6;;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;43597:16:::1;43616:115;43719:11:::0;43616:84:::1;43688:11:::0;43616:84;:17;43652:16;43616:35:::1;:53::i;:::-;:71:::0;::::1;:84::i;:115::-;43597:134;;43762:2;43750:8;:14;;43742:49;;;::::0;-1:-1:-1;;;43742:49:0;;6255:2:1;43742:49:0::1;::::0;::::1;6237:21:1::0;6294:2;6274:18;;;6267:30;-1:-1:-1;;;6313:18:1;;;6306:52;6375:18;;43742:49:0::1;6053:346:1::0;43742:49:0::1;43802:14;:34:::0;;;43847:13:::1;:32:::0;;;43890:11:::1;:25:::0;;;43926:8:::1;:22:::0;;;43974:20:::1;::::0;1595:25:1;;;43974:20:0::1;::::0;1583:2:1;1568:18;43974:20:0::1;;;;;;;-1:-1:-1::0;44012:4:0::1;::::0;43384:640;-1:-1:-1;;;;;43384:640:0:o;29521:198::-;-1:-1:-1;;;;;29611:20:0;;29587:7;29611:20;;;:11;:20;;;;;;;;29607:49;;;-1:-1:-1;;;;;;29640:16:0;;;;;:7;:16;;;;;;;29521:198::o;29607:49::-;-1:-1:-1;;;;;29694:16:0;;;;;;:7;:16;;;;;;29674:37;;:19;:37::i;14093:103::-;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;14158:30:::1;14185:1;14158:18;:30::i;:::-;14093:103::o:0;31099:402::-;31221:4;31243:228;5046:10;31293:7;31315:145;31372:15;31315:145;;;;;;;;;;;;;;;;;5046:10;31315:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31315:34:0;;;;;;;;;;;;:38;:145::i;46060:349::-;46113:7;46133:25;46161:24;46179:4;46161:9;:24::i;:::-;46133:52;;46196:10;46209:14;44104:13;;;44032:93;46209:14;46196:27;;46234:10;46247:12;44203:11;;;44133:89;46247:12;46234:25;;46270:10;46283:9;44297:8;;;44230:83;46283:9;46270:22;-1:-1:-1;46305:19:0;46270:22;46327:7;46332:2;46327;:7;:::i;:::-;:12;;;;:::i;:::-;46305:34;-1:-1:-1;46359:42:0;46305:34;46359:25;:17;46381:2;46359:21;:25::i;:::-;:29;;:42::i;:::-;46352:49;;;;;;;46060:349;:::o;29727:201::-;29834:4;29856:42;5046:10;29880:9;29891:6;29856:9;:42::i;44878:1174::-;44945:4;16598:1;17196:7;;:19;17188:63;;;;-1:-1:-1;;;17188:63:0;;6871:2:1;17188:63:0;;;6853:21:1;6910:2;6890:18;;;6883:30;6949:33;6929:18;;;6922:61;7000:18;;17188:63:0;6669:355:1;17188:63:0;16598:1;17329:7;:18;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23:::1;13654:68;;;;-1:-1:-1::0;;;13654:68:0::1;;;;;;;:::i;:::-;44962:25:::2;44990:24;45008:4;44990:9;:24::i;:::-;44962:52:::0;-1:-1:-1;45025:12:0::2;45040:24;44962:52:::0;45062:1:::2;45040:21;:24::i;:::-;45025:39:::0;-1:-1:-1;45075:17:0::2;45095:27;:17:::0;45025:39;45095:21:::2;:27::i;:::-;45075:47:::0;-1:-1:-1;45158:21:0::2;45133:22;45203:14;44104:13:::0;;;44032:93;45203:14:::2;45190:27;;45228:10;45241:12;44203:11:::0;;;44133:89;45241:12:::2;45228:25;;45264:10;45277:9;44297:8:::0;;;44230:83;45277:9:::2;45264:22:::0;-1:-1:-1;45308:19:0::2;45264:22:::0;45330:7:::2;45335:2:::0;45330;:7:::2;:::i;:::-;:12;;;;:::i;:::-;45308:34:::0;-1:-1:-1;45355:23:0::2;45381:29;45308:34:::0;45381:12:::2;:4:::0;45390:2;45381:8:::2;:12::i;:29::-;45355:55:::0;-1:-1:-1;45421:18:0::2;45442:29;45459:11:::0;45442:12:::2;:4:::0;45451:2;45442:8:::2;:12::i;:29::-;45421:50:::0;-1:-1:-1;45482:18:0::2;45503:29;45520:11:::0;45503:12:::2;:4:::0;45512:2;45503:8:::2;:12::i;:29::-;45557:138;::::0;;7260:25:1;;;7316:2;7301:18;;7294:34;;;7344:18;;;7337:34;;;7402:2;7387:18;;7380:34;;;45482:50:0;;-1:-1:-1;45557:138:0::2;::::0;7247:3:1;7232:19;45557:138:0::2;;;;;;;45706:33;45723:15;45706:16;:33::i;:::-;45752:18;45773:41;:21;45799:14:::0;45773:25:::2;:41::i;:::-;45752:62;;45827:35;45840:9;45851:10;45827:12;:35::i;:::-;45879:14:::0;;45875:68:::2;;45910:21;45920:10;45910:9;:21::i;:::-;45959:14:::0;;45955:64:::2;;45990:17;45996:10;45990:5;:17::i;:::-;46040:4;46033:11;;;;;;;;;;;;;;16554:1:::0;17508:22;;44878:1174;:::o;47923:296::-;16598:1;17196:7;;:19;17188:63;;;;-1:-1:-1;;;17188:63:0;;6871:2:1;17188:63:0;;;6853:21:1;6910:2;6890:18;;;6883:30;6949:33;6929:18;;;6922:61;7000:18;;17188:63:0;6669:355:1;17188:63:0;16598:1;17329:7;:18;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23:::1;13654:68;;;;-1:-1:-1::0;;;13654:68:0::1;;;;;;;:::i;:::-;48016:21:::2;47995:18;48075:7;13488::::0;13515:6;-1:-1:-1;;;;;13515:6:0;;13442:87;48075:7:::2;-1:-1:-1::0;;;;;48067:21:0::2;48096:10;48067:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48048:63;;;48130:7;48122:36;;;::::0;-1:-1:-1;;;48122:36:0;;7837:2:1;48122:36:0::2;::::0;::::2;7819:21:1::0;7876:2;7856:18;;;7849:30;-1:-1:-1;;;7895:18:1;;;7888:46;7951:18;;48122:36:0::2;7635:340:1::0;48122:36:0::2;48176:29;::::0;1595:25:1;;;48176:29:0::2;::::0;1583:2:1;1568:18;48176:29:0::2;;;;;;;-1:-1:-1::0;;16554:1:0;17508:22;;47923:296::o;44605:265::-;44672:4;13515:6;;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44697:21:0;::::1;44689:68;;;;-1:-1:-1::0;;;44689:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44768:27:0;::::1;44798:5;44768:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;44768:35:0::1;::::0;;44819:21;;2056:51:1;;;44819:21:0::1;::::0;2029:18:1;44819:21:0::1;1883:230:1::0;32968:370:0;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33048:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33047:21;33039:61;;;::::0;-1:-1:-1;;;33039:61:0;;8182:2:1;33039:61:0::1;::::0;::::1;8164:21:1::0;8221:2;8201:18;;;8194:30;8260:29;8240:18;;;8233:57;8307:18;;33039:61:0::1;7980:351:1::0;33039:61:0::1;-1:-1:-1::0;;;;;33115:16:0;::::1;33134:1;33115:16:::0;;;:7:::1;:16;::::0;;;;;:20;33111:109:::1;;-1:-1:-1::0;;;;;33191:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33171:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33152:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;33111:109:::1;-1:-1:-1::0;;;;;33230:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;33230:27:0::1;33253:4;33230:27:::0;;::::1;::::0;;;33268:9:::1;:23:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33268:23:0::1;::::0;::::1;::::0;;33307;;2056:51:1;;;33307:23:0::1;::::0;2029:18:1;33307:23:0::1;;;;;;;;32968:370:::0;:::o;14351:238::-;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14454:22:0;::::1;14432:110;;;::::0;-1:-1:-1;;;14432:110:0;;8538:2:1;14432:110:0::1;::::0;::::1;8520:21:1::0;8577:2;8557:18;;;8550:30;8616:34;8596:18;;;8589:62;-1:-1:-1;;;8667:18:1;;;8660:36;8713:19;;14432:110:0::1;8336:402:1::0;14432:110:0::1;14553:28;14572:8;14553:18;:28::i;:::-;14351:238:::0;:::o;33346:511::-;13488:7;13515:6;-1:-1:-1;;;;;13515:6:0;5046:10;13662:23;13654:68;;;;-1:-1:-1;;;13654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33425:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33417:56;;;::::0;-1:-1:-1;;;33417:56:0;;8945:2:1;33417:56:0::1;::::0;::::1;8927:21:1::0;8984:2;8964:18;;;8957:30;9023:25;9003:18;;;8996:53;9066:18;;33417:56:0::1;8743:347:1::0;33417:56:0::1;33489:9;33484:327;33508:9;:16:::0;33504:20;::::1;33484:327;;;33566:7;-1:-1:-1::0;;;;;33550:23:0::1;:9;33560:1;33550:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33550:12:0::1;:23:::0;33546:254:::1;;33609:9;33619:16:::0;;:20:::1;::::0;33638:1:::1;::::0;33619:20:::1;:::i;:::-;33609:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;33594:9:::1;:12:::0;;-1:-1:-1;;;;;33609:31:0;;::::1;::::0;33604:1;;33594:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33594:46:0::1;-1:-1:-1::0;;;;;33594:46:0;;::::1;;::::0;;33659:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33698:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33698:28:0::1;::::0;;33745:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33745:15:0;;;;;-1:-1:-1;;;;;;33745:15:0::1;::::0;;;;;33779:5:::1;;33546:254;33526:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33484:327;;;-1:-1:-1::0;33826:23:0::1;::::0;-1:-1:-1;;;;;2074:32:1;;2056:51;;33826:23:0::1;::::0;2044:2:1;2029:18;33826:23:0::1;1883:230:1::0;2706:132:0;2764:7;2791:39;2795:1;2798;2791:39;;;;;;;;;;;;;;;;;:3;:39::i;40397:589::-;40497:7;40519;40541:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40541:11:0;40567:7;40589:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40589:11:0;40629:23;40654:17;40675:20;40687:7;40675:11;:20::i;:::-;40628:67;;;;40706:19;40728:10;:8;:10::i;:::-;40706:32;;40764:15;40794:23;40832:17;40863:40;40875:7;40884:5;40891:11;40863;:40::i;:::-;40749:154;;;;-1:-1:-1;40749:154:0;;-1:-1:-1;40955:15:0;;-1:-1:-1;40972:5:0;;-1:-1:-1;40397:589:0;;-1:-1:-1;;;;;;40397:589:0:o;835:136::-;893:7;920:43;924:1;927;920:43;;;;;;;;;;;;;;;;;:3;:43::i;371:181::-;429:7;;461:5;465:1;461;:5;:::i;:::-;449:17;;490:1;485;:6;;477:46;;;;-1:-1:-1;;;477:46:0;;9831:2:1;477:46:0;;;9813:21:1;9870:2;9850:18;;;9843:30;9909:29;9889:18;;;9882:57;9956:18;;477:46:0;9629:351:1;33865:371:0;-1:-1:-1;;;;;33992:19:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;10187:2:1;33984:68:0;;;10169:21:1;10226:2;10206:18;;;10199:30;10265:34;10245:18;;;10238:62;-1:-1:-1;;;10316:18:1;;;10309:34;10360:19;;33984:68:0;9985:400:1;33984:68:0;-1:-1:-1;;;;;34071:21:0;;34063:68;;;;-1:-1:-1;;;34063:68:0;;10592:2:1;34063:68:0;;;10574:21:1;10631:2;10611:18;;;10604:30;10670:34;10650:18;;;10643:62;-1:-1:-1;;;10721:18:1;;;10714:32;10763:19;;34063:68:0;10390:398:1;34063:68:0;-1:-1:-1;;;;;34144:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34196:32;;1595:25:1;;;34196:32:0;;1568:18:1;34196:32:0;;;;;;;33865:371;;;:::o;34244:1773::-;-1:-1:-1;;;;;34375:20:0;;34367:70;;;;-1:-1:-1;;;34367:70:0;;10995:2:1;34367:70:0;;;10977:21:1;11034:2;11014:18;;;11007:30;11073:34;11053:18;;;11046:62;-1:-1:-1;;;11124:18:1;;;11117:35;11169:19;;34367:70:0;10793:401:1;34367:70:0;-1:-1:-1;;;;;34456:23:0;;34448:71;;;;-1:-1:-1;;;34448:71:0;;11401:2:1;34448:71:0;;;11383:21:1;11440:2;11420:18;;;11413:30;11479:34;11459:18;;;11452:62;-1:-1:-1;;;11530:18:1;;;11523:33;11573:19;;34448:71:0;11199:399:1;34448:71:0;34547:1;34538:6;:10;34530:64;;;;-1:-1:-1;;;34530:64:0;;11805:2:1;34530:64:0;;;11787:21:1;11844:2;11824:18;;;11817:30;11883:34;11863:18;;;11856:62;-1:-1:-1;;;11934:18:1;;;11927:39;11983:19;;34530:64:0;11603:405:1;34530:64:0;34636:14;;34691:13;;34740:11;;34787:8;;13488:7;13515:6;-1:-1:-1;;;;;34822:17:0;;;13515:6;;34822:17;34818:190;;34915:10;;34891:20;34901:9;34891;:20::i;:::-;34882:29;;:6;:29;:::i;:::-;:43;;34856:140;;;;-1:-1:-1;;;34856:140:0;;12215:2:1;34856:140:0;;;12197:21:1;12254:2;12234:18;;;12227:30;12293:34;12273:18;;;12266:62;-1:-1:-1;;;12344:18:1;;;12337:33;12387:19;;34856:140:0;12013:399:1;34856:140:0;-1:-1:-1;;;;;35034:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;35064:29:0;;;;;;:18;:29;;;;;;;;35034:59;35030:213;;;35127:1;35110:14;:18;;;35143:13;:17;;;35175:11;:15;;;35205:8;:12;35030:213;-1:-1:-1;;;;;35259:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35283:22:0;;;;;;:11;:22;;;;;;;;35282:23;35259:46;35255:467;;;35322:48;35344:6;35352:9;35363:6;35322:21;:48::i;:::-;35255:467;;;-1:-1:-1;;;;;35393:19:0;;;;;;:11;:19;;;;;;;;35392:20;:46;;;;-1:-1:-1;;;;;;35416:22:0;;;;;;:11;:22;;;;;;;;35392:46;35388:334;;;35455:46;35475:6;35483:9;35494:6;35455:19;:46::i;35388:334::-;-1:-1:-1;;;;;35523:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35546:22:0;;;;;;:11;:22;;;;;;;;35523:45;35519:203;;;35585:48;35607:6;35615:9;35626:6;35585:21;:48::i;35519:203::-;35666:44;35684:6;35692:9;35703:6;35666:17;:44::i;:::-;-1:-1:-1;;;;;35738:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;35768:29:0;;;;;;:18;:29;;;;;;;;35738:59;35734:276;;;35814:14;:37;;;35866:13;:35;;;35916:11;:28;;;35959:8;:25;;;35734:276;34356:1661;;;;34244:1773;;;:::o;1274:226::-;1394:7;1430:12;1422:6;;;;1414:29;;;;-1:-1:-1;;;1414:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1454:9:0;1466:5;1470:1;1466;:5;:::i;:::-;1454:17;1274:226;-1:-1:-1;;;;;1274:226:0:o;42494:164::-;42536:7;42557:15;42574;42593:19;:17;:19::i;:::-;42556:56;;-1:-1:-1;42556:56:0;-1:-1:-1;42630:20:0;42556:56;;42630:11;:20::i;:::-;42623:27;;;;42494:164;:::o;14749:191::-;14823:16;14842:6;;-1:-1:-1;;;;;14859:17:0;;;-1:-1:-1;;;;;;14859:17:0;;;;;;14892:40;;14842:6;;;;;;;14892:40;;14823:16;14892:40;14812:128;14749:191;:::o;1759:471::-;1817:7;2062:1;2067;2062:6;2058:47;;-1:-1:-1;2092:1:0;2085:8;;2058:47;2117:9;2129:5;2133:1;2129;:5;:::i;:::-;2117:17;-1:-1:-1;2162:1:0;2153:5;2157:1;2117:17;2153:5;:::i;:::-;:10;2145:56;;;;-1:-1:-1;;;2145:56:0;;13014:2:1;2145:56:0;;;12996:21:1;13053:2;13033:18;;;13026:30;13092:34;13072:18;;;13065:62;-1:-1:-1;;;13143:18:1;;;13136:31;13184:19;;2145:56:0;12812:397:1;46417:471:0;46507:16;;;46521:1;46507:16;;;;;;;;46483:21;;46507:16;;;;;;;;;;-1:-1:-1;46507:16:0;46483:40;;46552:4;46534;46539:1;46534:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;46534:23:0;;;-1:-1:-1;;;;;46534:23:0;;;;;46578:15;-1:-1:-1;;;;;46578:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46568:4;46573:1;46568:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;46568:32:0;;;-1:-1:-1;;;;;46568:32:0;;;;;46611:62;46628:4;46643:15;46661:11;46611:8;:62::i;:::-;46684:196;;-1:-1:-1;;;46684:196:0;;-1:-1:-1;;;;;46684:15:0;:66;;;;:196;;46765:11;;46791:1;;46807:4;;46834;;46854:15;;46684:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46472:416;46417:471;:::o;46896:513::-;47044:62;47061:4;47076:15;47094:11;47044:8;:62::i;:::-;47149:15;-1:-1:-1;;;;;47149:31:0;;47188:9;47221:4;47241:11;47267:1;47310;47353:7;13488;13515:6;-1:-1:-1;;;;;13515:6:0;;13442:87;47353:7;47149:252;;;;;;-1:-1:-1;;;;;;47149:252:0;;;-1:-1:-1;;;;;14946:15:1;;;47149:252:0;;;14928:34:1;14978:18;;;14971:34;;;;15021:18;;;15014:34;;;;15064:18;;;15057:34;15128:15;;;15107:19;;;15100:44;47375:15:0;15160:19:1;;;15153:35;14862:19;;47149:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46896:513;;:::o;47599:178::-;47683:10;;47658:48;;47676:4;;-1:-1:-1;;;;;47683:10:0;47695;47658:9;:48::i;:::-;47746:10;;47722:47;;1595:25:1;;;-1:-1:-1;;;;;47746:10:0;;;;47739:4;;47722:47;;1583:2:1;1568:18;47722:47:0;;;;;;;;47599:178;:::o;47417:174::-;47472:48;47490:4;27743:42;47509:10;47472:9;:48::i;:::-;47536:47;;1595:25:1;;;27743:42:0;;47553:4;;47536:47;;1583:2:1;1568:18;47536:47:0;1449:177:1;3334:312:0;3454:7;3489:12;3482:5;3474:28;;;;-1:-1:-1;;;3474:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3513:9:0;3525:5;3529:1;3525;:5;:::i;40994:645::-;41081:7;41090:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41090:11:0;41119:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41119:17:0;41166:36;41198:3;41166:27;41178:14;;41166:7;:11;;:27;;;;:::i;:36::-;41147:55;;41246:13;;41234:35;;41265:3;;41234:26;;:7;;:11;:26::i;:35::-;41213:18;;;:56;41308:11;;41296:33;;41325:3;;41296:24;;:7;;:11;:24::i;:33::-;41280:13;;;:49;41368:8;;41356:30;;41382:3;;41356:21;;:7;;:11;:21::i;:30::-;41340:13;;;:46;;;41529:13;;;;41491:18;;;;41455:16;;41403:23;;41429:147;;41340:46;;41429:114;;;;41491:18;41429:114;;:7;;:25;:43::i;:::-;:61;;:81::i;:147::-;41403:173;41625:5;;-1:-1:-1;40994:645:0;;-1:-1:-1;;;40994:645:0:o;41647:839::-;41822:7;41844;41866:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41866:11:0;41905:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41905:17:0;41933:15;41951:24;:7;41963:11;41951;:24::i;:::-;42005:16;;41933:42;;-1:-1:-1;42005:33:0;;42026:11;42005:20;:33::i;:::-;41986:52;;42070:18;;;;:35;;42093:11;42070:22;:35::i;:::-;42049:18;;;:56;42132:13;;;;:30;;42150:11;42132:17;:30::i;:::-;42116:13;;;:46;42189:13;;;;:30;;42207:11;42189:17;:30::i;:::-;42173:13;;;:46;;;42366:13;;;;42328:18;;;;42292:16;;42240:23;;42266:147;;42173:46;;42266:114;;;;42328:18;42266:114;;:7;;:25;:43::i;:147::-;42446:7;;;;-1:-1:-1;42472:5:0;;-1:-1:-1;41647:839:0;-1:-1:-1;;;;;41647:839:0:o;37636:822::-;37787:15;37817:23;37855:17;37887:23;37925:17;37956:19;37967:7;37956:10;:19::i;:::-;-1:-1:-1;;;;;38014:15:0;;;;;;:7;:15;;;;;;37772:203;;-1:-1:-1;37772:203:0;;-1:-1:-1;37772:203:0;;-1:-1:-1;37772:203:0;-1:-1:-1;37772:203:0;-1:-1:-1;38014:28:0;;38034:7;38014:19;:28::i;:::-;-1:-1:-1;;;;;37996:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38071:7;:15;;;;:28;;38091:7;38071:19;:28::i;:::-;-1:-1:-1;;;;;38053:15:0;;;;;;;:7;:15;;;;;;:46;;;;38131:18;;;;;;;:39;;38154:15;38131:22;:39::i;:::-;-1:-1:-1;;;;;38110:18:0;;;;;;:7;:18;;;;;:60;38193:16;;38211;;38181:47;;38193:16;38181:11;:47::i;:::-;38239:53;38253:5;:18;;;38273:5;:18;;;38239:13;:53::i;:::-;38303:38;38312:5;:13;;;38327:5;:13;;;38303:8;:38::i;:::-;38352;38361:5;:13;;;38376:5;:13;;;38352:8;:38::i;:::-;38423:9;-1:-1:-1;;;;;38406:44:0;38415:6;-1:-1:-1;;;;;38406:44:0;;38434:15;38406:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;38406:44:0;;;;;;;;37761:697;;;;;37636:822;;;:::o;36794:834::-;36943:15;36973:23;37011:17;37043:23;37081:17;37112:19;37123:7;37112:10;:19::i;:::-;-1:-1:-1;;;;;37170:15:0;;;;;;:7;:15;;;;;;36928:203;;-1:-1:-1;36928:203:0;;-1:-1:-1;36928:203:0;;-1:-1:-1;36928:203:0;-1:-1:-1;36928:203:0;-1:-1:-1;37170:28:0;;36928:203;37170:19;:28::i;:::-;-1:-1:-1;;;;;37152:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37230:18;;;;;:7;:18;;;;;:39;;37253:15;37230:22;:39::i;:::-;-1:-1:-1;;;;;37209:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37301:7;:18;;;;:39;;37324:15;37301:22;:39::i;38466:893::-;38617:15;38647:23;38685:17;38717:23;38755:17;38786:19;38797:7;38786:10;:19::i;:::-;-1:-1:-1;;;;;38844:15:0;;;;;;:7;:15;;;;;;38602:203;;-1:-1:-1;38602:203:0;;-1:-1:-1;38602:203:0;;-1:-1:-1;38602:203:0;-1:-1:-1;38602:203:0;-1:-1:-1;38844:28:0;;38864:7;38844:19;:28::i;:::-;-1:-1:-1;;;;;38826:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38901:7;:15;;;;:28;;38921:7;38901:19;:28::i;36025:761::-;36172:15;36202:23;36240:17;36272:23;36310:17;36341:19;36352:7;36341:10;:19::i;:::-;-1:-1:-1;;;;;36399:15:0;;;;;;:7;:15;;;;;;36157:203;;-1:-1:-1;36157:203:0;;-1:-1:-1;36157:203:0;;-1:-1:-1;36157:203:0;-1:-1:-1;36157:203:0;-1:-1:-1;36399:28:0;;36157:203;36399:19;:28::i;42666:605::-;42764:7;;42717;;;;27922:18;42717:7;42818:338;42842:9;:16;42838:20;;42818:338;;;42926:7;42902;:21;42910:9;42920:1;42910:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42910:12:0;42902:21;;;;;;;;;;;;;:31;;:83;;;42978:7;42954;:21;42962:9;42972:1;42962:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42962:12:0;42954:21;;;;;;;;;;;;;:31;42902:83;42880:146;;;-1:-1:-1;;43009:7:0;;;27922:18;;-1:-1:-1;42666:605:0;-1:-1:-1;;42666:605:0:o;42880:146::-;43051:34;43063:7;:21;43071:9;43081:1;43071:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43071:12:0;43063:21;;;;;;;;;;;;;43051:7;;:11;:34::i;:::-;43041:44;;43110:34;43122:7;:21;43130:9;43140:1;43130:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43130:12:0;43122:21;;;;;;;;;;;;;43110:7;;:11;:34::i;:::-;43100:44;-1:-1:-1;42860:3:0;;;;:::i;:::-;;;;42818:338;;;-1:-1:-1;43180:7:0;;:20;;27922:18;43180:11;:20::i;:::-;43170:7;:30;43166:61;;;-1:-1:-1;;43210:7:0;;;27922:18;;-1:-1:-1;42666:605:0;-1:-1:-1;42666:605:0:o;43166:61::-;43246:7;;43255;;-1:-1:-1;42666:605:0;-1:-1:-1;42666:605:0:o;39367:175::-;39459:7;;:24;;39471:11;39459;:24::i;:::-;39449:7;:34;39507:10;;:27;;39522:11;39507:14;:27::i;:::-;39494:10;:40;-1:-1:-1;;39367:175:0:o;39550:298::-;39693:4;39677:22;;;;:7;:22;;;;;;:41;;39704:13;39677:26;:41::i;:::-;39668:4;39652:22;;;;:7;:22;;;;;;;;:66;;;;39733:11;:26;;;;;;39729:111;;;39815:4;39799:22;;;;:7;:22;;;;;;:41;;39826:13;39799:26;:41::i;:::-;39790:4;39774:22;;;;:7;:22;;;;;:66;39729:111;39550:298;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2768:341::-;2833:6;2841;2894:2;2882:9;2873:7;2869:23;2865:32;2862:52;;;2910:1;2907;2900:12;2862:52;2946:9;2933:23;2923:33;;3006:2;2995:9;2991:18;2978:32;3053:5;3046:13;3039:21;3032:5;3029:32;3019:60;;3075:1;3072;3065:12;3019:60;3098:5;3088:15;;;2768:341;;;;;:::o;3322:385::-;3408:6;3416;3424;3432;3485:3;3473:9;3464:7;3460:23;3456:33;3453:53;;;3502:1;3499;3492:12;3453:53;-1:-1:-1;;3525:23:1;;;3595:2;3580:18;;3567:32;;-1:-1:-1;3646:2:1;3631:18;;3618:32;;3697:2;3682:18;3669:32;;-1:-1:-1;3322:385:1;-1:-1:-1;3322:385:1:o;3712:388::-;3780:6;3788;3841:2;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3896:9;3883:23;3915:31;3940:5;3915:31;:::i;:::-;3965:5;-1:-1:-1;4022:2:1;4007:18;;3994:32;4035:33;3994:32;4035:33;:::i;4518:356::-;4720:2;4702:21;;;4739:18;;;4732:30;4798:34;4793:2;4778:18;;4771:62;4865:2;4850:18;;4518:356::o;5290:398::-;5492:2;5474:21;;;5531:2;5511:18;;;5504:30;5570:34;5565:2;5550:18;;5543:62;-1:-1:-1;;;5636:2:1;5621:18;;5614:32;5678:3;5663:19;;5290:398::o;6404:127::-;6465:10;6460:3;6456:20;6453:1;6446:31;6496:4;6493:1;6486:15;6520:4;6517:1;6510:15;6536:128;6576:3;6607:1;6603:6;6600:1;6597:13;6594:39;;;6613:18;;:::i;:::-;-1:-1:-1;6649:9:1;;6536:128::o;9095:127::-;9156:10;9151:3;9147:20;9144:1;9137:31;9187:4;9184:1;9177:15;9211:4;9208:1;9201:15;9227:125;9267:4;9295:1;9292;9289:8;9286:34;;;9300:18;;:::i;:::-;-1:-1:-1;9337:9:1;;9227:125::o;9357:127::-;9418:10;9413:3;9409:20;9406:1;9399:31;9449:4;9446:1;9439:15;9473:4;9470:1;9463:15;9489:135;9528:3;9549:17;;;9546:43;;9569:18;;:::i;:::-;-1:-1:-1;9616:1:1;9605:13;;9489:135::o;12417:168::-;12457:7;12523:1;12519;12515:6;12511:14;12508:1;12505:21;12500:1;12493:9;12486:17;12482:45;12479:71;;;12530:18;;:::i;:::-;-1:-1:-1;12570:9:1;;12417:168::o;12590:217::-;12630:1;12656;12646:132;;12700:10;12695:3;12691:20;12688:1;12681:31;12735:4;12732:1;12725:15;12763:4;12760:1;12753:15;12646:132;-1:-1:-1;12792:9:1;;12590:217::o;13346:251::-;13416:6;13469:2;13457:9;13448:7;13444:23;13440:32;13437:52;;;13485:1;13482;13475:12;13437:52;13517:9;13511:16;13536:31;13561:5;13536:31;:::i;13602:980::-;13864:4;13912:3;13901:9;13897:19;13943:6;13932:9;13925:25;13969:2;14007:6;14002:2;13991:9;13987:18;13980:34;14050:3;14045:2;14034:9;14030:18;14023:31;14074:6;14109;14103:13;14140:6;14132;14125:22;14178:3;14167:9;14163:19;14156:26;;14217:2;14209:6;14205:15;14191:29;;14238:1;14248:195;14262:6;14259:1;14256:13;14248:195;;;14327:13;;-1:-1:-1;;;;;14323:39:1;14311:52;;14418:15;;;;14383:12;;;;14359:1;14277:9;14248:195;;;-1:-1:-1;;;;;;;14499:32:1;;;;14494:2;14479:18;;14472:60;-1:-1:-1;;;14563:3:1;14548:19;14541:35;14460:3;13602:980;-1:-1:-1;;;13602:980:1:o;15199:306::-;15287:6;15295;15303;15356:2;15344:9;15335:7;15331:23;15327:32;15324:52;;;15372:1;15369;15362:12;15324:52;15401:9;15395:16;15385:26;;15451:2;15440:9;15436:18;15430:25;15420:35;;15495:2;15484:9;15480:18;15474:25;15464:35;;15199:306;;;;;:::o
Swarm Source
ipfs://ccef9e3ae82ca62a1a97f976f2af001ffe06be5f970dbed0622a2ecd9b3dbe7a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.