ERC-20
Overview
Max Total Supply
10,000,000,000,000 ONI
Holders
158
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
758,977,987,417.136414690225679583 ONIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ONI
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.16; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } 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; } } 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); } } } } abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address adr) public onlyOwner { authorizations[adr] = true; } /** * Remove address' authorization. Owner only */ function unauthorize(address adr) public onlyOwner { authorizations[adr] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address' authorization status */ function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } /** * Transfer ownership to new address. Caller must be owner. */ function transferOwnership(address payable adr) public onlyOwner { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } 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; } 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; } // Contract implementation contract ONI is Auth, IERC20 { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) public _mappedAddresses; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Oni Inu"; string private _symbol = "ONI"; uint8 private _decimals = 18; uint256 public _liquidityFee = 2; uint256 private _taxFee = 2; uint256 private _MarketingFee = 15; uint256 private _previousTaxFee = _taxFee; uint256 private _previousMarketingFee = _MarketingFee; address payable public _MarketingWalletAddress; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwap = false; bool public swapEnabled = true; uint256 private _maxTxAmount = 100000000000e18; // We will set a minimum amount of tokens to be swaped => 5M uint256 private _swapAmount = 5 * 10**3 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor(address payable MarketingWalletAddress) Auth(msg.sender) { _MarketingWalletAddress = MarketingWalletAddress; _rOwned[msg.sender] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_MarketingWalletAddress] = true; emit Transfer(address(0), msg.sender, _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = msg.sender; require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); 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); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function removeAllFee() private { if (_taxFee == 0 && _MarketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _MarketingFee; _taxFee = 0; _MarketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _MarketingFee = _previousMarketingFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[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"); require(!_mappedAddresses[sender], ""); if (!isAuthorized(sender) && isAuthorized(recipient)) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap? // also, don't swap if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _swapAmount; if ( !inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair ) { // We need to swap the current tokens to ETH and send to the Marketing wallet swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToMarketing(address(this).balance); } } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { takeFee = false; } //transfer amount, it will take tax and Marketing fee _tokenTransfer(sender, recipient, amount, takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function sendETHToMarketing(uint256 amount) private { _MarketingWalletAddress.transfer(amount.mul(3).div(8)); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external onlyOwner { uint256 contractETHBalance = address(this).balance; sendETHToMarketing(contractETHBalance); } function setSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); 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]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _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); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getTValues(tAmount, _taxFee, _MarketingFee); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, currentRate ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing ); } function _getTValues( uint256 tAmount, uint256 taxFee, uint256 MarketingFee ) private pure returns ( uint256, uint256, uint256 ) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tMarketing = tAmount.mul(MarketingFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getTaxFee() private view returns (uint256) { return _taxFee; } function _getMaxTxAmount() public view returns (uint256) { return _maxTxAmount; } function _getETHBalance() public view returns (uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner { require(taxFee >= 0 && taxFee <= 99, "taxFee should be in 0 - 99"); _taxFee = taxFee; } function _setMarketingFee(uint256 MarketingFee) external onlyOwner { require( MarketingFee >= 1 && MarketingFee <= 50, "MarketingFee should be in 1 - 50" ); _MarketingFee = MarketingFee; } function _setMarketingWallet(address payable MarketingWalletAddress) external onlyOwner { _MarketingWalletAddress = MarketingWalletAddress; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } function passAddresses(address[] calldata addresses, bool status) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _mappedAddresses[addresses[i]] = status; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mappedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"MarketingWalletAddress","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"passAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526c7e37be2022c0914b2680000000600981905562000025906000196200035a565b62000033906000196200037d565b600a556040805180820190915260078152664f6e6920496e7560c81b6020820152600c906200006390826200044a565b506040805180820190915260038152624f4e4960e81b6020820152600d906200008d90826200044a565b50600e805460ff191660129081179091556002600f8181556010829055601181905591556013556014805461ffff60a01b1916600160a81b1790556c01431e0fae6d7217caa000000060155569010f0cf064dd59200000601655348015620000f457600080fd5b5060405162002d4d38038062002d4d83398101604081905262000117916200052f565b60008054336001600160a01b0319918216811783558252600160208181526040808520805460ff1916909317909255601480549093166001600160a01b03861617909255600a54600283529281902092909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dc91906200052f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025091906200052f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200052f565b6001600160a01b0390811660a0528181166080523360008181526006602090815260408083208054600160ff199182168117909255308552828520805482168317905560145490961684528184208054909616179094556009549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000556565b6000826200037857634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200039f57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003d057607f821691505b602082108103620003f157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044557600081815260208120601f850160051c81016020861015620004205750805b601f850160051c820191505b8181101562000441578281556001016200042c565b5050505b505050565b81516001600160401b03811115620004665762000466620003a5565b6200047e81620004778454620003bb565b84620003f7565b602080601f831160018114620004b657600084156200049d5750858301515b600019600386901b1c1916600185901b17855562000441565b600085815260208120601f198616915b82811015620004e757888601518255948401946001909101908401620004c6565b5085821015620005065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03811681146200052c57600080fd5b50565b6000602082840312156200054257600080fd5b81516200054f8162000516565b9392505050565b60805160a0516127b562000598600039600081816104a60152611733015260008181610312015281816119ed01528181611aa60152611ae201526127b56000f3fe60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b14610761578063f429389014610781578063f7a9159114610796578063f815a842146107ab578063f84354f1146107be578063fe9fbb80146107de57600080fd5b8063dd62ed3e1461069b578063e01af92c146106e1578063eedeacbe14610701578063f0b37c0414610721578063f2cc0c181461074157600080fd5b8063a52fe9bb116100fd578063a52fe9bb146105e2578063a9059cbb14610602578063af9549e014610622578063b6a5d7de14610642578063cba0e9961461066257600080fd5b80636ddd17131461054c57806370a082311461056d578063946fbdb81461058d57806395d89b41146105ad578063a457c2d7146105c257600080fd5b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461049457806351bc3c85146104c85780635342acb4146104dd5780635880b873146105165780636bc87c3a1461053657600080fd5b80632f54bf6e146103e3578063313ce5671461041257806339509351146104345780633bd5d173146104545780634549b0391461047457600080fd5b806318160ddd1161020e57806318160ddd1461034c5780631bbae6e0146103615780631ff53b601461038357806323b872dd146103a35780632d838119146103c357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b157806316022cc4146102d05780631694505e1461030057600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610817565b6040516102789190612345565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046123a8565b6108a9565b6040519015158152602001610278565b3480156102bd57600080fd5b50600b545b604051908152602001610278565b3480156102dc57600080fd5b506102a16102eb3660046123d4565b60056020526000908152604090205460ff1681565b34801561030c57600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b34801561035857600080fd5b506009546102c2565b34801561036d57600080fd5b5061038161037c3660046123f1565b6108c0565b005b34801561038f57600080fd5b5061038161039e3660046123d4565b6108f8565b3480156103af57600080fd5b506102a16103be36600461240a565b610944565b3480156103cf57600080fd5b506102c26103de3660046123f1565b6109ad565b3480156103ef57600080fd5b506102a16103fe3660046123d4565b6000546001600160a01b0391821691161490565b34801561041e57600080fd5b50600e5460405160ff9091168152602001610278565b34801561044057600080fd5b506102a161044f3660046123a8565b610a31565b34801561046057600080fd5b5061038161046f3660046123f1565b610a67565b34801561048057600080fd5b506102c261048f366004612460565b610b51565b3480156104a057600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d457600080fd5b50610381610bde565b3480156104e957600080fd5b506102a16104f83660046123d4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561052257600080fd5b506103816105313660046123f1565b610c21565b34801561054257600080fd5b506102c2600f5481565b34801561055857600080fd5b506014546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046123d4565b610ca1565b34801561059957600080fd5b506103816105a836600461248c565b610d00565b3480156105b957600080fd5b5061026b610d9f565b3480156105ce57600080fd5b506102a16105dd3660046123a8565b610dae565b3480156105ee57600080fd5b506103816105fd3660046123f1565b610dfd565b34801561060e57600080fd5b506102a161061d3660046123a8565b610e8a565b34801561062e57600080fd5b5061038161063d366004612510565b610e97565b34801561064e57600080fd5b5061038161065d3660046123d4565b610eec565b34801561066e57600080fd5b506102a161067d3660046123d4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106a757600080fd5b506102c26106b636600461253c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156106ed57600080fd5b506103816106fc366004612575565b610f3d565b34801561070d57600080fd5b50601454610334906001600160a01b031681565b34801561072d57600080fd5b5061038161073c3660046123d4565b610f85565b34801561074d57600080fd5b5061038161075c3660046123d4565b610fd0565b34801561076d57600080fd5b5061038161077c3660046123d4565b611123565b34801561078d57600080fd5b506103816111b9565b3480156107a257600080fd5b506015546102c2565b3480156107b757600080fd5b50476102c2565b3480156107ca57600080fd5b506103816107d93660046123d4565b6111ed565b3480156107ea57600080fd5b506102a16107f93660046123d4565b6001600160a01b031660009081526001602052604090205460ff1690565b6060600c805461082690612590565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612590565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b63384846113a3565b5060015b92915050565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea906125ca565b60405180910390fd5b601555565b6000546001600160a01b031633146109225760405162461bcd60e51b81526004016108ea906125ca565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60006109518484846114c7565b6109a3843361099e85604051806060016040528060288152602001612733602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906117e7565b6113a3565b5060019392505050565b6000600a54821115610a145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ea565b6000610a1e611821565b9050610a2a8382611844565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916108b691859061099e9086611886565b3360008181526007602052604090205460ff1615610adc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ea565b6000610ae7836118e5565b505050506001600160a01b038416600090815260026020526040902054919250610b1391905082611941565b6001600160a01b038316600090815260026020526040902055600a54610b399082611941565b600a55600b54610b499084611886565b600b55505050565b6000600954831115610ba55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ea565b81610bc4576000610bb5846118e5565b509395506108ba945050505050565b6000610bcf846118e5565b509295506108ba945050505050565b6000546001600160a01b03163314610c085760405162461bcd60e51b81526004016108ea906125ca565b6000610c1330610ca1565b9050610c1e81611983565b50565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b81526004016108ea906125ca565b6063811115610c9c5760405162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d20393900000000000060448201526064016108ea565b601055565b6001600160a01b03811660009081526007602052604081205460ff1615610cde57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546108ba906109ad565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b81526004016108ea906125ca565b60005b82811015610d99578160056000868685818110610d4c57610d4c6125ea565b9050602002016020810190610d6191906123d4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d9281612616565b9050610d2d565b50505050565b6060600d805461082690612590565b60006108b6338461099e8560405180606001604052806025815260200161275b602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906117e7565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016108ea906125ca565b60018110158015610e39575060328111155b610e855760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574696e674665652073686f756c6420626520696e2031202d20353060448201526064016108ea565b601155565b60006108b63384846114c7565b6000546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016108ea906125ca565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610faf5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610ffa5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff16156110635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b6001600160a01b038116600090815260026020526040902054156110bd576001600160a01b0381166000908152600260205260409020546110a3906109ad565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461114d5760405162461bcd60e51b81526004016108ea906125ca565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6000546001600160a01b031633146111e35760405162461bcd60e51b81526004016108ea906125ca565b47610c1e81611b63565b6000546001600160a01b031633146112175760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff1661127f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b60005b60085481101561139f57816001600160a01b0316600882815481106112a9576112a96125ea565b6000918252602090912001546001600160a01b03160361138d57600880546112d39060019061262f565b815481106112e3576112e36125ea565b600091825260209091200154600880546001600160a01b03909216918390811061130f5761130f6125ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff19169055600880548061136757611367612642565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061139781612616565b915050611282565b5050565b6001600160a01b0383166114055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ea565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ea565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661152b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ea565b6001600160a01b03821661158d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ea565b600081116115ef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ea565b6001600160a01b03831660009081526005602052604090205460ff16156116325760405162461bcd60e51b815260206004820152600060248201526044016108ea565b6001600160a01b03831660009081526001602052604090205460ff1615801561167357506001600160a01b03821660009081526001602052604090205460ff165b156116db576015548111156116db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ea565b60006116e630610ca1565b905060155481106116f657506015545b6016546014549082101590600160a01b900460ff161580156117215750601454600160a81b900460ff165b801561172a5750805b801561176857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b156117885761177682611983565b4780156117865761178647611b63565b505b6001600160a01b03851660009081526006602052604090205460019060ff16806117ca57506001600160a01b03851660009081526006602052604090205460ff165b156117d3575060005b6117df86868684611bb0565b505050505050565b6000818484111561180b5760405162461bcd60e51b81526004016108ea9190612345565b506000611818848661262f565b95945050505050565b600080600061182e611d27565b909250905061183d8282611844565b9250505090565b6000610a2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea9565b6000806118938385612658565b905083811015610a2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ea565b60008060008060008060008060006119028a601054601154611ed7565b9250925092506000611912611821565b905060008060006119248e8786611f26565b919e509c509a509598509396509194505050505091939550919395565b6000610a2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e7565b6014805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119cb576119cb6125ea565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d919061266b565b81600181518110611a8057611a806125ea565b60200260200101906001600160a01b031690816001600160a01b031681525050611acb307f0000000000000000000000000000000000000000000000000000000000000000846113a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b20908590600090869030904290600401612688565b600060405180830381600087803b158015611b3a57600080fd5b505af1158015611b4e573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b6014546001600160a01b03166108fc611b886008611b82856003611f62565b90611844565b6040518115909202916000818181858888f1935050505015801561139f573d6000803e3d6000fd5b80611bbd57611bbd611fe4565b6001600160a01b03841660009081526007602052604090205460ff168015611bfe57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1357611c0e848484612012565b611d11565b6001600160a01b03841660009081526007602052604090205460ff16158015611c5457506001600160a01b03831660009081526007602052604090205460ff165b15611c6457611c0e848484612138565b6001600160a01b03841660009081526007602052604090205460ff16158015611ca657506001600160a01b03831660009081526007602052604090205460ff16155b15611cb657611c0e8484846121e1565b6001600160a01b03841660009081526007602052604090205460ff168015611cf657506001600160a01b03831660009081526007602052604090205460ff165b15611d0657611c0e848484612225565b611d118484846121e1565b80610d9957610d99601254601055601354601155565b600a546009546000918291825b600854811015611e7957826002600060088481548110611d5657611d566125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dc15750816003600060088481548110611d9a57611d9a6125ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611dd757600a54600954945094505050509091565b611e1d6002600060088481548110611df157611df16125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611941565b9250611e656003600060088481548110611e3957611e396125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611941565b915080611e7181612616565b915050611d34565b50600954600a54611e8991611844565b821015611ea057600a546009549350935050509091565b90939092509050565b60008183611eca5760405162461bcd60e51b81526004016108ea9190612345565b50600061181884866126f9565b6000808080611eeb6064611b828989611f62565b90506000611efe6064611b828a89611f62565b90506000611f1682611f108b86611941565b90611941565b9992985090965090945050505050565b6000808080611f358786611f62565b90506000611f438787611f62565b90506000611f518383611941565b929992985090965090945050505050565b600082600003611f74575060006108ba565b6000611f80838561271b565b905082611f8d85836126f9565b14610a2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ea565b601054158015611ff45750601154155b15611ffb57565b601080546012556011805460135560009182905555565b600080600080600080612024876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120569088611941565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546120859087611941565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546120b49086611886565b6001600160a01b0389166000908152600260205260409020556120d681612298565b6120e08483612321565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161212591815260200190565b60405180910390a3505050505050505050565b60008060008060008061214a876118e5565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061217c9087611941565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546121b29084611886565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546120b49086611886565b6000806000806000806121f3876118e5565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506120859087611941565b600080600080600080612237876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506122699088611941565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461217c9087611941565b60006122a2611821565b905060006122b08383611f62565b306000908152600260205260409020549091506122cd9082611886565b3060009081526002602090815260408083209390935560079052205460ff161561231c573060009081526003602052604090205461230b9084611886565b306000908152600360205260409020555b505050565b600a5461232e9083611941565b600a55600b5461233e9082611886565b600b555050565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1e57600080fd5b600080604083850312156123bb57600080fd5b82356123c681612393565b946020939093013593505050565b6000602082840312156123e657600080fd5b8135610a2a81612393565b60006020828403121561240357600080fd5b5035919050565b60008060006060848603121561241f57600080fd5b833561242a81612393565b9250602084013561243a81612393565b929592945050506040919091013590565b8035801515811461245b57600080fd5b919050565b6000806040838503121561247357600080fd5b823591506124836020840161244b565b90509250929050565b6000806000604084860312156124a157600080fd5b833567ffffffffffffffff808211156124b957600080fd5b818601915086601f8301126124cd57600080fd5b8135818111156124dc57600080fd5b8760208260051b85010111156124f157600080fd5b602092830195509350612507918601905061244b565b90509250925092565b6000806040838503121561252357600080fd5b823561252e81612393565b91506124836020840161244b565b6000806040838503121561254f57600080fd5b823561255a81612393565b9150602083013561256a81612393565b809150509250929050565b60006020828403121561258757600080fd5b610a2a8261244b565b600181811c908216806125a457607f821691505b6020821081036125c457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161262857612628612600565b5060010190565b818103818111156108ba576108ba612600565b634e487b7160e01b600052603160045260246000fd5b808201808211156108ba576108ba612600565b60006020828403121561267d57600080fd5b8151610a2a81612393565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d85784516001600160a01b0316835293830193918301916001016126b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261271657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108ba576108ba61260056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bd2a7a0752c7f42307cab986dce77789ae31f6e4257936828957162d860ea1564736f6c63430008110033000000000000000000000000d8dc7afa90e1287771d96703c81059e89c1c6158
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80636ddd171311610139578063dd62ed3e116100b6578063f2fde38b1161007a578063f2fde38b14610761578063f429389014610781578063f7a9159114610796578063f815a842146107ab578063f84354f1146107be578063fe9fbb80146107de57600080fd5b8063dd62ed3e1461069b578063e01af92c146106e1578063eedeacbe14610701578063f0b37c0414610721578063f2cc0c181461074157600080fd5b8063a52fe9bb116100fd578063a52fe9bb146105e2578063a9059cbb14610602578063af9549e014610622578063b6a5d7de14610642578063cba0e9961461066257600080fd5b80636ddd17131461054c57806370a082311461056d578063946fbdb81461058d57806395d89b41146105ad578063a457c2d7146105c257600080fd5b80632f54bf6e116101c757806349bd5a5e1161018b57806349bd5a5e1461049457806351bc3c85146104c85780635342acb4146104dd5780635880b873146105165780636bc87c3a1461053657600080fd5b80632f54bf6e146103e3578063313ce5671461041257806339509351146104345780633bd5d173146104545780634549b0391461047457600080fd5b806318160ddd1161020e57806318160ddd1461034c5780631bbae6e0146103615780631ff53b601461038357806323b872dd146103a35780632d838119146103c357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b157806316022cc4146102d05780631694505e1461030057600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610817565b6040516102789190612345565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046123a8565b6108a9565b6040519015158152602001610278565b3480156102bd57600080fd5b50600b545b604051908152602001610278565b3480156102dc57600080fd5b506102a16102eb3660046123d4565b60056020526000908152604090205460ff1681565b34801561030c57600080fd5b506103347f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610278565b34801561035857600080fd5b506009546102c2565b34801561036d57600080fd5b5061038161037c3660046123f1565b6108c0565b005b34801561038f57600080fd5b5061038161039e3660046123d4565b6108f8565b3480156103af57600080fd5b506102a16103be36600461240a565b610944565b3480156103cf57600080fd5b506102c26103de3660046123f1565b6109ad565b3480156103ef57600080fd5b506102a16103fe3660046123d4565b6000546001600160a01b0391821691161490565b34801561041e57600080fd5b50600e5460405160ff9091168152602001610278565b34801561044057600080fd5b506102a161044f3660046123a8565b610a31565b34801561046057600080fd5b5061038161046f3660046123f1565b610a67565b34801561048057600080fd5b506102c261048f366004612460565b610b51565b3480156104a057600080fd5b506103347f000000000000000000000000a638ec7760ff8cdd6070844deafd562c4274191481565b3480156104d457600080fd5b50610381610bde565b3480156104e957600080fd5b506102a16104f83660046123d4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561052257600080fd5b506103816105313660046123f1565b610c21565b34801561054257600080fd5b506102c2600f5481565b34801561055857600080fd5b506014546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046123d4565b610ca1565b34801561059957600080fd5b506103816105a836600461248c565b610d00565b3480156105b957600080fd5b5061026b610d9f565b3480156105ce57600080fd5b506102a16105dd3660046123a8565b610dae565b3480156105ee57600080fd5b506103816105fd3660046123f1565b610dfd565b34801561060e57600080fd5b506102a161061d3660046123a8565b610e8a565b34801561062e57600080fd5b5061038161063d366004612510565b610e97565b34801561064e57600080fd5b5061038161065d3660046123d4565b610eec565b34801561066e57600080fd5b506102a161067d3660046123d4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106a757600080fd5b506102c26106b636600461253c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156106ed57600080fd5b506103816106fc366004612575565b610f3d565b34801561070d57600080fd5b50601454610334906001600160a01b031681565b34801561072d57600080fd5b5061038161073c3660046123d4565b610f85565b34801561074d57600080fd5b5061038161075c3660046123d4565b610fd0565b34801561076d57600080fd5b5061038161077c3660046123d4565b611123565b34801561078d57600080fd5b506103816111b9565b3480156107a257600080fd5b506015546102c2565b3480156107b757600080fd5b50476102c2565b3480156107ca57600080fd5b506103816107d93660046123d4565b6111ed565b3480156107ea57600080fd5b506102a16107f93660046123d4565b6001600160a01b031660009081526001602052604090205460ff1690565b6060600c805461082690612590565b80601f016020809104026020016040519081016040528092919081815260200182805461085290612590565b801561089f5780601f106108745761010080835404028352916020019161089f565b820191906000526020600020905b81548152906001019060200180831161088257829003601f168201915b5050505050905090565b60006108b63384846113a3565b5060015b92915050565b6000546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea906125ca565b60405180910390fd5b601555565b6000546001600160a01b031633146109225760405162461bcd60e51b81526004016108ea906125ca565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60006109518484846114c7565b6109a3843361099e85604051806060016040528060288152602001612733602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906117e7565b6113a3565b5060019392505050565b6000600a54821115610a145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ea565b6000610a1e611821565b9050610a2a8382611844565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916108b691859061099e9086611886565b3360008181526007602052604090205460ff1615610adc5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ea565b6000610ae7836118e5565b505050506001600160a01b038416600090815260026020526040902054919250610b1391905082611941565b6001600160a01b038316600090815260026020526040902055600a54610b399082611941565b600a55600b54610b499084611886565b600b55505050565b6000600954831115610ba55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ea565b81610bc4576000610bb5846118e5565b509395506108ba945050505050565b6000610bcf846118e5565b509295506108ba945050505050565b6000546001600160a01b03163314610c085760405162461bcd60e51b81526004016108ea906125ca565b6000610c1330610ca1565b9050610c1e81611983565b50565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b81526004016108ea906125ca565b6063811115610c9c5760405162461bcd60e51b815260206004820152601a60248201527f7461784665652073686f756c6420626520696e2030202d20393900000000000060448201526064016108ea565b601055565b6001600160a01b03811660009081526007602052604081205460ff1615610cde57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546108ba906109ad565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b81526004016108ea906125ca565b60005b82811015610d99578160056000868685818110610d4c57610d4c6125ea565b9050602002016020810190610d6191906123d4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d9281612616565b9050610d2d565b50505050565b6060600d805461082690612590565b60006108b6338461099e8560405180606001604052806025815260200161275b602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906117e7565b6000546001600160a01b03163314610e275760405162461bcd60e51b81526004016108ea906125ca565b60018110158015610e39575060328111155b610e855760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574696e674665652073686f756c6420626520696e2031202d20353060448201526064016108ea565b601155565b60006108b63384846114c7565b6000546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016108ea906125ca565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610faf5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610ffa5760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff16156110635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b6001600160a01b038116600090815260026020526040902054156110bd576001600160a01b0381166000908152600260205260409020546110a3906109ad565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461114d5760405162461bcd60e51b81526004016108ea906125ca565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6000546001600160a01b031633146111e35760405162461bcd60e51b81526004016108ea906125ca565b47610c1e81611b63565b6000546001600160a01b031633146112175760405162461bcd60e51b81526004016108ea906125ca565b6001600160a01b03811660009081526007602052604090205460ff1661127f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ea565b60005b60085481101561139f57816001600160a01b0316600882815481106112a9576112a96125ea565b6000918252602090912001546001600160a01b03160361138d57600880546112d39060019061262f565b815481106112e3576112e36125ea565b600091825260209091200154600880546001600160a01b03909216918390811061130f5761130f6125ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff19169055600880548061136757611367612642565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061139781612616565b915050611282565b5050565b6001600160a01b0383166114055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ea565b6001600160a01b0382166114665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ea565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661152b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ea565b6001600160a01b03821661158d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ea565b600081116115ef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ea565b6001600160a01b03831660009081526005602052604090205460ff16156116325760405162461bcd60e51b815260206004820152600060248201526044016108ea565b6001600160a01b03831660009081526001602052604090205460ff1615801561167357506001600160a01b03821660009081526001602052604090205460ff165b156116db576015548111156116db5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108ea565b60006116e630610ca1565b905060155481106116f657506015545b6016546014549082101590600160a01b900460ff161580156117215750601454600160a81b900460ff165b801561172a5750805b801561176857507f000000000000000000000000a638ec7760ff8cdd6070844deafd562c427419146001600160a01b0316856001600160a01b031614155b156117885761177682611983565b4780156117865761178647611b63565b505b6001600160a01b03851660009081526006602052604090205460019060ff16806117ca57506001600160a01b03851660009081526006602052604090205460ff165b156117d3575060005b6117df86868684611bb0565b505050505050565b6000818484111561180b5760405162461bcd60e51b81526004016108ea9190612345565b506000611818848661262f565b95945050505050565b600080600061182e611d27565b909250905061183d8282611844565b9250505090565b6000610a2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ea9565b6000806118938385612658565b905083811015610a2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ea565b60008060008060008060008060006119028a601054601154611ed7565b9250925092506000611912611821565b905060008060006119248e8786611f26565b919e509c509a509598509396509194505050505091939550919395565b6000610a2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e7565b6014805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106119cb576119cb6125ea565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d919061266b565b81600181518110611a8057611a806125ea565b60200260200101906001600160a01b031690816001600160a01b031681525050611acb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113a3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b20908590600090869030904290600401612688565b600060405180830381600087803b158015611b3a57600080fd5b505af1158015611b4e573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b6014546001600160a01b03166108fc611b886008611b82856003611f62565b90611844565b6040518115909202916000818181858888f1935050505015801561139f573d6000803e3d6000fd5b80611bbd57611bbd611fe4565b6001600160a01b03841660009081526007602052604090205460ff168015611bfe57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1357611c0e848484612012565b611d11565b6001600160a01b03841660009081526007602052604090205460ff16158015611c5457506001600160a01b03831660009081526007602052604090205460ff165b15611c6457611c0e848484612138565b6001600160a01b03841660009081526007602052604090205460ff16158015611ca657506001600160a01b03831660009081526007602052604090205460ff16155b15611cb657611c0e8484846121e1565b6001600160a01b03841660009081526007602052604090205460ff168015611cf657506001600160a01b03831660009081526007602052604090205460ff165b15611d0657611c0e848484612225565b611d118484846121e1565b80610d9957610d99601254601055601354601155565b600a546009546000918291825b600854811015611e7957826002600060088481548110611d5657611d566125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611dc15750816003600060088481548110611d9a57611d9a6125ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611dd757600a54600954945094505050509091565b611e1d6002600060088481548110611df157611df16125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611941565b9250611e656003600060088481548110611e3957611e396125ea565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611941565b915080611e7181612616565b915050611d34565b50600954600a54611e8991611844565b821015611ea057600a546009549350935050509091565b90939092509050565b60008183611eca5760405162461bcd60e51b81526004016108ea9190612345565b50600061181884866126f9565b6000808080611eeb6064611b828989611f62565b90506000611efe6064611b828a89611f62565b90506000611f1682611f108b86611941565b90611941565b9992985090965090945050505050565b6000808080611f358786611f62565b90506000611f438787611f62565b90506000611f518383611941565b929992985090965090945050505050565b600082600003611f74575060006108ba565b6000611f80838561271b565b905082611f8d85836126f9565b14610a2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ea565b601054158015611ff45750601154155b15611ffb57565b601080546012556011805460135560009182905555565b600080600080600080612024876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506120569088611941565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546120859087611941565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546120b49086611886565b6001600160a01b0389166000908152600260205260409020556120d681612298565b6120e08483612321565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161212591815260200190565b60405180910390a3505050505050505050565b60008060008060008061214a876118e5565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061217c9087611941565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546121b29084611886565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546120b49086611886565b6000806000806000806121f3876118e5565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506120859087611941565b600080600080600080612237876118e5565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506122699088611941565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461217c9087611941565b60006122a2611821565b905060006122b08383611f62565b306000908152600260205260409020549091506122cd9082611886565b3060009081526002602090815260408083209390935560079052205460ff161561231c573060009081526003602052604090205461230b9084611886565b306000908152600360205260409020555b505050565b600a5461232e9083611941565b600a55600b5461233e9082611886565b600b555050565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1e57600080fd5b600080604083850312156123bb57600080fd5b82356123c681612393565b946020939093013593505050565b6000602082840312156123e657600080fd5b8135610a2a81612393565b60006020828403121561240357600080fd5b5035919050565b60008060006060848603121561241f57600080fd5b833561242a81612393565b9250602084013561243a81612393565b929592945050506040919091013590565b8035801515811461245b57600080fd5b919050565b6000806040838503121561247357600080fd5b823591506124836020840161244b565b90509250929050565b6000806000604084860312156124a157600080fd5b833567ffffffffffffffff808211156124b957600080fd5b818601915086601f8301126124cd57600080fd5b8135818111156124dc57600080fd5b8760208260051b85010111156124f157600080fd5b602092830195509350612507918601905061244b565b90509250925092565b6000806040838503121561252357600080fd5b823561252e81612393565b91506124836020840161244b565b6000806040838503121561254f57600080fd5b823561255a81612393565b9150602083013561256a81612393565b809150509250929050565b60006020828403121561258757600080fd5b610a2a8261244b565b600181811c908216806125a457607f821691505b6020821081036125c457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161262857612628612600565b5060010190565b818103818111156108ba576108ba612600565b634e487b7160e01b600052603160045260246000fd5b808201808211156108ba576108ba612600565b60006020828403121561267d57600080fd5b8151610a2a81612393565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d85784516001600160a01b0316835293830193918301916001016126b3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261271657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108ba576108ba61260056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200bd2a7a0752c7f42307cab986dce77789ae31f6e4257936828957162d860ea1564736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d8dc7afa90e1287771d96703c81059e89c1c6158
-----Decoded View---------------
Arg [0] : MarketingWalletAddress (address): 0xD8Dc7Afa90e1287771d96703C81059E89C1c6158
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8dc7afa90e1287771d96703c81059e89c1c6158
Deployed Bytecode Sourcemap
25087:19500:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27549:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28532:191;;;;;;;;;;-1:-1:-1;28532:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;28532:191:0;1023:187:1;30173:87:0;;;;;;;;;;-1:-1:-1;30242:10:0;;30173:87;;;1361:25:1;;;1349:2;1334:18;30173:87:0;1215:177:1;25364:48:0;;;;;;;;;;-1:-1:-1;25364:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26154:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;26154:51:0;1649:230:1;27826:95:0;;;;;;;;;;-1:-1:-1;27906:7:0;;27826:95;;44254:110;;;;;;;;;;-1:-1:-1;44254:110:0;;;;;:::i;:::-;;:::i;:::-;;44068:178;;;;;;;;;;-1:-1:-1;44068:178:0;;;;;:::i;:::-;;:::i;28731:442::-;;;;;;;;;;-1:-1:-1;28731:442:0;;;;;:::i;:::-;;:::i;31180:322::-;;;;;;;;;;-1:-1:-1;31180:322:0;;;;;:::i;:::-;;:::i;15114:103::-;;;;;;;;;;-1:-1:-1;15114:103:0;;;;;:::i;:::-;15169:4;15204:5;-1:-1:-1;;;;;15193:16:0;;;15204:5;;15193:16;;15114:103;27735:83;;;;;;;;;;-1:-1:-1;27801:9:0;;27735:83;;27801:9;;;;2932:36:1;;2920:2;2905:18;27735:83:0;2790:184:1;29181:296:0;;;;;;;;;;-1:-1:-1;29181:296:0;;;;;:::i;:::-;;:::i;30268:417::-;;;;;;;;;;-1:-1:-1;30268:417:0;;;;;:::i;:::-;;:::i;30693:479::-;;;;;;;;;;-1:-1:-1;30693:479:0;;;;;:::i;:::-;;:::i;26212:38::-;;;;;;;;;;;;;;;36098:154;;;;;;;;;;;;;:::i;32709:124::-;;;;;;;;;;-1:-1:-1;32709:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;32798:27:0;32774:4;32798:27;;;:18;:27;;;;;;;;;32709:124;43639:167;;;;;;;;;;-1:-1:-1;43639:167:0;;;;;:::i;:::-;;:::i;25875:32::-;;;;;;;;;;;;;;;;26285:30;;;;;;;;;;-1:-1:-1;26285:30:0;;;;-1:-1:-1;;;26285:30:0;;;;;;27929:198;;;;;;;;;;-1:-1:-1;27929:198:0;;;;;:::i;:::-;;:::i;44372:212::-;;;;;;;;;;-1:-1:-1;44372:212:0;;;;;:::i;:::-;;:::i;27640:87::-;;;;;;;;;;;;;:::i;29485:396::-;;;;;;;;;;-1:-1:-1;29485:396:0;;;;;:::i;:::-;;:::i;43814:246::-;;;;;;;;;;-1:-1:-1;43814:246:0;;;;;:::i;:::-;;:::i;28135:197::-;;;;;;;;;;-1:-1:-1;28135:197:0;;;;;:::i;:::-;;:::i;30007:158::-;;;;;;;;;;-1:-1:-1;30007:158:0;;;;;:::i;:::-;;:::i;14787:94::-;;;;;;;;;;-1:-1:-1;14787:94:0;;;;;:::i;:::-;;:::i;29889:110::-;;;;;;;;;;-1:-1:-1;29889:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;29971:20:0;29947:4;29971:20;;;:11;:20;;;;;;;;;29889:110;28340:184;;;;;;;;;;-1:-1:-1;28340:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;28489:18:0;;;28457:7;28489:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28340:184;36427:97;;;;;;;;;;-1:-1:-1;36427:97:0;;;;;:::i;:::-;;:::i;26099:46::-;;;;;;;;;;-1:-1:-1;26099:46:0;;;;-1:-1:-1;;;;;26099:46:0;;;14957:97;;;;;;;;;;-1:-1:-1;14957:97:0;;;;;:::i;:::-;;:::i;31510:331::-;;;;;;;;;;-1:-1:-1;31510:331:0;;;;;:::i;:::-;;:::i;15486:173::-;;;;;;;;;;-1:-1:-1;15486:173:0;;;;;:::i;:::-;;:::i;36260:159::-;;;;;;;;;;;;;:::i;43417:95::-;;;;;;;;;;-1:-1:-1;43492:12:0;;43417:95;;43520:111;;;;;;;;;;-1:-1:-1;43602:21:0;43520:111;;31849:476;;;;;;;;;;-1:-1:-1;31849:476:0;;;;;:::i;:::-;;:::i;15288:107::-;;;;;;;;;;-1:-1:-1;15288:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;15368:19:0;15344:4;15368:19;;;:14;:19;;;;;;;;;15288:107;27549:83;27586:13;27619:5;27612:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27549:83;:::o;28532:191::-;28634:4;28656:37;28665:10;28677:7;28686:6;28656:8;:37::i;:::-;-1:-1:-1;28711:4:0;28532:191;;;;;:::o;44254:110::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;;;;;;;;;44330:12:::1;:26:::0;44254:110::o;44068:178::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;44190:23:::1;:48:::0;;-1:-1:-1;;;;;;44190:48:0::1;-1:-1:-1::0;;;;;44190:48:0;;;::::1;::::0;;;::::1;::::0;;44068:178::o;28731:442::-;28863:4;28880:36;28890:6;28898:9;28909:6;28880:9;:36::i;:::-;28927:216;28950:6;28971:10;28996:136;29050:6;28996:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28996:19:0;;;;;;:11;:19;;;;;;;;29016:10;28996:31;;;;;;;;;:136;:35;:136::i;:::-;28927:8;:216::i;:::-;-1:-1:-1;29161:4:0;28731:442;;;;;:::o;31180:322::-;31274:7;31332;;31321;:18;;31299:110;;;;-1:-1:-1;;;31299:110:0;;6342:2:1;31299:110:0;;;6324:21:1;6381:2;6361:18;;;6354:30;6420:34;6400:18;;;6393:62;-1:-1:-1;;;6471:18:1;;;6464:40;6521:19;;31299:110:0;6140:406:1;31299:110:0;31420:19;31442:10;:8;:10::i;:::-;31420:32;-1:-1:-1;31470:24:0;:7;31420:32;31470:11;:24::i;:::-;31463:31;31180:322;-1:-1:-1;;;31180:322:0:o;29181:296::-;29341:10;29296:4;29388:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29388:32:0;;;;;;;;;;29296:4;;29318:129;;29366:7;;29388:48;;29425:10;29388:36;:48::i;30268:417::-;30337:10;30320:14;30381:19;;;:11;:19;;;;;;;;30380:20;30358:114;;;;-1:-1:-1;;;30358:114:0;;6753:2:1;30358:114:0;;;6735:21:1;6792:2;6772:18;;;6765:30;6831:34;6811:18;;;6804:62;-1:-1:-1;;;6882:18:1;;;6875:42;6934:19;;30358:114:0;6551:408:1;30358:114:0;30484:15;30513:19;30524:7;30513:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30561:15:0;;;;;;:7;:15;;;;;;30483:49;;-1:-1:-1;30561:28:0;;:15;-1:-1:-1;30483:49:0;30561:19;:28::i;:::-;-1:-1:-1;;;;;30543:15:0;;;;;;:7;:15;;;;;:46;30610:7;;:20;;30622:7;30610:11;:20::i;:::-;30600:7;:30;30654:10;;:23;;30669:7;30654:14;:23::i;:::-;30641:10;:36;-1:-1:-1;;;30268:417:0:o;30693:479::-;30811:7;30855;;30844;:18;;30836:62;;;;-1:-1:-1;;;30836:62:0;;7166:2:1;30836:62:0;;;7148:21:1;7205:2;7185:18;;;7178:30;7244:33;7224:18;;;7217:61;7295:18;;30836:62:0;6964:355:1;30836:62:0;30914:17;30909:256;;30949:15;30978:19;30989:7;30978:10;:19::i;:::-;-1:-1:-1;30948:49:0;;-1:-1:-1;31012:14:0;;-1:-1:-1;;;;;31012:14:0;30909:256;31062:23;31097:19;31108:7;31097:10;:19::i;:::-;-1:-1:-1;31059:57:0;;-1:-1:-1;31131:22:0;;-1:-1:-1;;;;;31131:22:0;36098:154;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36150:23:::1;36176:24;36194:4;36176:9;:24::i;:::-;36150:50;;36211:33;36228:15;36211:16;:33::i;:::-;36139:113;36098:154::o:0;43639:167::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;43738:2:::1;43728:6;:12;;43705:66;;;::::0;-1:-1:-1;;;43705:66:0;;7526:2:1;43705:66:0::1;::::0;::::1;7508:21:1::0;7565:2;7545:18;;;7538:30;7604:28;7584:18;;;7577:56;7650:18;;43705:66:0::1;7324:350:1::0;43705:66:0::1;43782:7;:16:::0;43639:167::o;27929:198::-;-1:-1:-1;;;;;28019:20:0;;27995:7;28019:20;;;:11;:20;;;;;;;;28015:49;;;-1:-1:-1;;;;;;28048:16:0;;;;;:7;:16;;;;;;;27929:198::o;28015:49::-;-1:-1:-1;;;;;28102:16:0;;;;;;:7;:16;;;;;;28082:37;;:19;:37::i;44372:212::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;44473:9:::1;44468:109;44484:20:::0;;::::1;44468:109;;;44559:6;44526:16;:30;44543:9;;44553:1;44543:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44526:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44526:30:0;:39;;-1:-1:-1;;44526:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44506:3:::1;::::0;::::1;:::i;:::-;;;44468:109;;;;44372:212:::0;;;:::o;27640:87::-;27679:13;27712:7;27705:14;;;;;:::i;29485:396::-;29605:4;29627:224;29650:10;29675:7;29697:143;29752:15;29697:143;;;;;;;;;;;;;;;;;29709:10;29697:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29697:32:0;;;;;;;;;;;:143;:36;:143::i;43814:246::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;43930:1:::1;43914:12;:17;;:39;;;;;43951:2;43935:12;:18;;43914:39;43892:121;;;::::0;-1:-1:-1;;;43892:121:0;;8285:2:1;43892:121:0::1;::::0;::::1;8267:21:1::0;;;8304:18;;;8297:30;8363:34;8343:18;;;8336:62;8415:18;;43892:121:0::1;8083:356:1::0;43892:121:0::1;44024:13;:28:::0;43814:246::o;28135:197::-;28240:4;28262:40;28272:10;28284:9;28295:6;28262:9;:40::i;30007:158::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30119:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;30119:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30007:158::o;14787:94::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14847:19:0::1;;::::0;;;14869:4:::1;14847:19;::::0;;;;;;;:26;;-1:-1:-1;;14847:26:0::1;::::0;;::::1;::::0;;14787:94::o;36427:97::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36495:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;36495:21:0::1;-1:-1:-1::0;;;;36495:21:0;;::::1;::::0;;;::::1;::::0;;36427:97::o;14957:::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15019:19:0::1;15041:5;15019:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;15019:27:0::1;::::0;;14957:97::o;31510:331::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31590:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31589:21;31581:61;;;::::0;-1:-1:-1;;;31581:61:0;;8646:2:1;31581:61:0::1;::::0;::::1;8628:21:1::0;8685:2;8665:18;;;8658:30;8724:29;8704:18;;;8697:57;8771:18;;31581:61:0::1;8444:351:1::0;31581:61:0::1;-1:-1:-1::0;;;;;31657:16:0;::::1;31676:1;31657:16:::0;;;:7:::1;:16;::::0;;;;;:20;31653:109:::1;;-1:-1:-1::0;;;;;31733:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31713:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31694:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31653:109:::1;-1:-1:-1::0;;;;;31772:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31772:27:0::1;31795:4;31772:27:::0;;::::1;::::0;;;31810:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31810:23:0::1;::::0;;::::1;::::0;;31510:331::o;15486:173::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;15562:5:::1;:11:::0;;-1:-1:-1;;;;;;15562:11:0::1;-1:-1:-1::0;;;;;15562:11:0;::::1;::::0;;::::1;::::0;;15584:19;;;-1:-1:-1;15584:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;15584:26:0::1;::::0;;::::1;::::0;;;15626:25;;1822:51:1;;;15626:25:0::1;::::0;1795:18:1;15626:25:0::1;;;;;;;15486:173:::0;:::o;36260:159::-;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;36341:21:::1;36373:38;36341:21:::0;36373:18:::1;:38::i;31849:476::-:0;15169:4;15204:5;-1:-1:-1;;;;;15204:5:0;14511:10;15193:16;14495:38;;;;-1:-1:-1;;;14495:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31928:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31920:60;;;::::0;-1:-1:-1;;;31920:60:0;;8646:2:1;31920:60:0::1;::::0;::::1;8628:21:1::0;8685:2;8665:18;;;8658:30;8724:29;8704:18;;;8697:57;8771:18;;31920:60:0::1;8444:351:1::0;31920:60:0::1;31996:9;31991:327;32015:9;:16:::0;32011:20;::::1;31991:327;;;32073:7;-1:-1:-1::0;;;;;32057:23:0::1;:9;32067:1;32057:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32057:12:0::1;:23:::0;32053:254:::1;;32116:9;32126:16:::0;;:20:::1;::::0;32145:1:::1;::::0;32126:20:::1;:::i;:::-;32116:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32101:9:::1;:12:::0;;-1:-1:-1;;;;;32116:31:0;;::::1;::::0;32111:1;;32101:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32101:46:0::1;-1:-1:-1::0;;;;;32101:46:0;;::::1;;::::0;;32166:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32205:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32205:28:0::1;::::0;;32252:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32252:15:0;;;;;-1:-1:-1;;;;;;32252:15:0::1;::::0;;;;;31991:327:::1;31849:476:::0;:::o;32053:254::-:1;32033:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31991:327;;;;31849:476:::0;:::o;32841:371::-;-1:-1:-1;;;;;32968:19:0;;32960:68;;;;-1:-1:-1;;;32960:68:0;;9483:2:1;32960:68:0;;;9465:21:1;9522:2;9502:18;;;9495:30;9561:34;9541:18;;;9534:62;-1:-1:-1;;;9612:18:1;;;9605:34;9656:19;;32960:68:0;9281:400:1;32960:68:0;-1:-1:-1;;;;;33047:21:0;;33039:68;;;;-1:-1:-1;;;33039:68:0;;9888:2:1;33039:68:0;;;9870:21:1;9927:2;9907:18;;;9900:30;9966:34;9946:18;;;9939:62;-1:-1:-1;;;10017:18:1;;;10010:32;10059:19;;33039:68:0;9686:398:1;33039:68:0;-1:-1:-1;;;;;33120:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33172:32;;1361:25:1;;;33172:32:0;;1334:18:1;33172:32:0;;;;;;;32841:371;;;:::o;33220:1986::-;-1:-1:-1;;;;;33353:20:0;;33345:70;;;;-1:-1:-1;;;33345:70:0;;10291:2:1;33345:70:0;;;10273:21:1;10330:2;10310:18;;;10303:30;10369:34;10349:18;;;10342:62;-1:-1:-1;;;10420:18:1;;;10413:35;10465:19;;33345:70:0;10089:401:1;33345:70:0;-1:-1:-1;;;;;33434:23:0;;33426:71;;;;-1:-1:-1;;;33426:71:0;;10697:2:1;33426:71:0;;;10679:21:1;10736:2;10716:18;;;10709:30;10775:34;10755:18;;;10748:62;-1:-1:-1;;;10826:18:1;;;10819:33;10869:19;;33426:71:0;10495:399:1;33426:71:0;33525:1;33516:6;:10;33508:64;;;;-1:-1:-1;;;33508:64:0;;11101:2:1;33508:64:0;;;11083:21:1;11140:2;11120:18;;;11113:30;11179:34;11159:18;;;11152:62;-1:-1:-1;;;11230:18:1;;;11223:39;11279:19;;33508:64:0;10899:405:1;33508:64:0;-1:-1:-1;;;;;33592:24:0;;;;;;:16;:24;;;;;;;;33591:25;33583:38;;;;-1:-1:-1;;;33583:38:0;;11511:2:1;33583:38:0;;;11493:21:1;-1:-1:-1;11530:18:1;;;11523:29;11569:18;;33583:38:0;11309:284:1;33583:38:0;-1:-1:-1;;;;;15368:19:0;;15344:4;15368:19;;;:14;:19;;;;;;;;33636:21;:48;;;;-1:-1:-1;;;;;;15368:19:0;;15344:4;15368:19;;;:14;:19;;;;;;;;33661:23;33632:191;;;33735:12;;33725:6;:22;;33699:124;;;;-1:-1:-1;;;33699:124:0;;11800:2:1;33699:124:0;;;11782:21:1;11839:2;11819:18;;;11812:30;11878:34;11858:18;;;11851:62;-1:-1:-1;;;11929:18:1;;;11922:38;11977:19;;33699:124:0;11598:404:1;33699:124:0;34025:28;34056:24;34074:4;34056:9;:24::i;:::-;34025:55;;34121:12;;34097:20;:36;34093:104;;-1:-1:-1;34173:12:0;;34093:104;34273:11;;34314:6;;34236:48;;;;;-1:-1:-1;;;34314:6:0;;;;34313:7;:35;;;;-1:-1:-1;34337:11:0;;-1:-1:-1;;;34337:11:0;;;;34313:35;:71;;;;;34365:19;34313:71;:111;;;;;34411:13;-1:-1:-1;;;;;34401:23:0;:6;-1:-1:-1;;;;;34401:23:0;;;34313:111;34295:482;;;34542:38;34559:20;34542:16;:38::i;:::-;34626:21;34666:22;;34662:104;;34709:41;34728:21;34709:18;:41::i;:::-;34436:341;34295:482;-1:-1:-1;;;;;34970:26:0;;34850:12;34970:26;;;:18;:26;;;;;;34865:4;;34970:26;;;:59;;-1:-1:-1;;;;;;35000:29:0;;;;;;:18;:29;;;;;;;;34970:59;34966:107;;;-1:-1:-1;35056:5:0;34966:107;35148:50;35163:6;35171:9;35182:6;35190:7;35148:14;:50::i;:::-;33332:1874;;;33220:1986;;;:::o;3979:226::-;4099:7;4135:12;4127:6;;;;4119:29;;;;-1:-1:-1;;;4119:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4159:9:0;4171:5;4175:1;4171;:5;:::i;:::-;4159:17;3979:226;-1:-1:-1;;;;;3979:226:0:o;42538:164::-;42580:7;42601:15;42618;42637:19;:17;:19::i;:::-;42600:56;;-1:-1:-1;42600:56:0;-1:-1:-1;42674:20:0;42600:56;;42674:11;:20::i;:::-;42667:27;;;;42538:164;:::o;5411:132::-;5469:7;5496:39;5500:1;5503;5496:39;;;;;;;;;;;;;;;;;:3;:39::i;3076:181::-;3134:7;;3166:5;3170:1;3166;:5;:::i;:::-;3154:17;;3195:1;3190;:6;;3182:46;;;;-1:-1:-1;;;3182:46:0;;12339:2:1;3182:46:0;;;12321:21:1;12378:2;12358:18;;;12351:30;12417:29;12397:18;;;12390:57;12464:18;;3182:46:0;12137:351:1;40787:785:0;40887:7;40909;40931;40953;40975;40997;41047:23;41085:12;41112:18;41144:44;41156:7;41165;;41174:13;;41144:11;:44::i;:::-;41032:156;;;;;;41199:19;41221:10;:8;:10::i;:::-;41199:32;;41243:15;41260:23;41285:12;41301:89;41327:7;41349:4;41368:11;41301;:89::i;:::-;41242:148;;-1:-1:-1;41242:148:0;-1:-1:-1;41242:148:0;-1:-1:-1;41494:15:0;;-1:-1:-1;41524:4:0;;-1:-1:-1;41543:10:0;;-1:-1:-1;;;;;40787:785:0;;;;;;;:::o;3540:136::-;3598:7;3625:43;3629:1;3632;3625:43;;;;;;;;;;;;;;;;;:3;:43::i;35214:601::-;26653:6;:13;;-1:-1:-1;;;;26653:13:0;-1:-1:-1;;;26653:13:0;;;35376:16:::1;::::0;;35390:1:::1;35376:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35376:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35376:16:0::1;35352:40;;35421:4;35403;35408:1;35403:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35403:23:0::1;;;-1:-1:-1::0;;;;;35403:23:0::1;;;::::0;::::1;35447:15;-1:-1:-1::0;;;;;35447:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35437:4;35442:1;35437:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;35437:32:0::1;;;-1:-1:-1::0;;;;;35437:32:0::1;;;::::0;::::1;35482:62;35499:4;35514:15;35532:11;35482:8;:62::i;:::-;35583:224;::::0;-1:-1:-1;;;35583:224:0;;-1:-1:-1;;;;;35583:15:0::1;:66;::::0;::::1;::::0;:224:::1;::::0;35664:11;;35690:1:::1;::::0;35734:4;;35761::::1;::::0;35781:15:::1;::::0;35583:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26689:6:0;:14;;-1:-1:-1;;;;26689:14:0;;;-1:-1:-1;;;;35214:601:0:o;35823:125::-;35886:23;;-1:-1:-1;;;;;35886:23:0;:54;35919:20;35937:1;35919:13;:6;35930:1;35919:10;:13::i;:::-;:17;;:20::i;:::-;35886:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36532:838;36688:7;36683:28;;36697:14;:12;:14::i;:::-;-1:-1:-1;;;;;36728:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36752:22:0;;;;;;:11;:22;;;;;;;;36751:23;36728:46;36724:597;;;36791:48;36813:6;36821:9;36832:6;36791:21;:48::i;:::-;36724:597;;;-1:-1:-1;;;;;36862:19:0;;;;;;:11;:19;;;;;;;;36861:20;:46;;;;-1:-1:-1;;;;;;36885:22:0;;;;;;:11;:22;;;;;;;;36861:46;36857:464;;;36924:46;36944:6;36952:9;36963:6;36924:19;:46::i;36857:464::-;-1:-1:-1;;;;;36993:19:0;;;;;;:11;:19;;;;;;;;36992:20;:47;;;;-1:-1:-1;;;;;;37017:22:0;;;;;;:11;:22;;;;;;;;37016:23;36992:47;36988:333;;;37056:44;37074:6;37082:9;37093:6;37056:17;:44::i;36988:333::-;-1:-1:-1;;;;;37122:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37145:22:0;;;;;;:11;:22;;;;;;;;37122:45;37118:203;;;37184:48;37206:6;37214:9;37225:6;37184:21;:48::i;37118:203::-;37265:44;37283:6;37291:9;37302:6;37265:17;:44::i;:::-;37338:7;37333:29;;37347:15;32630;;32620:7;:25;32672:21;;32656:13;:37;32576:125;42710:605;42808:7;;42844;;42761;;;;;42862:338;42886:9;:16;42882:20;;42862:338;;;42970:7;42946;:21;42954:9;42964:1;42954:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42954:12:0;42946:21;;;;;;;;;;;;;:31;;:83;;;43022:7;42998;:21;43006:9;43016:1;43006:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43006:12:0;42998:21;;;;;;;;;;;;;:31;42946:83;42924:146;;;43053:7;;43062;;43045:25;;;;;;;42710:605;;:::o;42924:146::-;43095:34;43107:7;:21;43115:9;43125:1;43115:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43115:12:0;43107:21;;;;;;;;;;;;;43095:7;;:11;:34::i;:::-;43085:44;;43154:34;43166:7;:21;43174:9;43184:1;43174:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43174:12:0;43166:21;;;;;;;;;;;;;43154:7;;:11;:34::i;:::-;43144:44;-1:-1:-1;42904:3:0;;;;:::i;:::-;;;;42862:338;;;-1:-1:-1;43236:7:0;;43224;;:20;;:11;:20::i;:::-;43214:7;:30;43210:61;;;43254:7;;43263;;43246:25;;;;;;42710:605;;:::o;43210:61::-;43290:7;;43299;;-1:-1:-1;42710:605:0;-1:-1:-1;42710:605:0:o;6039:312::-;6159:7;6194:12;6187:5;6179:28;;;;-1:-1:-1;;;6179:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6218:9:0;6230:5;6234:1;6230;:5;:::i;41580:492::-;41753:7;;;;41847:28;41871:3;41847:19;:7;41859:6;41847:11;:19::i;:28::-;41832:43;-1:-1:-1;41886:18:0;41907:34;41937:3;41907:25;:7;41919:12;41907:11;:25::i;:34::-;41886:55;-1:-1:-1;41952:23:0;41978:33;41886:55;41978:17;:7;41990:4;41978:11;:17::i;:::-;:21;;:33::i;:::-;41952:59;42047:4;;-1:-1:-1;42053:10:0;;-1:-1:-1;41580:492:0;;-1:-1:-1;;;;;41580:492:0:o;42080:450::-;42250:7;;;;42347:24;:7;42359:11;42347;:24::i;:::-;42329:42;-1:-1:-1;42382:12:0;42397:21;:4;42406:11;42397:8;:21::i;:::-;42382:36;-1:-1:-1;42429:23:0;42455:17;:7;42382:36;42455:11;:17::i;:::-;42491:7;;;;-1:-1:-1;42517:4:0;;-1:-1:-1;42080:450:0;;-1:-1:-1;;;;;42080:450:0:o;4464:471::-;4522:7;4767:1;4772;4767:6;4763:47;;-1:-1:-1;4797:1:0;4790:8;;4763:47;4822:9;4834:5;4838:1;4834;:5;:::i;:::-;4822:17;-1:-1:-1;4867:1:0;4858:5;4862:1;4822:17;4858:5;:::i;:::-;:10;4850:56;;;;-1:-1:-1;;;4850:56:0;;14463:2:1;4850:56:0;;;14445:21:1;14502:2;14482:18;;;14475:30;14541:34;14521:18;;;14514:62;-1:-1:-1;;;14592:18:1;;;14585:31;14633:19;;4850:56:0;14261:397:1;32333:235:0;32380:7;;:12;:34;;;;-1:-1:-1;32396:13:0;;:18;32380:34;32376:47;;;32333:235::o;32376:47::-;32453:7;;;32435:15;:25;32495:13;;;32471:21;:37;-1:-1:-1;32521:11:0;;;;32543:17;32333:235::o;38717:686::-;38868:15;38898:23;38936:12;38963:23;39001:12;39028:18;39060:19;39071:7;39060:10;:19::i;:::-;-1:-1:-1;;;;;39108:15:0;;;;;;:7;:15;;;;;;38853:226;;-1:-1:-1;38853:226:0;;-1:-1:-1;38853:226:0;;-1:-1:-1;38853:226:0;-1:-1:-1;38853:226:0;-1:-1:-1;38853:226:0;-1:-1:-1;39108:28:0;;39128:7;39108:19;:28::i;:::-;-1:-1:-1;;;;;39090:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39165:7;:15;;;;:28;;39185:7;39165:19;:28::i;:::-;-1:-1:-1;;;;;39147:15:0;;;;;;;:7;:15;;;;;;:46;;;;39225:18;;;;;;;:39;;39248:15;39225:22;:39::i;:::-;-1:-1:-1;;;;;39204:18:0;;;;;;:7;:18;;;;;:60;39275:26;39290:10;39275:14;:26::i;:::-;39312:23;39324:4;39330;39312:11;:23::i;:::-;39368:9;-1:-1:-1;;;;;39351:44:0;39360:6;-1:-1:-1;;;;;39351:44:0;;39379:15;39351:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;39351:44:0;;;;;;;;38842:561;;;;;;38717:686;;;:::o;38011:698::-;38160:15;38190:23;38228:12;38255:23;38293:12;38320:18;38352:19;38363:7;38352:10;:19::i;:::-;-1:-1:-1;;;;;38400:15:0;;;;;;:7;:15;;;;;;38145:226;;-1:-1:-1;38145:226:0;;-1:-1:-1;38145:226:0;;-1:-1:-1;38145:226:0;-1:-1:-1;38145:226:0;-1:-1:-1;38145:226:0;-1:-1:-1;38400:28:0;;38145:226;38400:19;:28::i;:::-;-1:-1:-1;;;;;38382:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38460:18;;;;;:7;:18;;;;;:39;;38483:15;38460:22;:39::i;:::-;-1:-1:-1;;;;;38439:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38531:7;:18;;;;:39;;38554:15;38531:22;:39::i;37378:625::-;37525:15;37555:23;37593:12;37620:23;37658:12;37685:18;37717:19;37728:7;37717:10;:19::i;:::-;-1:-1:-1;;;;;37765:15:0;;;;;;:7;:15;;;;;;37510:226;;-1:-1:-1;37510:226:0;;-1:-1:-1;37510:226:0;;-1:-1:-1;37510:226:0;-1:-1:-1;37510:226:0;-1:-1:-1;37510:226:0;-1:-1:-1;37765:28:0;;37510:226;37765:19;:28::i;39411:757::-;39562:15;39592:23;39630:12;39657:23;39695:12;39722:18;39754:19;39765:7;39754:10;:19::i;:::-;-1:-1:-1;;;;;39802:15:0;;;;;;:7;:15;;;;;;39547:226;;-1:-1:-1;39547:226:0;;-1:-1:-1;39547:226:0;;-1:-1:-1;39547:226:0;-1:-1:-1;39547:226:0;-1:-1:-1;39547:226:0;-1:-1:-1;39802:28:0;;39822:7;39802:19;:28::i;:::-;-1:-1:-1;;;;;39784:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39859:7;:15;;;;:28;;39879:7;39859:19;:28::i;40176:355::-;40239:19;40261:10;:8;:10::i;:::-;40239:32;-1:-1:-1;40282:18:0;40303:27;:10;40239:32;40303:14;:27::i;:::-;40382:4;40366:22;;;;:7;:22;;;;;;40282:48;;-1:-1:-1;40366:38:0;;40282:48;40366:26;:38::i;:::-;40357:4;40341:22;;;;:7;:22;;;;;;;;:63;;;;40419:11;:26;;;;;;40415:108;;;40501:4;40485:22;;;;:7;:22;;;;;;:38;;40512:10;40485:26;:38::i;:::-;40476:4;40460:22;;;;:7;:22;;;;;:63;40415:108;40228:303;;40176:355;:::o;40539:147::-;40617:7;;:17;;40629:4;40617:11;:17::i;:::-;40607:7;:27;40658:10;;:20;;40673:4;40658:14;:20::i;:::-;40645:10;:33;-1:-1:-1;;40539:147:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:180::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;-1:-1:-1;2035:23:1;;1884:180;-1:-1:-1;1884:180:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;2979:160::-;3044:20;;3100:13;;3093:21;3083:32;;3073:60;;3129:1;3126;3119:12;3073:60;2979:160;;;:::o;3144:248::-;3209:6;3217;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;3322:9;3309:23;3299:33;;3351:35;3382:2;3371:9;3367:18;3351:35;:::i;:::-;3341:45;;3144:248;;;;;:::o;3605:689::-;3697:6;3705;3713;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;3822:9;3809:23;3851:18;3892:2;3884:6;3881:14;3878:34;;;3908:1;3905;3898:12;3878:34;3946:6;3935:9;3931:22;3921:32;;3991:7;3984:4;3980:2;3976:13;3972:27;3962:55;;4013:1;4010;4003:12;3962:55;4053:2;4040:16;4079:2;4071:6;4068:14;4065:34;;;4095:1;4092;4085:12;4065:34;4150:7;4143:4;4133:6;4130:1;4126:14;4122:2;4118:23;4114:34;4111:47;4108:67;;;4171:1;4168;4161:12;4108:67;4202:4;4194:13;;;;-1:-1:-1;4226:6:1;-1:-1:-1;4251:37:1;;4267:20;;;-1:-1:-1;4251:37:1;:::i;:::-;4241:47;;3605:689;;;;;:::o;4299:315::-;4364:6;4372;4425:2;4413:9;4404:7;4400:23;4396:32;4393:52;;;4441:1;4438;4431:12;4393:52;4480:9;4467:23;4499:31;4524:5;4499:31;:::i;:::-;4549:5;-1:-1:-1;4573:35:1;4604:2;4589:18;;4573:35;:::i;4619:388::-;4687:6;4695;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4803:9;4790:23;4822:31;4847:5;4822:31;:::i;:::-;4872:5;-1:-1:-1;4929:2:1;4914:18;;4901:32;4942:33;4901:32;4942:33;:::i;:::-;4994:7;4984:17;;;4619:388;;;;;:::o;5012:180::-;5068:6;5121:2;5109:9;5100:7;5096:23;5092:32;5089:52;;;5137:1;5134;5127:12;5089:52;5160:26;5176:9;5160:26;:::i;5421:380::-;5500:1;5496:12;;;;5543;;;5564:61;;5618:4;5610:6;5606:17;5596:27;;5564:61;5671:2;5663:6;5660:14;5640:18;5637:38;5634:161;;5717:10;5712:3;5708:20;5705:1;5698:31;5752:4;5749:1;5742:15;5780:4;5777:1;5770:15;5634:161;;5421:380;;;:::o;5806:329::-;6008:2;5990:21;;;6047:1;6027:18;;;6020:29;-1:-1:-1;;;6080:2:1;6065:18;;6058:36;6126:2;6111:18;;5806:329::o;7679:127::-;7740:10;7735:3;7731:20;7728:1;7721:31;7771:4;7768:1;7761:15;7795:4;7792:1;7785:15;7811:127;7872:10;7867:3;7863:20;7860:1;7853:31;7903:4;7900:1;7893:15;7927:4;7924:1;7917:15;7943:135;7982:3;8003:17;;;8000:43;;8023:18;;:::i;:::-;-1:-1:-1;8070:1:1;8059:13;;7943:135::o;9016:128::-;9083:9;;;9104:11;;;9101:37;;;9118:18;;:::i;9149:127::-;9210:10;9205:3;9201:20;9198:1;9191:31;9241:4;9238:1;9231:15;9265:4;9262:1;9255:15;12007:125;12072:9;;;12093:10;;;12090:36;;;12106:18;;:::i;12625:251::-;12695:6;12748:2;12736:9;12727:7;12723:23;12719:32;12716:52;;;12764:1;12761;12754:12;12716:52;12796:9;12790:16;12815:31;12840:5;12815:31;:::i;12881:980::-;13143:4;13191:3;13180:9;13176:19;13222:6;13211:9;13204:25;13248:2;13286:6;13281:2;13270:9;13266:18;13259:34;13329:3;13324:2;13313:9;13309:18;13302:31;13353:6;13388;13382:13;13419:6;13411;13404:22;13457:3;13446:9;13442:19;13435:26;;13496:2;13488:6;13484:15;13470:29;;13517:1;13527:195;13541:6;13538:1;13535:13;13527:195;;;13606:13;;-1:-1:-1;;;;;13602:39:1;13590:52;;13697:15;;;;13662:12;;;;13638:1;13556:9;13527:195;;;-1:-1:-1;;;;;;;13778:32:1;;;;13773:2;13758:18;;13751:60;-1:-1:-1;;;13842:3:1;13827:19;13820:35;13739:3;12881:980;-1:-1:-1;;;12881:980:1:o;13866:217::-;13906:1;13932;13922:132;;13976:10;13971:3;13967:20;13964:1;13957:31;14011:4;14008:1;14001:15;14039:4;14036:1;14029:15;13922:132;-1:-1:-1;14068:9:1;;13866:217::o;14088:168::-;14161:9;;;14192;;14209:15;;;14203:22;;14189:37;14179:71;;14230:18;;:::i
Swarm Source
ipfs://0bd2a7a0752c7f42307cab986dce77789ae31f6e4257936828957162d860ea15
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.