ERC-20
Overview
Max Total Supply
1,000,000,000 SISU
Holders
21
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
7,125.279586839921864127 SISUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SisuToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-20 */ /** *Submitted for verification at Etherscan.io on 2022-01-20 *tg: https://t.me/sisuinu_official *twitter: https://twitter.com/sisu_inu *website: https://sisuinu.net/ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC20 { 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 ); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ 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); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; _previousOwner = address(0); } } // pragma solidity >=0.5.0; 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 setReflectionFeeTo(address) external; function setReflectionFeeToSetter(address) external; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 SisuToken is Context, IERC20, Ownable { 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) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) public blackList; string private _name = "SISU INU"; string private _symbol = "SISU"; uint8 private _decimals = 18; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectionFeeTotal; uint256 PERCENT_BP = 10000; uint256 public reflectionFee = 100; uint256 private _previousReflectionFee = reflectionFee; uint256 public txFee = 700; uint256 private _previousTxFee = txFee; uint256 public liquidityFee = 200; uint256 public _previousLiquidityFee = liquidityFee; address public marketingAddr = 0x6Af8b734A4E533C9F1701bBc49cb89907E392AD8; address public gameReward = 0x6Af8b734A4E533C9F1701bBc49cb89907E392AD8; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxTxAmount = 10000000 * 10**_decimals; uint256 public numTokensToSwap = 1000000 * 10**_decimals; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token 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[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcluded[uniswapV2Pair] = true; emit Transfer(address(0), _msgSender(), _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(_msgSender(), 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(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionFees() public view returns (uint256) { return _tReflectionFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tAmount); } function reflectionFromToken( uint256 tAmount, bool deductTransferReflectionFee ) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferReflectionFee) { (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 excludeFromReward(address account) public onlyOwner { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is already included"); 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 _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rReflectionFee, uint256 tTransferAmount, uint256 tReflectionFee, uint256 tTxFee ) = _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); _takeTxFee(tTxFee); _reflectReflectionFee(rReflectionFee, tReflectionFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setReflectionFeePercent(uint256 _reflectionFee) external onlyOwner { require(_reflectionFee <= 1000, "!max tx fee"); reflectionFee = _reflectionFee; } function setTxFeePercent(uint256 _txFee) external onlyOwner { require(_txFee <= 1000, "!max tx fee"); txFee = _txFee; } function setLiquidityFeePercent(uint256 _liquidityFee) external onlyOwner { require(_liquidityFee <= 1000, "!max tx fee"); liquidityFee = _liquidityFee; } function setMaxTxPercent(uint256 _maxTxPercent) external onlyOwner { require(_maxTxPercent <= PERCENT_BP, "!max fee"); require(_maxTxPercent >= 50, "!min percent"); maxTxAmount = _tTotal.mul(_maxTxPercent).div(PERCENT_BP); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectReflectionFee( uint256 rReflectionFee, uint256 tReflectionFee ) private { _rTotal = _rTotal.sub(rReflectionFee); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tReflectionFee, uint256 tTxFee ) = _getTValues(tAmount); ( uint256 rAmount, uint256 rTransferAmount, uint256 rReflectionFee ) = _getRValues(tAmount, tReflectionFee, tTxFee, _getRate()); return ( rAmount, rTransferAmount, rReflectionFee, tTransferAmount, tReflectionFee, tTxFee ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tReflectionFee = calculateReflectionTxFee(tAmount); uint256 tTxFee = calculateTxFee(tAmount); uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tTxFee); return (tTransferAmount, tReflectionFee, tTxFee); } function _getRValues( uint256 tAmount, uint256 tReflectionFee, uint256 tTxFee, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rReflectionFee = tReflectionFee.mul(currentRate); uint256 rTxFee = tTxFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rTxFee); return (rAmount, rTransferAmount, rReflectionFee); } 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 _takeTxFee(uint256 tTxFee) private { uint256 currentRate = _getRate(); uint256 rTxFee = tTxFee.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTxFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tTxFee); } function calculateReflectionTxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(reflectionFee).div(PERCENT_BP); } function calculateTxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(txFee + liquidityFee).div(PERCENT_BP); } function removeAllFee() private { if (reflectionFee == 0 && txFee == 0) return; _previousReflectionFee = reflectionFee; _previousTxFee = txFee; _previousLiquidityFee = liquidityFee; reflectionFee = 0; txFee = 0; liquidityFee = 0; } function restoreAllFee() private { reflectionFee = _previousReflectionFee; txFee = _previousTxFee; liquidityFee = _previousLiquidityFee; } 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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require( !blackList[from] && !blackList[to], "sender or Recipient wallet is dead." ); if (from != owner() && to != owner()) 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 + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= maxTxAmount) { contractTokenBalance = maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensToSwap; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { swapBack(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function manualSwap() external onlyOwner { uint contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToSwap; if ( overMinTokenBalance && !inSwapAndLiquify ) { swapBack(contractTokenBalance); } } function swapBack(uint256 contractTokenBalance) private lockTheSwap { uint256 liquidityTokens = contractTokenBalance * liquidityFee / (txFee + liquidityFee) / 2; uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForLiquidity = ethBalance * 100 / (txFee + liquidityFee / 2); uint256 ethForMarketing = ethBalance.sub(ethForLiquidity); addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, liquidityTokens); // withdraw to fee recipient payable(marketingAddr).transfer(ethForMarketing.mul(4).div(5)); payable(gameReward).transfer(ethForMarketing.div(5)); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true 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]) { _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 rReflectionFee, uint256 tTransferAmount, uint256 tReflectionFee, uint256 tTxFee ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTxFee(tTxFee); _reflectReflectionFee(rReflectionFee, tReflectionFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rReflectionFee, uint256 tTransferAmount, uint256 tReflectionFee, uint256 tTxFee ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTxFee(tTxFee); _reflectReflectionFee(rReflectionFee, tReflectionFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rReflectionFee, uint256 tTransferAmount, uint256 tReflectionFee, uint256 tTxFee ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTxFee(tTxFee); _reflectReflectionFee(rReflectionFee, tReflectionFee); emit Transfer(sender, recipient, tTransferAmount); } function setMarketingWallet(address _wallet) external { require(marketingAddr == msg.sender, "not setter"); marketingAddr = _wallet; } function setGameRewardWallet(address _wallet) external { require(gameReward == msg.sender, "not setter"); gameReward = _wallet; } function updateUniRouter(address _router) external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair( address(this), _uniswapV2Router.WETH() ); if (uniswapV2Pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); } // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; } function removeFromBlackList(address _addr) public onlyOwner { blackList[_addr] = false; } function addToBlackList(address _addr) public onlyOwner { blackList[_addr] = true; } function addToBlackListBlock(address[] memory _addr) public onlyOwner { for (uint8 i = 0; i < _addr.length; i++) { if (blackList[_addr[i]] == false) { blackList[_addr[i]] = true; } } } function setMinimunTokenAmountToSwap(uint _amount) external onlyOwner { numTokensToSwap = _amount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_previousLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"}],"name":"addToBlackListBlock","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferReflectionFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setGameRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinimunTokenAmountToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"}],"name":"setReflectionFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txFee","type":"uint256"}],"name":"setTxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalReflectionFees","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateUniRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260086080819052675349535520494e5560c01b60a09081526200002b91600a91906200045a565b50604080518082019091526004808252635349535560e01b60209092019182526200005991600b916200045a565b50600c805460ff191660129081179091556200007790600a62000579565b6200008790633b9aca006200063a565b600d8190556200009a90600019620006b3565b620000a8906000196200065c565b600e55612710601055606460118190556012556102bc601381905560145560c86015819055601655601780546001600160a01b0319908116736af8b734a4e533c9f1701bbc49cb89907e392ad8908117909255601880549091169091179055601a805460ff60a81b1916600160a81b179055600c546200012d9060ff16600a62000579565b6200013c90629896806200063a565b601b55600c54620001529060ff16600a62000579565b6200016190620f42406200063a565b601c553480156200017157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200021557600080fd5b505afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000250919062000500565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029957600080fd5b505afa158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000500565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031d57600080fd5b505af115801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000500565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160066000620003a06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601a549092168152600790935291208054909216179055620004033390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200044b91815260200190565b60405180910390a350620006ea565b828054620004689062000676565b90600052602060002090601f0160209004810192826200048c5760008555620004d7565b82601f10620004a757805160ff1916838001178555620004d7565b82800160010185558215620004d7579182015b82811115620004d7578251825591602001919060010190620004ba565b50620004e5929150620004e9565b5090565b5b80821115620004e55760008155600101620004ea565b60006020828403121562000512578081fd5b81516001600160a01b038116811462000529578182fd5b9392505050565b600181815b8085111562000571578160001904821115620005555762000555620006d4565b808516156200056357918102915b93841c939080029062000535565b509250929050565b60006200052960ff841683600082620005955750600162000634565b81620005a45750600062000634565b8160018114620005bd5760028114620005c857620005e8565b600191505062000634565b60ff841115620005dc57620005dc620006d4565b50506001821b62000634565b5060208310610133831016604e8410600b84101617156200060d575081810a62000634565b62000619838362000530565b8060001904821115620006305762000630620006d4565b0290505b92915050565b6000816000190483118215151615620006575762000657620006d4565b500290565b600082821015620006715762000671620006d4565b500390565b600181811c908216806200068b57607f821691505b60208210811415620006ad57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006cf57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61341b80620006fa6000396000f3fe60806040526004361061031e5760003560e01c80635d098b38116101ab578063a9059cbb116100f7578063cf82046111610095578063dd62ed3e1161006f578063dd62ed3e14610939578063ea2f0b371461097f578063f2fde38b1461099f578063f42fe226146109bf57600080fd5b8063cf820461146108e3578063d543dbeb146108f9578063dd4670641461091957600080fd5b8063bf3308de116100d1578063bf3308de14610863578063c3e40aee14610883578063c44516c0146108a3578063c49b9a80146108c357600080fd5b8063a9059cbb14610819578063adbede7214610839578063b6c523241461084e57600080fd5b80638da5cb5b1161016457806398118cb41161013e57806398118cb4146107ae578063a1dbbb44146107c4578063a457c2d7146107e4578063a69df4b51461080457600080fd5b80638da5cb5b1461075b5780638ee88c531461077957806395d89b411461079957600080fd5b80635d098b38146106a157806370a08231146106c1578063715018a6146106e157806383ad7994146106f657806388f820201461070c5780638c0b5e221461074557600080fd5b80633bd5d1731161026a57806349bd5a5e116102235780634a74bb02116101fd5780634a74bb021461061257806351bc3c851461063357806352390c02146106485780635342acb41461066857600080fd5b806349bd5a5e146105b25780634a159256146105d25780634a49ac4c146105f257600080fd5b80633bd5d173146104e25780633ff42b9214610502578063417c73a714610522578063437823ec146105425780634549b039146105625780634838d1651461058257600080fd5b806323b872dd116102d75780632d838119116102b15780632d83811914610460578063313ce567146104805780633685d419146104a257806339509351146104c257600080fd5b806323b872dd146104145780632701a4f21461043457806327c8f8351461044a57600080fd5b806301a6c43b1461032a57806306fdde0314610353578063095ea7b3146103755780631694505e146103a557806318160ddd146103dd5780631f7ede2b146103f257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b50610340601c5481565b6040519081526020015b60405180910390f35b34801561035f57600080fd5b506103686109df565b60405161034a9190613133565b34801561038157600080fd5b50610395610390366004612fb7565b610a71565b604051901515815260200161034a565b3480156103b157600080fd5b506019546103c5906001600160a01b031681565b6040516001600160a01b03909116815260200161034a565b3480156103e957600080fd5b50600d54610340565b3480156103fe57600080fd5b5061041261040d3660046130c3565b610a88565b005b34801561042057600080fd5b5061039561042f366004612f77565b610ae2565b34801561044057600080fd5b5061034060165481565b34801561045657600080fd5b506103c561dead81565b34801561046c57600080fd5b5061034061047b3660046130c3565b610b4b565b34801561048c57600080fd5b50600c5460405160ff909116815260200161034a565b3480156104ae57600080fd5b506104126104bd366004612f07565b610bcf565b3480156104ce57600080fd5b506103956104dd366004612fb7565b610dbe565b3480156104ee57600080fd5b506104126104fd3660046130c3565b610df4565b34801561050e57600080fd5b506017546103c5906001600160a01b031681565b34801561052e57600080fd5b5061041261053d366004612f07565b610ede565b34801561054e57600080fd5b5061041261055d366004612f07565b610f2c565b34801561056e57600080fd5b5061034061057d3660046130db565b610f7a565b34801561058e57600080fd5b5061039561059d366004612f07565b60096020526000908152604090205460ff1681565b3480156105be57600080fd5b50601a546103c5906001600160a01b031681565b3480156105de57600080fd5b506104126105ed3660046130c3565b611007565b3480156105fe57600080fd5b5061041261060d366004612f07565b611058565b34801561061e57600080fd5b50601a5461039590600160a81b900460ff1681565b34801561063f57600080fd5b506104126110a3565b34801561065457600080fd5b50610412610663366004612f07565b611107565b34801561067457600080fd5b50610395610683366004612f07565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ad57600080fd5b506104126106bc366004612f07565b61125a565b3480156106cd57600080fd5b506103406106dc366004612f07565b6112c3565b3480156106ed57600080fd5b50610412611322565b34801561070257600080fd5b5061034060115481565b34801561071857600080fd5b50610395610727366004612f07565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561075157600080fd5b50610340601b5481565b34801561076757600080fd5b506000546001600160a01b03166103c5565b34801561078557600080fd5b506104126107943660046130c3565b611384565b3480156107a557600080fd5b506103686113d5565b3480156107ba57600080fd5b5061034060155481565b3480156107d057600080fd5b506104126107df366004612f07565b6113e4565b3480156107f057600080fd5b506103956107ff366004612fb7565b61144d565b34801561081057600080fd5b5061041261149c565b34801561082557600080fd5b50610395610834366004612fb7565b6115a5565b34801561084557600080fd5b50600f54610340565b34801561085a57600080fd5b50600254610340565b34801561086f57600080fd5b506018546103c5906001600160a01b031681565b34801561088f57600080fd5b5061041261089e366004612fe2565b6115b2565b3480156108af57600080fd5b506104126108be366004612f07565b6116b8565b3480156108cf57600080fd5b506104126108de3660046130a9565b611a2e565b3480156108ef57600080fd5b5061034060135481565b34801561090557600080fd5b506104126109143660046130c3565b611ab0565b34801561092557600080fd5b506104126109343660046130c3565b611b7e565b34801561094557600080fd5b50610340610954366004612f3f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561098b57600080fd5b5061041261099a366004612f07565b611c03565b3480156109ab57600080fd5b506104126109ba366004612f07565b611c4e565b3480156109cb57600080fd5b506104126109da3660046130c3565b611d26565b6060600a80546109ee906132be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a906132be565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7e338484611d55565b5060015b92915050565b6000546001600160a01b03163314610abb5760405162461bcd60e51b8152600401610ab290613186565b60405180910390fd5b6103e8811115610add5760405162461bcd60e51b8152600401610ab2906131bb565b601155565b6000610aef848484611e79565b610b418433610b3c85604051806060016040528060288152602001613379602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906121a4565b611d55565b5060019392505050565b6000600e54821115610bb25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ab2565b6000610bbc6121de565b9050610bc88382612201565b9392505050565b6000546001600160a01b03163314610bf95760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03811660009081526007602052604090205460ff16610c615760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610ab2565b60005b600854811015610dba57816001600160a01b031660088281548110610c9957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610da85760088054610cc4906001906132a7565b81548110610ce257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d1c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8257634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610db2816132f9565b915050610c64565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a7e918590610b3c9086612243565b3360008181526007602052604090205460ff1615610e695760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ab2565b6000610e74836122a2565b505050506001600160a01b038416600090815260036020526040902054919250610ea0919050826122f1565b6001600160a01b038316600090815260036020526040902055600e54610ec690826122f1565b600e55600f54610ed69084612243565b600f55505050565b6000546001600160a01b03163314610f085760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610f565760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600d54831115610fce5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ab2565b81610fed576000610fde846122a2565b50939550610a82945050505050565b6000610ff8846122a2565b50929550610a82945050505050565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610ab290613186565b6103e88111156110535760405162461bcd60e51b8152600401610ab2906131bb565b601355565b6000546001600160a01b031633146110825760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146110cd5760405162461bcd60e51b8152600401610ab290613186565b60006110d8306112c3565b601c54909150811080159081906110f95750601a54600160a01b900460ff16155b15610dba57610dba82612333565b6000546001600160a01b031633146111315760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03811660009081526007602052604090205460ff161561119a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ab2565b6001600160a01b038116600090815260036020526040902054156111f4576001600160a01b0381166000908152600360205260409020546111da90610b4b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6017546001600160a01b031633146112a15760405162461bcd60e51b815260206004820152600a6024820152693737ba1039b2ba3a32b960b11b6044820152606401610ab2565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561130057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a8290610b4b565b6000546001600160a01b0316331461134c5760405162461bcd60e51b8152600401610ab290613186565b600080546040516001600160a01b03909116906000805160206133a1833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b8152600401610ab290613186565b6103e88111156113d05760405162461bcd60e51b8152600401610ab2906131bb565b601555565b6060600b80546109ee906132be565b6018546001600160a01b0316331461142b5760405162461bcd60e51b815260206004820152600a6024820152693737ba1039b2ba3a32b960b11b6044820152606401610ab2565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a7e3384610b3c856040518060600160405280602581526020016133c1602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906121a4565b6001546001600160a01b031633146115025760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ab2565b60025442116115535760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ab2565b600154600080546040516001600160a01b0393841693909116916000805160206133a183398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610a7e338484611e79565b6000546001600160a01b031633146115dc5760405162461bcd60e51b8152600401610ab290613186565b60005b81518160ff161015610dba5760096000838360ff168151811061161257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff166116a657600160096000848460ff168151811061166657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806116b081613314565b9150506115df565b6000546001600160a01b031633146116e25760405162461bcd60e51b8152600401610ab290613186565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117589190612f23565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117a057600080fd5b505afa1580156117b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d89190612f23565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190612f23565b601a80546001600160a01b0319166001600160a01b03929092169182179055611a0b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b257600080fd5b505afa1580156118c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ea9190612f23565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561193257600080fd5b505afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a9190612f23565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ea9190612f23565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611a585760405162461bcd60e51b8152600401610ab290613186565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aa590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ada5760405162461bcd60e51b8152600401610ab290613186565b601054811115611b175760405162461bcd60e51b8152602060048201526008602482015267216d61782066656560c01b6044820152606401610ab2565b6032811015611b575760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b881c195c98d95b9d60a21b6044820152606401610ab2565b611b78601054611b7283600d546124d490919063ffffffff16565b90612201565b601b5550565b6000546001600160a01b03163314611ba85760405162461bcd60e51b8152600401610ab290613186565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611bd78142613250565b600255600080546040516001600160a01b03909116906000805160206133a1833981519152908390a350565b6000546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c785760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b038116611cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab2565b600080546040516001600160a01b03808516939216916000805160206133a183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610ab290613186565b601c55565b6001600160a01b038316611db75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab2565b6001600160a01b038216611e185760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ab2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611edd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ab2565b6001600160a01b038216611f3f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ab2565b60008111611fa15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ab2565b6001600160a01b03831660009081526009602052604090205460ff16158015611fe357506001600160a01b03821660009081526009602052604090205460ff16155b61203b5760405162461bcd60e51b815260206004820152602360248201527f73656e646572206f7220526563697069656e742077616c6c657420697320646560448201526230b21760e91b6064820152608401610ab2565b6000546001600160a01b0384811691161480159061206757506000546001600160a01b03838116911614155b156120cf57601b548111156120cf5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ab2565b60006120da306112c3565b9050601b5481106120ea5750601b545b601c54811080159081906121085750601a54600160a01b900460ff16155b80156121225750601a546001600160a01b03868116911614155b80156121375750601a54600160a81b900460ff165b156121455761214582612333565b6001600160a01b03851660009081526006602052604090205460019060ff168061218757506001600160a01b03851660009081526006602052604090205460ff165b15612190575060005b61219c86868684612553565b505050505050565b600081848411156121c85760405162461bcd60e51b8152600401610ab29190613133565b5060006121d584866132a7565b95945050505050565b60008060006121eb612684565b90925090506121fa8282612201565b9250505090565b6000610bc883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061283e565b6000806122508385613250565b905083811015610bc85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ab2565b60008060008060008060008060006122b98a61286c565b92509250925060008060006122d78d86866122d26121de565b6128ae565b919f909e50909c50959a5093985091965092945050505050565b6000610bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121a4565b601a805460ff60a01b1916600160a01b17905560155460135460009160029161235c9190613250565b6015546123699085613288565b6123739190613268565b61237d9190613268565b9050600061238b83836122f1565b905047612397826128fe565b60006123a347836122f1565b9050600060026015546123b69190613268565b6013546123c39190613250565b6123ce836064613288565b6123d89190613268565b905060006123e683836122f1565b90506123f28683612a7b565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a16017546001600160a01b03166108fc6124526005611b728560046124d4565b6040518115909202916000818181858888f1935050505015801561247a573d6000803e3d6000fd5b506018546001600160a01b03166108fc612495836005612201565b6040518115909202916000818181858888f193505050501580156124bd573d6000803e3d6000fd5b5050601a805460ff60a01b19169055505050505050565b6000826124e357506000610a82565b60006124ef8385613288565b9050826124fc8583613268565b14610bc85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab2565b8061256057612560612b3c565b6001600160a01b03841660009081526007602052604090205460ff1680156125a157506001600160a01b03831660009081526007602052604090205460ff16155b156125b6576125b1848484612b75565b612662565b6001600160a01b03841660009081526007602052604090205460ff161580156125f757506001600160a01b03831660009081526007602052604090205460ff165b15612607576125b1848484612c9b565b6001600160a01b03841660009081526007602052604090205460ff16801561264757506001600160a01b03831660009081526007602052604090205460ff165b15612657576125b1848484612d44565b612662848484612db7565b8061267e5761267e601254601155601454601355601654601555565b50505050565b600e54600d546000918291825b60085481101561280e578260036000600884815481106126c157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061273a575081600460006008848154811061271357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561275057600e54600d54945094505050509091565b6127a4600360006008848154811061277857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122f1565b92506127fa60046000600884815481106127ce57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122f1565b915080612806816132f9565b915050612691565b50600d54600e5461281e91612201565b82101561283557600e54600d549350935050509091565b90939092509050565b6000818361285f5760405162461bcd60e51b8152600401610ab29190613133565b5060006121d58486613268565b60008060008061287b85612dfb565b9050600061288886612e18565b905060006128a08261289a89866122f1565b906122f1565b979296509094509092505050565b60008080806128bd88866124d4565b905060006128cb88876124d4565b905060006128d988886124d4565b905060006128eb8261289a86866122f1565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561299557600080fd5b505afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd9190612f23565b816001815181106129ee57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954612a149130911684611d55565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a4d9085906000908690309042906004016131e0565b600060405180830381600087803b158015612a6757600080fd5b505af115801561219c573d6000803e3d6000fd5b601954612a939030906001600160a01b031684611d55565b60195460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b359190613106565b5050505050565b601154158015612b4c5750601354155b15612b5357565b6011805460125560138054601455601580546016556000928390559082905555565b600080600080600080612b87876122a2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bb990886122f1565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612be890876122f1565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612c179086612243565b6001600160a01b038916600090815260036020526040902055612c3981612e3a565b612c438483612ec3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c8891815260200190565b60405180910390a3505050505050505050565b600080600080600080612cad876122a2565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612cdf90876122f1565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612d159084612243565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612c179086612243565b600080600080600080612d56876122a2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612d8890886122f1565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cdf90876122f1565b600080600080600080612dc9876122a2565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612be890876122f1565b6000610a82601054611b72601154856124d490919063ffffffff16565b6000610a82601054611b72601554601354612e339190613250565b85906124d4565b6000612e446121de565b90506000612e5283836124d4565b30600090815260036020526040902054909150612e6f9082612243565b3060009081526003602090815260408083209390935560079052205460ff1615612ebe5730600090815260046020526040902054612ead9084612243565b306000908152600460205260409020555b505050565b600e54612ed090836122f1565b600e55600f54612ee09082612243565b600f555050565b8035612ef281613360565b919050565b80358015158114612ef257600080fd5b600060208284031215612f18578081fd5b8135610bc881613360565b600060208284031215612f34578081fd5b8151610bc881613360565b60008060408385031215612f51578081fd5b8235612f5c81613360565b91506020830135612f6c81613360565b809150509250929050565b600080600060608486031215612f8b578081fd5b8335612f9681613360565b92506020840135612fa681613360565b929592945050506040919091013590565b60008060408385031215612fc9578182fd5b8235612fd481613360565b946020939093013593505050565b60006020808385031215612ff4578182fd5b823567ffffffffffffffff8082111561300b578384fd5b818501915085601f83011261301e578384fd5b8135818111156130305761303061334a565b8060051b604051601f19603f830116810181811085821117156130555761305561334a565b604052828152858101935084860182860187018a1015613073578788fd5b8795505b8386101561309c5761308881612ee7565b855260019590950194938601938601613077565b5098975050505050505050565b6000602082840312156130ba578081fd5b610bc882612ef7565b6000602082840312156130d4578081fd5b5035919050565b600080604083850312156130ed578182fd5b823591506130fd60208401612ef7565b90509250929050565b60008060006060848603121561311a578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561315f57858101830151858201604001528201613143565b818111156131705783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a216d61782074782066656560a81b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561322f5784516001600160a01b03168352938301939183019160010161320a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561326357613263613334565b500190565b60008261328357634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156132a2576132a2613334565b500290565b6000828210156132b9576132b9613334565b500390565b600181811c908216806132d257607f821691505b602082108114156132f357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330d5761330d613334565b5060010190565b600060ff821660ff81141561332b5761332b613334565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461337557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b2ad6b619dbf1c959f60cac1756b2debc90fede259a6db1ce1a556930fa4ceb664736f6c63430008040033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80635d098b38116101ab578063a9059cbb116100f7578063cf82046111610095578063dd62ed3e1161006f578063dd62ed3e14610939578063ea2f0b371461097f578063f2fde38b1461099f578063f42fe226146109bf57600080fd5b8063cf820461146108e3578063d543dbeb146108f9578063dd4670641461091957600080fd5b8063bf3308de116100d1578063bf3308de14610863578063c3e40aee14610883578063c44516c0146108a3578063c49b9a80146108c357600080fd5b8063a9059cbb14610819578063adbede7214610839578063b6c523241461084e57600080fd5b80638da5cb5b1161016457806398118cb41161013e57806398118cb4146107ae578063a1dbbb44146107c4578063a457c2d7146107e4578063a69df4b51461080457600080fd5b80638da5cb5b1461075b5780638ee88c531461077957806395d89b411461079957600080fd5b80635d098b38146106a157806370a08231146106c1578063715018a6146106e157806383ad7994146106f657806388f820201461070c5780638c0b5e221461074557600080fd5b80633bd5d1731161026a57806349bd5a5e116102235780634a74bb02116101fd5780634a74bb021461061257806351bc3c851461063357806352390c02146106485780635342acb41461066857600080fd5b806349bd5a5e146105b25780634a159256146105d25780634a49ac4c146105f257600080fd5b80633bd5d173146104e25780633ff42b9214610502578063417c73a714610522578063437823ec146105425780634549b039146105625780634838d1651461058257600080fd5b806323b872dd116102d75780632d838119116102b15780632d83811914610460578063313ce567146104805780633685d419146104a257806339509351146104c257600080fd5b806323b872dd146104145780632701a4f21461043457806327c8f8351461044a57600080fd5b806301a6c43b1461032a57806306fdde0314610353578063095ea7b3146103755780631694505e146103a557806318160ddd146103dd5780631f7ede2b146103f257600080fd5b3661032557005b600080fd5b34801561033657600080fd5b50610340601c5481565b6040519081526020015b60405180910390f35b34801561035f57600080fd5b506103686109df565b60405161034a9190613133565b34801561038157600080fd5b50610395610390366004612fb7565b610a71565b604051901515815260200161034a565b3480156103b157600080fd5b506019546103c5906001600160a01b031681565b6040516001600160a01b03909116815260200161034a565b3480156103e957600080fd5b50600d54610340565b3480156103fe57600080fd5b5061041261040d3660046130c3565b610a88565b005b34801561042057600080fd5b5061039561042f366004612f77565b610ae2565b34801561044057600080fd5b5061034060165481565b34801561045657600080fd5b506103c561dead81565b34801561046c57600080fd5b5061034061047b3660046130c3565b610b4b565b34801561048c57600080fd5b50600c5460405160ff909116815260200161034a565b3480156104ae57600080fd5b506104126104bd366004612f07565b610bcf565b3480156104ce57600080fd5b506103956104dd366004612fb7565b610dbe565b3480156104ee57600080fd5b506104126104fd3660046130c3565b610df4565b34801561050e57600080fd5b506017546103c5906001600160a01b031681565b34801561052e57600080fd5b5061041261053d366004612f07565b610ede565b34801561054e57600080fd5b5061041261055d366004612f07565b610f2c565b34801561056e57600080fd5b5061034061057d3660046130db565b610f7a565b34801561058e57600080fd5b5061039561059d366004612f07565b60096020526000908152604090205460ff1681565b3480156105be57600080fd5b50601a546103c5906001600160a01b031681565b3480156105de57600080fd5b506104126105ed3660046130c3565b611007565b3480156105fe57600080fd5b5061041261060d366004612f07565b611058565b34801561061e57600080fd5b50601a5461039590600160a81b900460ff1681565b34801561063f57600080fd5b506104126110a3565b34801561065457600080fd5b50610412610663366004612f07565b611107565b34801561067457600080fd5b50610395610683366004612f07565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ad57600080fd5b506104126106bc366004612f07565b61125a565b3480156106cd57600080fd5b506103406106dc366004612f07565b6112c3565b3480156106ed57600080fd5b50610412611322565b34801561070257600080fd5b5061034060115481565b34801561071857600080fd5b50610395610727366004612f07565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561075157600080fd5b50610340601b5481565b34801561076757600080fd5b506000546001600160a01b03166103c5565b34801561078557600080fd5b506104126107943660046130c3565b611384565b3480156107a557600080fd5b506103686113d5565b3480156107ba57600080fd5b5061034060155481565b3480156107d057600080fd5b506104126107df366004612f07565b6113e4565b3480156107f057600080fd5b506103956107ff366004612fb7565b61144d565b34801561081057600080fd5b5061041261149c565b34801561082557600080fd5b50610395610834366004612fb7565b6115a5565b34801561084557600080fd5b50600f54610340565b34801561085a57600080fd5b50600254610340565b34801561086f57600080fd5b506018546103c5906001600160a01b031681565b34801561088f57600080fd5b5061041261089e366004612fe2565b6115b2565b3480156108af57600080fd5b506104126108be366004612f07565b6116b8565b3480156108cf57600080fd5b506104126108de3660046130a9565b611a2e565b3480156108ef57600080fd5b5061034060135481565b34801561090557600080fd5b506104126109143660046130c3565b611ab0565b34801561092557600080fd5b506104126109343660046130c3565b611b7e565b34801561094557600080fd5b50610340610954366004612f3f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561098b57600080fd5b5061041261099a366004612f07565b611c03565b3480156109ab57600080fd5b506104126109ba366004612f07565b611c4e565b3480156109cb57600080fd5b506104126109da3660046130c3565b611d26565b6060600a80546109ee906132be565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a906132be565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7e338484611d55565b5060015b92915050565b6000546001600160a01b03163314610abb5760405162461bcd60e51b8152600401610ab290613186565b60405180910390fd5b6103e8811115610add5760405162461bcd60e51b8152600401610ab2906131bb565b601155565b6000610aef848484611e79565b610b418433610b3c85604051806060016040528060288152602001613379602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906121a4565b611d55565b5060019392505050565b6000600e54821115610bb25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ab2565b6000610bbc6121de565b9050610bc88382612201565b9392505050565b6000546001600160a01b03163314610bf95760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03811660009081526007602052604090205460ff16610c615760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610ab2565b60005b600854811015610dba57816001600160a01b031660088281548110610c9957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610da85760088054610cc4906001906132a7565b81548110610ce257634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610d1c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8257634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610db2816132f9565b915050610c64565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a7e918590610b3c9086612243565b3360008181526007602052604090205460ff1615610e695760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ab2565b6000610e74836122a2565b505050506001600160a01b038416600090815260036020526040902054919250610ea0919050826122f1565b6001600160a01b038316600090815260036020526040902055600e54610ec690826122f1565b600e55600f54610ed69084612243565b600f55505050565b6000546001600160a01b03163314610f085760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610f565760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600d54831115610fce5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ab2565b81610fed576000610fde846122a2565b50939550610a82945050505050565b6000610ff8846122a2565b50929550610a82945050505050565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610ab290613186565b6103e88111156110535760405162461bcd60e51b8152600401610ab2906131bb565b601355565b6000546001600160a01b031633146110825760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146110cd5760405162461bcd60e51b8152600401610ab290613186565b60006110d8306112c3565b601c54909150811080159081906110f95750601a54600160a01b900460ff16155b15610dba57610dba82612333565b6000546001600160a01b031633146111315760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03811660009081526007602052604090205460ff161561119a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ab2565b6001600160a01b038116600090815260036020526040902054156111f4576001600160a01b0381166000908152600360205260409020546111da90610b4b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6017546001600160a01b031633146112a15760405162461bcd60e51b815260206004820152600a6024820152693737ba1039b2ba3a32b960b11b6044820152606401610ab2565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561130057506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a8290610b4b565b6000546001600160a01b0316331461134c5760405162461bcd60e51b8152600401610ab290613186565b600080546040516001600160a01b03909116906000805160206133a1833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b8152600401610ab290613186565b6103e88111156113d05760405162461bcd60e51b8152600401610ab2906131bb565b601555565b6060600b80546109ee906132be565b6018546001600160a01b0316331461142b5760405162461bcd60e51b815260206004820152600a6024820152693737ba1039b2ba3a32b960b11b6044820152606401610ab2565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a7e3384610b3c856040518060600160405280602581526020016133c1602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906121a4565b6001546001600160a01b031633146115025760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ab2565b60025442116115535760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ab2565b600154600080546040516001600160a01b0393841693909116916000805160206133a183398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610a7e338484611e79565b6000546001600160a01b031633146115dc5760405162461bcd60e51b8152600401610ab290613186565b60005b81518160ff161015610dba5760096000838360ff168151811061161257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff166116a657600160096000848460ff168151811061166657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806116b081613314565b9150506115df565b6000546001600160a01b031633146116e25760405162461bcd60e51b8152600401610ab290613186565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117589190612f23565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117a057600080fd5b505afa1580156117b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d89190612f23565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190612f23565b601a80546001600160a01b0319166001600160a01b03929092169182179055611a0b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b257600080fd5b505afa1580156118c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ea9190612f23565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561193257600080fd5b505afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a9190612f23565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ea9190612f23565b601a80546001600160a01b0319166001600160a01b03929092169190911790555b601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611a585760405162461bcd60e51b8152600401610ab290613186565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aa590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ada5760405162461bcd60e51b8152600401610ab290613186565b601054811115611b175760405162461bcd60e51b8152602060048201526008602482015267216d61782066656560c01b6044820152606401610ab2565b6032811015611b575760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b881c195c98d95b9d60a21b6044820152606401610ab2565b611b78601054611b7283600d546124d490919063ffffffff16565b90612201565b601b5550565b6000546001600160a01b03163314611ba85760405162461bcd60e51b8152600401610ab290613186565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611bd78142613250565b600255600080546040516001600160a01b03909116906000805160206133a1833981519152908390a350565b6000546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c785760405162461bcd60e51b8152600401610ab290613186565b6001600160a01b038116611cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab2565b600080546040516001600160a01b03808516939216916000805160206133a183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d505760405162461bcd60e51b8152600401610ab290613186565b601c55565b6001600160a01b038316611db75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab2565b6001600160a01b038216611e185760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ab2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611edd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ab2565b6001600160a01b038216611f3f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ab2565b60008111611fa15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ab2565b6001600160a01b03831660009081526009602052604090205460ff16158015611fe357506001600160a01b03821660009081526009602052604090205460ff16155b61203b5760405162461bcd60e51b815260206004820152602360248201527f73656e646572206f7220526563697069656e742077616c6c657420697320646560448201526230b21760e91b6064820152608401610ab2565b6000546001600160a01b0384811691161480159061206757506000546001600160a01b03838116911614155b156120cf57601b548111156120cf5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ab2565b60006120da306112c3565b9050601b5481106120ea5750601b545b601c54811080159081906121085750601a54600160a01b900460ff16155b80156121225750601a546001600160a01b03868116911614155b80156121375750601a54600160a81b900460ff165b156121455761214582612333565b6001600160a01b03851660009081526006602052604090205460019060ff168061218757506001600160a01b03851660009081526006602052604090205460ff165b15612190575060005b61219c86868684612553565b505050505050565b600081848411156121c85760405162461bcd60e51b8152600401610ab29190613133565b5060006121d584866132a7565b95945050505050565b60008060006121eb612684565b90925090506121fa8282612201565b9250505090565b6000610bc883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061283e565b6000806122508385613250565b905083811015610bc85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ab2565b60008060008060008060008060006122b98a61286c565b92509250925060008060006122d78d86866122d26121de565b6128ae565b919f909e50909c50959a5093985091965092945050505050565b6000610bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121a4565b601a805460ff60a01b1916600160a01b17905560155460135460009160029161235c9190613250565b6015546123699085613288565b6123739190613268565b61237d9190613268565b9050600061238b83836122f1565b905047612397826128fe565b60006123a347836122f1565b9050600060026015546123b69190613268565b6013546123c39190613250565b6123ce836064613288565b6123d89190613268565b905060006123e683836122f1565b90506123f28683612a7b565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a16017546001600160a01b03166108fc6124526005611b728560046124d4565b6040518115909202916000818181858888f1935050505015801561247a573d6000803e3d6000fd5b506018546001600160a01b03166108fc612495836005612201565b6040518115909202916000818181858888f193505050501580156124bd573d6000803e3d6000fd5b5050601a805460ff60a01b19169055505050505050565b6000826124e357506000610a82565b60006124ef8385613288565b9050826124fc8583613268565b14610bc85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab2565b8061256057612560612b3c565b6001600160a01b03841660009081526007602052604090205460ff1680156125a157506001600160a01b03831660009081526007602052604090205460ff16155b156125b6576125b1848484612b75565b612662565b6001600160a01b03841660009081526007602052604090205460ff161580156125f757506001600160a01b03831660009081526007602052604090205460ff165b15612607576125b1848484612c9b565b6001600160a01b03841660009081526007602052604090205460ff16801561264757506001600160a01b03831660009081526007602052604090205460ff165b15612657576125b1848484612d44565b612662848484612db7565b8061267e5761267e601254601155601454601355601654601555565b50505050565b600e54600d546000918291825b60085481101561280e578260036000600884815481106126c157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061273a575081600460006008848154811061271357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561275057600e54600d54945094505050509091565b6127a4600360006008848154811061277857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122f1565b92506127fa60046000600884815481106127ce57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122f1565b915080612806816132f9565b915050612691565b50600d54600e5461281e91612201565b82101561283557600e54600d549350935050509091565b90939092509050565b6000818361285f5760405162461bcd60e51b8152600401610ab29190613133565b5060006121d58486613268565b60008060008061287b85612dfb565b9050600061288886612e18565b905060006128a08261289a89866122f1565b906122f1565b979296509094509092505050565b60008080806128bd88866124d4565b905060006128cb88876124d4565b905060006128d988886124d4565b905060006128eb8261289a86866122f1565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561299557600080fd5b505afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd9190612f23565b816001815181106129ee57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601954612a149130911684611d55565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612a4d9085906000908690309042906004016131e0565b600060405180830381600087803b158015612a6757600080fd5b505af115801561219c573d6000803e3d6000fd5b601954612a939030906001600160a01b031684611d55565b60195460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b359190613106565b5050505050565b601154158015612b4c5750601354155b15612b5357565b6011805460125560138054601455601580546016556000928390559082905555565b600080600080600080612b87876122a2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bb990886122f1565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612be890876122f1565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612c179086612243565b6001600160a01b038916600090815260036020526040902055612c3981612e3a565b612c438483612ec3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c8891815260200190565b60405180910390a3505050505050505050565b600080600080600080612cad876122a2565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612cdf90876122f1565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612d159084612243565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612c179086612243565b600080600080600080612d56876122a2565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612d8890886122f1565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612cdf90876122f1565b600080600080600080612dc9876122a2565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612be890876122f1565b6000610a82601054611b72601154856124d490919063ffffffff16565b6000610a82601054611b72601554601354612e339190613250565b85906124d4565b6000612e446121de565b90506000612e5283836124d4565b30600090815260036020526040902054909150612e6f9082612243565b3060009081526003602090815260408083209390935560079052205460ff1615612ebe5730600090815260046020526040902054612ead9084612243565b306000908152600460205260409020555b505050565b600e54612ed090836122f1565b600e55600f54612ee09082612243565b600f555050565b8035612ef281613360565b919050565b80358015158114612ef257600080fd5b600060208284031215612f18578081fd5b8135610bc881613360565b600060208284031215612f34578081fd5b8151610bc881613360565b60008060408385031215612f51578081fd5b8235612f5c81613360565b91506020830135612f6c81613360565b809150509250929050565b600080600060608486031215612f8b578081fd5b8335612f9681613360565b92506020840135612fa681613360565b929592945050506040919091013590565b60008060408385031215612fc9578182fd5b8235612fd481613360565b946020939093013593505050565b60006020808385031215612ff4578182fd5b823567ffffffffffffffff8082111561300b578384fd5b818501915085601f83011261301e578384fd5b8135818111156130305761303061334a565b8060051b604051601f19603f830116810181811085821117156130555761305561334a565b604052828152858101935084860182860187018a1015613073578788fd5b8795505b8386101561309c5761308881612ee7565b855260019590950194938601938601613077565b5098975050505050505050565b6000602082840312156130ba578081fd5b610bc882612ef7565b6000602082840312156130d4578081fd5b5035919050565b600080604083850312156130ed578182fd5b823591506130fd60208401612ef7565b90509250929050565b60008060006060848603121561311a578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561315f57858101830151858201604001528201613143565b818111156131705783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a216d61782074782066656560a81b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561322f5784516001600160a01b03168352938301939183019160010161320a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561326357613263613334565b500190565b60008261328357634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156132a2576132a2613334565b500290565b6000828210156132b9576132b9613334565b500390565b600181811c908216806132d257607f821691505b602082108114156132f357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561330d5761330d613334565b5060010190565b600060ff821660ff81141561332b5761332b613334565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461337557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b2ad6b619dbf1c959f60cac1756b2debc90fede259a6db1ce1a556930fa4ceb664736f6c63430008040033
Deployed Bytecode Sourcemap
27970:22870:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:56;;;;;;;;;;;;;;;;;;;14899:25:1;;;14887:2;14872:18;29543:56:0;;;;;;;;30705:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31690:193::-;;;;;;;;;;-1:-1:-1;31690:193:0;;;;;:::i;:::-;;:::i;:::-;;;5500:14:1;;5493:22;5475:41;;5463:2;5448:18;31690:193:0;5430:92:1;29261:41:0;;;;;;;;;;-1:-1:-1;29261:41:0;;;;-1:-1:-1;;;;;29261:41:0;;;;;;-1:-1:-1;;;;;4370:32:1;;;4352:51;;4340:2;4325:18;29261:41:0;4307:102:1;30982:95:0;;;;;;;;;;-1:-1:-1;31062:7:0;;30982:95;;36560:182;;;;;;;;;;-1:-1:-1;36560:182:0;;;;;:::i;:::-;;:::i;:::-;;31891:446;;;;;;;;;;-1:-1:-1;31891:446:0;;;;;:::i;:::-;;:::i;29042:51::-;;;;;;;;;;;;;;;;29344:53;;;;;;;;;;;;29390:6;29344:53;;34251:322;;;;;;;;;;-1:-1:-1;34251:322:0;;;;;:::i;:::-;;:::i;30891:83::-;;;;;;;;;;-1:-1:-1;30957:9:0;;30891:83;;30957:9;;;;16389:36:1;;16377:2;16362:18;30891:83:0;16344:87:1;35035:477:0;;;;;;;;;;-1:-1:-1;35035:477:0;;;;;:::i;:::-;;:::i;32345:300::-;;;;;;;;;;-1:-1:-1;32345:300:0;;;;;:::i;:::-;;:::i;33304:439::-;;;;;;;;;;-1:-1:-1;33304:439:0;;;;;:::i;:::-;;:::i;29102:73::-;;;;;;;;;;-1:-1:-1;29102:73:0;;;;-1:-1:-1;;;;;29102:73:0;;;50371:98;;;;;;;;;;-1:-1:-1;50371:98:0;;;;;:::i;:::-;;:::i;36323:111::-;;;;;;;;;;-1:-1:-1;36323:111:0;;;;;:::i;:::-;;:::i;33751:492::-;;;;;;;;;;-1:-1:-1;33751:492:0;;;;;:::i;:::-;;:::i;28411:41::-;;;;;;;;;;-1:-1:-1;28411:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29309:28;;;;;;;;;;-1:-1:-1;29309:28:0;;;;-1:-1:-1;;;;;29309:28:0;;;36750:142;;;;;;;;;;-1:-1:-1;36750:142:0;;;;;:::i;:::-;;:::i;50259:104::-;;;;;;;;;;-1:-1:-1;50259:104:0;;;;;:::i;:::-;;:::i;29434:40::-;;;;;;;;;;-1:-1:-1;29434:40:0;;;;-1:-1:-1;;;29434:40:0;;;;;;43997:352;;;;;;;;;;;;;:::i;34581:446::-;;;;;;;;;;-1:-1:-1;34581:446:0;;;;;:::i;:::-;;:::i;41640:124::-;;;;;;;;;;-1:-1:-1;41640:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;41729:27:0;41705:4;41729:27;;;:18;:27;;;;;;;;;41640:124;49331:157;;;;;;;;;;-1:-1:-1;49331:157:0;;;;;:::i;:::-;;:::i;31085:198::-;;;;;;;;;;-1:-1:-1;31085:198:0;;;;;:::i;:::-;;:::i;17042:148::-;;;;;;;;;;;;;:::i;28822:34::-;;;;;;;;;;;;;;;;33061:120;;;;;;;;;;-1:-1:-1;33061:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;33153:20:0;33129:4;33153:20;;;:11;:20;;;;;;;;;33061:120;29483:53;;;;;;;;;;;;;;;;16400:79;;;;;;;;;;-1:-1:-1;16438:7:0;16465:6;-1:-1:-1;;;;;16465:6:0;16400:79;;36900:177;;;;;;;;;;-1:-1:-1;36900:177:0;;;;;:::i;:::-;;:::i;30796:87::-;;;;;;;;;;;;;:::i;29002:33::-;;;;;;;;;;;;;;;;49496:152;;;;;;;;;;-1:-1:-1;49496:152:0;;;;;:::i;:::-;;:::i;32653:400::-;;;;;;;;;;-1:-1:-1;32653:400:0;;;;;:::i;:::-;;:::i;18097:379::-;;;;;;;;;;;;;:::i;31291:199::-;;;;;;;;;;-1:-1:-1;31291:199:0;;;;;:::i;:::-;;:::i;33189:107::-;;;;;;;;;;-1:-1:-1;33268:20:0;;33189:107;;17634:89;;;;;;;;;;-1:-1:-1;17706:9:0;;17634:89;;29182:70;;;;;;;;;;-1:-1:-1;29182:70:0;;;;-1:-1:-1;;;;;29182:70:0;;;50477:250;;;;;;;;;;-1:-1:-1;50477:250:0;;;;;:::i;:::-;;:::i;49656:598::-;;;;;;;;;;-1:-1:-1;49656:598:0;;;;;:::i;:::-;;:::i;37349:171::-;;;;;;;;;;-1:-1:-1;37349:171:0;;;;;:::i;:::-;;:::i;28924:26::-;;;;;;;;;;;;;;;;37085:256;;;;;;;;;;-1:-1:-1;37085:256:0;;;;;:::i;:::-;;:::i;17799:226::-;;;;;;;;;;-1:-1:-1;17799:226:0;;;;;:::i;:::-;;:::i;31498:184::-;;;;;;;;;;-1:-1:-1;31498:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;31647:18:0;;;31615:7;31647:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31498:184;36442:110;;;;;;;;;;-1:-1:-1;36442:110:0;;;;;:::i;:::-;;:::i;17345:281::-;;;;;;;;;;-1:-1:-1;17345:281:0;;;;;:::i;:::-;;:::i;50732:105::-;;;;;;;;;;-1:-1:-1;50732:105:0;;;;;:::i;:::-;;:::i;30705:83::-;30742:13;30775:5;30768:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30705:83;:::o;31690:193::-;31792:4;31814:39;8454:10;31837:7;31846:6;31814:8;:39::i;:::-;-1:-1:-1;31871:4:0;31690:193;;;;;:::o;36560:182::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;;;;;;;;;36673:4:::1;36655:14;:22;;36647:46;;;;-1:-1:-1::0;;;36647:46:0::1;;;;;;;:::i;:::-;36704:13;:30:::0;36560:182::o;31891:446::-;32023:4;32040:36;32050:6;32058:9;32069:6;32040:9;:36::i;:::-;32087:220;32110:6;8454:10;32158:138;32214:6;32158:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32158:19:0;;;;;;:11;:19;;;;;;;;8454:10;32158:33;;;;;;;;;;:37;:138::i;:::-;32087:8;:220::i;:::-;-1:-1:-1;32325:4:0;31891:446;;;;;:::o;34251:322::-;34345:7;34403;;34392;:18;;34370:110;;;;-1:-1:-1;;;34370:110:0;;7312:2:1;34370:110:0;;;7294:21:1;7351:2;7331:18;;;7324:30;7390:34;7370:18;;;7363:62;-1:-1:-1;;;7441:18:1;;;7434:40;7491:19;;34370:110:0;7284:232:1;34370:110:0;34491:19;34513:10;:8;:10::i;:::-;34491:32;-1:-1:-1;34541:24:0;:7;34491:32;34541:11;:24::i;:::-;34534:31;34251:322;-1:-1:-1;;;34251:322:0:o;35035:477::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35115:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35107:60;;;::::0;-1:-1:-1;;;35107:60:0;;9245:2:1;35107:60:0::1;::::0;::::1;9227:21:1::0;9284:2;9264:18;;;9257:30;9323:29;9303:18;;;9296:57;9370:18;;35107:60:0::1;9217:177:1::0;35107:60:0::1;35183:9;35178:327;35202:9;:16:::0;35198:20;::::1;35178:327;;;35260:7;-1:-1:-1::0;;;;;35244:23:0::1;:9;35254:1;35244:12;;;;;;-1:-1:-1::0;;;35244:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35244:12:0::1;:23;35240:254;;;35303:9;35313:16:::0;;:20:::1;::::0;35332:1:::1;::::0;35313:20:::1;:::i;:::-;35303:31;;;;;;-1:-1:-1::0;;;35303:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;35288:9:::1;:12:::0;;-1:-1:-1;;;;;35303:31:0;;::::1;::::0;35298:1;;35288:12;::::1;;;-1:-1:-1::0;;;35288:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;35288:46:0::1;-1:-1:-1::0;;;;;35288:46:0;;::::1;;::::0;;35353:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35392:11:::1;:20:::0;;;;:28;;-1:-1:-1;;35392:28:0::1;::::0;;35439:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;35439:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35439:15:0;;;;;-1:-1:-1;;;;;;35439:15:0::1;::::0;;;;;35178:327:::1;35035:477:::0;:::o;35240:254::-:1;35220:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35178:327;;;;35035:477:::0;:::o;32345:300::-;8454:10;32460:4;32554:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32554:34:0;;;;;;;;;;32460:4;;32482:133;;32532:7;;32554:50;;32593:10;32554:38;:50::i;33304:439::-;8454:10;33356:14;33419:19;;;:11;:19;;;;;;;;33418:20;33396:114;;;;-1:-1:-1;;;33396:114:0;;13797:2:1;33396:114:0;;;13779:21:1;13836:2;13816:18;;;13809:30;13875:34;13855:18;;;13848:62;-1:-1:-1;;;13926:18:1;;;13919:42;13978:19;;33396:114:0;13769:234:1;33396:114:0;33522:15;33551:19;33562:7;33551:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33599:15:0;;;;;;:7;:15;;;;;;33521:49;;-1:-1:-1;33599:28:0;;:15;-1:-1:-1;33521:49:0;33599:19;:28::i;:::-;-1:-1:-1;;;;;33581:15:0;;;;;;:7;:15;;;;;:46;33648:7;;:20;;33660:7;33648:11;:20::i;:::-;33638:7;:30;33702:20;;:33;;33727:7;33702:24;:33::i;:::-;33679:20;:56;-1:-1:-1;;;33304:439:0:o;50371:98::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50438:16:0::1;;::::0;;;:9:::1;:16;::::0;;;;:23;;-1:-1:-1;;50438:23:0::1;50457:4;50438:23;::::0;;50371:98::o;36323:111::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36392:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36392:34:0::1;36422:4;36392:34;::::0;;36323:111::o;33751:492::-;33877:7;33916;;33905;:18;;33897:62;;;;-1:-1:-1;;;33897:62:0;;9601:2:1;33897:62:0;;;9583:21:1;9640:2;9620:18;;;9613:30;9679:33;9659:18;;;9652:61;9730:18;;33897:62:0;9573:181:1;33897:62:0;33975:27;33970:266;;34020:15;34049:19;34060:7;34049:10;:19::i;:::-;-1:-1:-1;34019:49:0;;-1:-1:-1;34083:14:0;;-1:-1:-1;;;;;34083:14:0;33970:266;34133:23;34168:19;34179:7;34168:10;:19::i;:::-;-1:-1:-1;34130:57:0;;-1:-1:-1;34202:22:0;;-1:-1:-1;;;;;34202:22:0;36750:142;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;36839:4:::1;36829:6;:14;;36821:38;;;;-1:-1:-1::0;;;36821:38:0::1;;;;;;;:::i;:::-;36870:5;:14:::0;36750:142::o;50259:104::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50331:16:0::1;50350:5;50331:16:::0;;;:9:::1;:16;::::0;;;;:24;;-1:-1:-1;;50331:24:0::1;::::0;;50259:104::o;43997:352::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;44049:25:::1;44077:24;44095:4;44077:9;:24::i;:::-;44176:15;::::0;44049:52;;-1:-1:-1;44139:52:0;::::1;::::0;::::1;::::0;;;44220:53:::1;;-1:-1:-1::0;44257:16:0::1;::::0;-1:-1:-1;;;44257:16:0;::::1;;;44256:17;44220:53;44202:140;;;44300:30;44309:20;44300:8;:30::i;34581:446::-:0;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34776:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34775:21;34767:61;;;::::0;-1:-1:-1;;;34767:61:0;;8889:2:1;34767:61:0::1;::::0;::::1;8871:21:1::0;8928:2;8908:18;;;8901:30;8967:29;8947:18;;;8940:57;9014:18;;34767:61:0::1;8861:177:1::0;34767:61:0::1;-1:-1:-1::0;;;;;34843:16:0;::::1;34862:1;34843:16:::0;;;:7:::1;:16;::::0;;;;;:20;34839:109:::1;;-1:-1:-1::0;;;;;34919:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34899:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34880:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34839:109:::1;-1:-1:-1::0;;;;;34958:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34958:27:0::1;34981:4;34958:27:::0;;::::1;::::0;;;34996:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34996:23:0::1;::::0;;::::1;::::0;;34581:446::o;49331:157::-;49404:13;;-1:-1:-1;;;;;49404:13:0;49421:10;49404:27;49396:50;;;;-1:-1:-1;;;49396:50:0;;10774:2:1;49396:50:0;;;10756:21:1;10813:2;10793:18;;;10786:30;-1:-1:-1;;;10832:18:1;;;10825:40;10882:18;;49396:50:0;10746:160:1;49396:50:0;49457:13;:23;;-1:-1:-1;;;;;;49457:23:0;-1:-1:-1;;;;;49457:23:0;;;;;;;;;;49331:157::o;31085:198::-;-1:-1:-1;;;;;31175:20:0;;31151:7;31175:20;;;:11;:20;;;;;;;;31171:49;;;-1:-1:-1;;;;;;31204:16:0;;;;;:7;:16;;;;;;;31085:198::o;31171:49::-;-1:-1:-1;;;;;31258:16:0;;;;;;:7;:16;;;;;;31238:37;;:19;:37::i;17042:148::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;17149:1:::1;17133:6:::0;;17112:40:::1;::::0;-1:-1:-1;;;;;17133:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17112:40:0;17149:1;;17112:40:::1;17180:1;17163:19:::0;;-1:-1:-1;;;;;;17163:19:0::1;::::0;;17042:148::o;36900:177::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;37010:4:::1;36993:13;:21;;36985:45;;;;-1:-1:-1::0;;;36985:45:0::1;;;;;;;:::i;:::-;37041:12;:28:::0;36900:177::o;30796:87::-;30835:13;30868:7;30861:14;;;;;:::i;49496:152::-;49570:10;;-1:-1:-1;;;;;49570:10:0;49584;49570:24;49562:47;;;;-1:-1:-1;;;49562:47:0;;10774:2:1;49562:47:0;;;10756:21:1;10813:2;10793:18;;;10786:30;-1:-1:-1;;;10832:18:1;;;10825:40;10882:18;;49562:47:0;10746:160:1;49562:47:0;49620:10;:20;;-1:-1:-1;;;;;;49620:20:0;-1:-1:-1;;;;;49620:20:0;;;;;;;;;;49496:152::o;32653:400::-;32773:4;32795:228;8454:10;32845:7;32867:145;32924:15;32867:145;;;;;;;;;;;;;;;;;8454:10;32867:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32867:34:0;;;;;;;;;;;;:38;:145::i;18097:379::-;18163:14;;-1:-1:-1;;;;;18163:14:0;18181:10;18163:28;18141:113;;;;-1:-1:-1;;;18141:113:0;;14210:2:1;18141:113:0;;;14192:21:1;14249:2;14229:18;;;14222:30;14288:34;14268:18;;;14261:62;-1:-1:-1;;;14339:18:1;;;14332:33;14382:19;;18141:113:0;14182:225:1;18141:113:0;18291:9;;18273:15;:27;18265:71;;;;-1:-1:-1;;;18265:71:0;;13437:2:1;18265:71:0;;;13419:21:1;13476:2;13456:18;;;13449:30;13515:33;13495:18;;;13488:61;13566:18;;18265:71:0;13409:181:1;18265:71:0;18381:14;;;18373:6;;18352:44;;-1:-1:-1;;;;;18381:14:0;;;;18373:6;;;;-1:-1:-1;;;;;;;;;;;18352:44:0;;18416:14;;;;18407:23;;-1:-1:-1;;;;;;18407:23:0;;;-1:-1:-1;;;;;18416:14:0;;18407:23;;;;18441:27;;;18097:379::o;31291:199::-;31396:4;31418:42;8454:10;31442:9;31453:6;31418:9;:42::i;50477:250::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;50563:7:::1;50558:162;50580:5;:12;50576:1;:16;;;50558:162;;;50618:9;:19;50628:5;50634:1;50628:8;;;;;;;;-1:-1:-1::0;;;50628:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50618:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;50618:19:0;;::::1;;50614:95;;50689:4;50667:9;:19;50677:5;50683:1;50677:8;;;;;;;;-1:-1:-1::0;;;50677:8:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50667:19:0::1;-1:-1:-1::0;;;;;50667:19:0::1;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;50614:95;50594:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50558:162;;49656:598:::0;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;49728:35:::1;49785:7;49728:65;;49838:16;-1:-1:-1::0;;;;;49838:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49820:53:0::1;;49896:4;49916:16;-1:-1:-1::0;;;;;49916:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49820:130;::::0;-1:-1:-1;;;;;;49820:130:0::1;::::0;;;;;;-1:-1:-1;;;;;4644:15:1;;;49820:130:0::1;::::0;::::1;4626:34:1::0;4696:15;;4676:18;;;4669:43;4561:18;;49820:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49804:13;:146:::0;;-1:-1:-1;;;;;;49804:146:0::1;-1:-1:-1::0;;;;;49804:146:0;;;::::1;::::0;;::::1;::::0;;49961:190:::1;;50043:16;-1:-1:-1::0;;;;;50043:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50025:74:0::1;;50108:4;50115:16;-1:-1:-1::0;;;;;50115:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50025:114;::::0;-1:-1:-1;;;;;;50025:114:0::1;::::0;;;;;;-1:-1:-1;;;;;4644:15:1;;;50025:114:0::1;::::0;::::1;4626:34:1::0;4696:15;;4676:18;;;4669:43;4561:18;;50025:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50009:13;:130:::0;;-1:-1:-1;;;;;;50009:130:0::1;-1:-1:-1::0;;;;;50009:130:0;;;::::1;::::0;;;::::1;::::0;;49961:190:::1;50212:15;:34:::0;;-1:-1:-1;;;;;;50212:34:0::1;-1:-1:-1::0;;;;;50212:34:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;49656:598:0:o;37349:171::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;37426:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;37426:32:0::1;-1:-1:-1::0;;;;37426:32:0;;::::1;;::::0;;37474:38:::1;::::0;::::1;::::0;::::1;::::0;37450:8;5500:14:1;5493:22;5475:41;;5463:2;5448:18;;5430:92;37474:38:0::1;;;;;;;;37349:171:::0;:::o;37085:256::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;37188:10:::1;;37171:13;:27;;37163:48;;;::::0;-1:-1:-1;;;37163:48:0;;6572:2:1;37163:48:0::1;::::0;::::1;6554:21:1::0;6611:1;6591:18;;;6584:29;-1:-1:-1;;;6629:18:1;;;6622:38;6677:18;;37163:48:0::1;6544:157:1::0;37163:48:0::1;37247:2;37230:13;:19;;37222:44;;;::::0;-1:-1:-1;;;37222:44:0;;14614:2:1;37222:44:0::1;::::0;::::1;14596:21:1::0;14653:2;14633:18;;;14626:30;-1:-1:-1;;;14672:18:1;;;14665:42;14724:18;;37222:44:0::1;14586:162:1::0;37222:44:0::1;37291:42;37322:10;;37291:26;37303:13;37291:7;;:11;;:26;;;;:::i;:::-;:30:::0;::::1;:42::i;:::-;37277:11;:56:::0;-1:-1:-1;37085:256:0:o;17799:226::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;17880:6:::1;::::0;;;17863:23;;-1:-1:-1;;;;;;17863:23:0;;::::1;-1:-1:-1::0;;;;;17880:6:0;::::1;17863:23;::::0;;;17897:19:::1;::::0;;17939:22:::1;17957:4:::0;17939:15:::1;:22;:::i;:::-;17927:9;:34:::0;18014:1:::1;17998:6:::0;;17977:40:::1;::::0;-1:-1:-1;;;;;17998:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17977:40:0;18014:1;;17977:40:::1;17799:226:::0;:::o;36442:110::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36509:27:0::1;36539:5;36509:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36509:35:0::1;::::0;;36442:110::o;17345:281::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17448:22:0;::::1;17426:110;;;::::0;-1:-1:-1;;;17426:110:0;;7723:2:1;17426:110:0::1;::::0;::::1;7705:21:1::0;7762:2;7742:18;;;7735:30;7801:34;7781:18;;;7774:62;-1:-1:-1;;;7852:18:1;;;7845:36;7898:19;;17426:110:0::1;7695:228:1::0;17426:110:0::1;17573:6;::::0;;17552:38:::1;::::0;-1:-1:-1;;;;;17552:38:0;;::::1;::::0;17573:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17552:38:0;::::1;17601:6;:17:::0;;-1:-1:-1;;;;;;17601:17:0::1;-1:-1:-1::0;;;;;17601:17:0;;;::::1;::::0;;;::::1;::::0;;17345:281::o;50732:105::-;16612:6;;-1:-1:-1;;;;;16612:6:0;8454:10;16612:22;16604:67;;;;-1:-1:-1;;;16604:67:0;;;;;;;:::i;:::-;50807:15:::1;:25:::0;50732:105::o;41772:371::-;-1:-1:-1;;;;;41899:19:0;;41891:68;;;;-1:-1:-1;;;41891:68:0;;13032:2:1;41891:68:0;;;13014:21:1;13071:2;13051:18;;;13044:30;13110:34;13090:18;;;13083:62;-1:-1:-1;;;13161:18:1;;;13154:34;13205:19;;41891:68:0;13004:226:1;41891:68:0;-1:-1:-1;;;;;41978:21:0;;41970:68;;;;-1:-1:-1;;;41970:68:0;;8130:2:1;41970:68:0;;;8112:21:1;8169:2;8149:18;;;8142:30;8208:34;8188:18;;;8181:62;-1:-1:-1;;;8259:18:1;;;8252:32;8301:19;;41970:68:0;8102:224:1;41970:68:0;-1:-1:-1;;;;;42051:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;42103:32;;14899:25:1;;;42103:32:0;;14872:18:1;42103:32:0;;;;;;;41772:371;;;:::o;42151:1838::-;-1:-1:-1;;;;;42273:18:0;;42265:68;;;;-1:-1:-1;;;42265:68:0;;12286:2:1;42265:68:0;;;12268:21:1;12325:2;12305:18;;;12298:30;12364:34;12344:18;;;12337:62;-1:-1:-1;;;12415:18:1;;;12408:35;12460:19;;42265:68:0;12258:227:1;42265:68:0;-1:-1:-1;;;;;42352:16:0;;42344:64;;;;-1:-1:-1;;;42344:64:0;;6908:2:1;42344:64:0;;;6890:21:1;6947:2;6927:18;;;6920:30;6986:34;6966:18;;;6959:62;-1:-1:-1;;;7037:18:1;;;7030:33;7080:19;;42344:64:0;6880:225:1;42344:64:0;42436:1;42427:6;:10;42419:64;;;;-1:-1:-1;;;42419:64:0;;11876:2:1;42419:64:0;;;11858:21:1;11915:2;11895:18;;;11888:30;11954:34;11934:18;;;11927:62;-1:-1:-1;;;12005:18:1;;;11998:39;12054:19;;42419:64:0;11848:231:1;42419:64:0;-1:-1:-1;;;;;42511:15:0;;;;;;:9;:15;;;;;;;;42510:16;:34;;;;-1:-1:-1;;;;;;42531:13:0;;;;;;:9;:13;;;;;;;;42530:14;42510:34;42488:119;;;;-1:-1:-1;;;42488:119:0;;10370:2:1;42488:119:0;;;10352:21:1;10409:2;10389:18;;;10382:30;10448:34;10428:18;;;10421:62;-1:-1:-1;;;10499:18:1;;;10492:33;10542:19;;42488:119:0;10342:225:1;42488:119:0;16438:7;16465:6;-1:-1:-1;;;;;42622:15:0;;;16465:6;;42622:15;;;;:32;;-1:-1:-1;16438:7:0;16465:6;-1:-1:-1;;;;;42641:13:0;;;16465:6;;42641:13;;42622:32;42618:174;;;42705:11;;42695:6;:21;;42669:123;;;;-1:-1:-1;;;42669:123:0;;9961:2:1;42669:123:0;;;9943:21:1;10000:2;9980:18;;;9973:30;10039:34;10019:18;;;10012:62;-1:-1:-1;;;10090:18:1;;;10083:38;10138:19;;42669:123:0;9933:230:1;42669:123:0;43087:28;43118:24;43136:4;43118:9;:24::i;:::-;43087:55;;43183:11;;43159:20;:35;43155:102;;-1:-1:-1;43234:11:0;;43155:102;43333:15;;43296:52;;;;;;;43377:53;;-1:-1:-1;43414:16:0;;-1:-1:-1;;;43414:16:0;;;;43413:17;43377:53;:91;;;;-1:-1:-1;43455:13:0;;-1:-1:-1;;;;;43447:21:0;;;43455:13;;43447:21;;43377:91;:129;;;;-1:-1:-1;43485:21:0;;-1:-1:-1;;;43485:21:0;;;;43377:129;43359:216;;;43533:30;43542:20;43533:8;:30::i;:::-;-1:-1:-1;;;;;43768:24:0;;43648:12;43768:24;;;:18;:24;;;;;;43663:4;;43768:24;;;:50;;-1:-1:-1;;;;;;43796:22:0;;;;;;:18;:22;;;;;;;;43768:50;43764:98;;;-1:-1:-1;43845:5:0;43764:98;43940:41;43955:4;43961:2;43965:6;43973:7;43940:14;:41::i;:::-;42151:1838;;;;;;:::o;4666:226::-;4786:7;4822:12;4814:6;;;;4806:29;;;;-1:-1:-1;;;4806:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4846:9:0;4858:5;4862:1;4858;:5;:::i;:::-;4846:17;4666:226;-1:-1:-1;;;;;4666:226:0:o;39682:164::-;39724:7;39745:15;39762;39781:19;:17;:19::i;:::-;39744:56;;-1:-1:-1;39744:56:0;-1:-1:-1;39818:20:0;39744:56;;39818:11;:20::i;:::-;39811:27;;;;39682:164;:::o;6098:132::-;6156:7;6183:39;6187:1;6190;6183:39;;;;;;;;;;;;;;;;;:3;:39::i;3763:181::-;3821:7;;3853:5;3857:1;3853;:5;:::i;:::-;3841:17;;3882:1;3877;:6;;3869:46;;;;-1:-1:-1;;;3869:46:0;;8533:2:1;3869:46:0;;;8515:21:1;8572:2;8552:18;;;8545:30;8611:29;8591:18;;;8584:57;8658:18;;3869:46:0;8505:177:1;37871:767:0;37971:7;37993;38015;38037;38059;38081;38131:23;38169:22;38206:14;38234:20;38246:7;38234:11;:20::i;:::-;38116:138;;;;;;38280:15;38310:23;38348:22;38384:56;38396:7;38405:14;38421:6;38429:10;:8;:10::i;:::-;38384:11;:56::i;:::-;38265:175;;;;-1:-1:-1;38265:175:0;;-1:-1:-1;38554:15:0;;-1:-1:-1;38584:14:0;;-1:-1:-1;38613:6:0;;-1:-1:-1;37871:767:0;;-1:-1:-1;;;;;37871:767:0:o;4227:136::-;4285:7;4312:43;4316:1;4319;4312:43;;;;;;;;;;;;;;;;;:3;:43::i;44357:908::-;29867:16;:23;;-1:-1:-1;;;;29867:23:0;-1:-1:-1;;;29867:23:0;;;44509:12:::1;::::0;44501:5:::1;::::0;29867:23;;44525:1:::1;::::0;44501:20:::1;::::0;44509:12;44501:20:::1;:::i;:::-;44485:12;::::0;44462:35:::1;::::0;:20;:35:::1;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;44436:90:::0;-1:-1:-1;44537:26:0::1;44566:41;:20:::0;44436:90;44566:24:::1;:41::i;:::-;44537:70:::0;-1:-1:-1;44648:21:0::1;44680:36;44537:70:::0;44680:16:::1;:36::i;:::-;44727:18;44748:44;:21;44774:17:::0;44748:25:::1;:44::i;:::-;44727:65;;44805:23;44874:1;44859:12;;:16;;;;:::i;:::-;44851:5;;:24;;;;:::i;:::-;44831:16;:10:::0;44844:3:::1;44831:16;:::i;:::-;:45;;;;:::i;:::-;44805:71:::0;-1:-1:-1;44887:23:0::1;44913:31;:10:::0;44805:71;44913:14:::1;:31::i;:::-;44887:57;;44957:46;44970:15;44987;44957:12;:46::i;:::-;45019:68;::::0;;16125:25:1;;;16181:2;16166:18;;16159:34;;;16209:18;;;16202:34;;;45019:68:0::1;::::0;16113:2:1;16098:18;45019:68:0::1;;;;;;;45140:13;::::0;-1:-1:-1;;;;;45140:13:0::1;45132:62;45164:29;45191:1;45164:22;:15:::0;45184:1:::1;45164:19;:22::i;:29::-;45132:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;45213:10:0::1;::::0;-1:-1:-1;;;;;45213:10:0::1;45205:52;45234:22;:15:::0;45254:1:::1;45234:19;:22::i;:::-;45205:52;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29913:16:0;:24;;-1:-1:-1;;;;29913:24:0;;;-1:-1:-1;;;;;;44357:908:0:o;5151:471::-;5209:7;5454:6;5450:47;;-1:-1:-1;5484:1:0;5477:8;;5450:47;5509:9;5521:5;5525:1;5521;:5;:::i;:::-;5509:17;-1:-1:-1;5554:1:0;5545:5;5549:1;5509:17;5545:5;:::i;:::-;:10;5537:56;;;;-1:-1:-1;;;5537:56:0;;11113:2:1;5537:56:0;;;11095:21:1;11152:2;11132:18;;;11125:30;11191:34;11171:18;;;11164:62;-1:-1:-1;;;11242:18:1;;;11235:31;11283:19;;5537:56:0;11085:223:1;46468:708:0;46624:7;46619:28;;46633:14;:12;:14::i;:::-;-1:-1:-1;;;;;46664:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;46688:22:0;;;;;;:11;:22;;;;;;;;46687:23;46664:46;46660:467;;;46727:48;46749:6;46757:9;46768:6;46727:21;:48::i;:::-;46660:467;;;-1:-1:-1;;;;;46798:19:0;;;;;;:11;:19;;;;;;;;46797:20;:46;;;;-1:-1:-1;;;;;;46821:22:0;;;;;;:11;:22;;;;;;;;46797:46;46793:334;;;46860:46;46880:6;46888:9;46899:6;46860:19;:46::i;46793:334::-;-1:-1:-1;;;;;46928:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46951:22:0;;;;;;:11;:22;;;;;;;;46928:45;46924:203;;;46990:48;47012:6;47020:9;47031:6;46990:21;:48::i;46924:203::-;47071:44;47089:6;47097:9;47108:6;47071:17;:44::i;:::-;47144:7;47139:29;;47153:15;41522:22;;41506:13;:38;41563:14;;41555:5;:22;41603:21;;41588:12;:36;41462:170;47153:15;46468:708;;;;:::o;39854:605::-;39952:7;;39988;;39905;;;;;40006:338;40030:9;:16;40026:20;;40006:338;;;40114:7;40090;:21;40098:9;40108:1;40098:12;;;;;;-1:-1:-1;;;40098:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40098:12:0;40090:21;;;;;;;;;;;;;:31;;:83;;;40166:7;40142;:21;40150:9;40160:1;40150:12;;;;;;-1:-1:-1;;;40150:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40150:12:0;40142:21;;;;;;;;;;;;;:31;40090:83;40068:146;;;40197:7;;40206;;40189:25;;;;;;;39854:605;;:::o;40068:146::-;40239:34;40251:7;:21;40259:9;40269:1;40259:12;;;;;;-1:-1:-1;;;40259:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40259:12:0;40251:21;;;;;;;;;;;;;40239:7;;:11;:34::i;:::-;40229:44;;40298:34;40310:7;:21;40318:9;40328:1;40318:12;;;;;;-1:-1:-1;;;40318:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40318:12:0;40310:21;;;;;;;;;;;;;40298:7;;:11;:34::i;:::-;40288:44;-1:-1:-1;40048:3:0;;;;:::i;:::-;;;;40006:338;;;-1:-1:-1;40380:7:0;;40368;;:20;;:11;:20::i;:::-;40358:7;:30;40354:61;;;40398:7;;40407;;40390:25;;;;;;39854:605;;:::o;40354:61::-;40434:7;;40443;;-1:-1:-1;39854:605:0;-1:-1:-1;39854:605:0:o;6726:312::-;6846:7;6881:12;6874:5;6866:28;;;;-1:-1:-1;;;6866:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6905:9:0;6917:5;6921:1;6917;:5;:::i;38646:432::-;38747:7;38769;38791;38826:22;38851:33;38876:7;38851:24;:33::i;:::-;38826:58;;38895:14;38912:23;38927:7;38912:14;:23::i;:::-;38895:40;-1:-1:-1;38946:23:0;38972:39;38895:40;38972:27;:7;38984:14;38972:11;:27::i;:::-;:31;;:39::i;:::-;38946:65;39047:14;;-1:-1:-1;39063:6:0;;-1:-1:-1;38646:432:0;;-1:-1:-1;;;38646:432:0:o;39086:588::-;39291:7;;;;39388:24;:7;39400:11;39388;:24::i;:::-;39370:42;-1:-1:-1;39423:22:0;39448:31;:14;39467:11;39448:18;:31::i;:::-;39423:56;-1:-1:-1;39490:14:0;39507:23;:6;39518:11;39507:10;:23::i;:::-;39490:40;-1:-1:-1;39541:23:0;39567:39;39490:40;39567:27;:7;39579:14;39567:11;:27::i;:39::-;39625:7;;;;-1:-1:-1;39651:14:0;;-1:-1:-1;39086:588:0;;-1:-1:-1;;;;;;;39086:588:0:o;45273:589::-;45423:16;;;45437:1;45423:16;;;;;;;;45399:21;;45423:16;;;;;;;;;;-1:-1:-1;45423:16:0;45399:40;;45468:4;45450;45455:1;45450:7;;;;;;-1:-1:-1;;;45450:7:0;;;;;;;;;-1:-1:-1;;;;;45450:23:0;;;:7;;;;;;;;;;:23;;;;45494:15;;:22;;;-1:-1:-1;;;45494:22:0;;;;:15;;;;;:20;;:22;;;;;45450:7;;45494:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45484:4;45489:1;45484:7;;;;;;-1:-1:-1;;;45484:7:0;;;;;;;;;-1:-1:-1;;;;;45484:32:0;;;:7;;;;;;;;;:32;45561:15;;45529:62;;45546:4;;45561:15;45579:11;45529:8;:62::i;:::-;45630:15;;:224;;-1:-1:-1;;;45630:224:0;;-1:-1:-1;;;;;45630:15:0;;;;:66;;:224;;45711:11;;45630:15;;45781:4;;45808;;45828:15;;45630:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45870:517;46050:15;;46018:62;;46035:4;;-1:-1:-1;;;;;46050:15:0;46068:11;46018:8;:62::i;:::-;46123:15;;:256;;-1:-1:-1;;;46123:256:0;;46195:4;46123:256;;;5064:34:1;5114:18;;;5107:34;;;46123:15:0;5157:18:1;;;5150:34;;;5200:18;;;5193:34;29390:6:0;5243:19:1;;;5236:44;46353:15:0;5296:19:1;;;5289:35;-1:-1:-1;;;;;46123:15:0;;;;:31;;46162:9;;4998:19:1;;46123:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45870:517;;:::o;41151:303::-;41198:13;;:18;:32;;;;-1:-1:-1;41220:5:0;;:10;41198:32;41194:45;;;41151:303::o;41194:45::-;41276:13;;;41251:22;:38;41317:5;;;41300:14;:22;41357:12;;;41333:21;:36;-1:-1:-1;41382:17:0;;;;41410:9;;;;41430:16;41151:303::o;48599:724::-;48750:15;48780:23;48818:22;48855:23;48893:22;48930:14;48958:19;48969:7;48958:10;:19::i;:::-;-1:-1:-1;;;;;49006:15:0;;;;;;:7;:15;;;;;;48735:242;;-1:-1:-1;48735:242:0;;-1:-1:-1;48735:242:0;;-1:-1:-1;48735:242:0;-1:-1:-1;48735:242:0;-1:-1:-1;48735:242:0;-1:-1:-1;49006:28:0;;49026:7;49006:19;:28::i;:::-;-1:-1:-1;;;;;48988:15:0;;;;;;:7;:15;;;;;;;;:46;;;;49063:7;:15;;;;:28;;49083:7;49063:19;:28::i;:::-;-1:-1:-1;;;;;49045:15:0;;;;;;;:7;:15;;;;;;:46;;;;49123:18;;;;;;;:39;;49146:15;49123:22;:39::i;:::-;-1:-1:-1;;;;;49102:18:0;;;;;;:7;:18;;;;;:60;49173:18;49184:6;49173:10;:18::i;:::-;49202:53;49224:14;49240;49202:21;:53::i;:::-;49288:9;-1:-1:-1;;;;;49271:44:0;49280:6;-1:-1:-1;;;;;49271:44:0;;49299:15;49271:44;;;;14899:25:1;;14887:2;14872:18;;14854:76;49271:44:0;;;;;;;;48599:724;;;;;;;;;:::o;47855:736::-;48004:15;48034:23;48072:22;48109:23;48147:22;48184:14;48212:19;48223:7;48212:10;:19::i;:::-;-1:-1:-1;;;;;48260:15:0;;;;;;:7;:15;;;;;;47989:242;;-1:-1:-1;47989:242:0;;-1:-1:-1;47989:242:0;;-1:-1:-1;47989:242:0;-1:-1:-1;47989:242:0;-1:-1:-1;47989:242:0;-1:-1:-1;48260:28:0;;47989:242;48260:19;:28::i;:::-;-1:-1:-1;;;;;48242:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48320:18;;;;;:7;:18;;;;;:39;;48343:15;48320:22;:39::i;:::-;-1:-1:-1;;;;;48299:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48391:7;:18;;;;:39;;48414:15;48391:22;:39::i;35520:795::-;35671:15;35701:23;35739:22;35776:23;35814:22;35851:14;35879:19;35890:7;35879:10;:19::i;:::-;-1:-1:-1;;;;;35927:15:0;;;;;;:7;:15;;;;;;35656:242;;-1:-1:-1;35656:242:0;;-1:-1:-1;35656:242:0;;-1:-1:-1;35656:242:0;-1:-1:-1;35656:242:0;-1:-1:-1;35656:242:0;-1:-1:-1;35927:28:0;;35947:7;35927:19;:28::i;:::-;-1:-1:-1;;;;;35909:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35984:7;:15;;;;:28;;36004:7;35984:19;:28::i;47184:663::-;47331:15;47361:23;47399:22;47436:23;47474:22;47511:14;47539:19;47550:7;47539:10;:19::i;:::-;-1:-1:-1;;;;;47587:15:0;;;;;;:7;:15;;;;;;47316:242;;-1:-1:-1;47316:242:0;;-1:-1:-1;47316:242:0;;-1:-1:-1;47316:242:0;-1:-1:-1;47316:242:0;-1:-1:-1;47316:242:0;-1:-1:-1;47587:28:0;;47316:242;47587:19;:28::i;40806:182::-;40906:7;40938:42;40969:10;;40938:26;40950:13;;40938:7;:11;;:26;;;;:::i;40996:147::-;41059:7;41086:49;41124:10;;41086:33;41106:12;;41098:5;;:20;;;;:::i;:::-;41086:7;;:11;:33::i;40467:331::-;40522:19;40544:10;:8;:10::i;:::-;40522:32;-1:-1:-1;40565:14:0;40582:23;:6;40522:32;40582:10;:23::i;:::-;40657:4;40641:22;;;;:7;:22;;;;;;40565:40;;-1:-1:-1;40641:34:0;;40565:40;40641:26;:34::i;:::-;40632:4;40616:22;;;;:7;:22;;;;;;;;:59;;;;40690:11;:26;;;;;;40686:104;;;40772:4;40756:22;;;;:7;:22;;;;;;:34;;40783:6;40756:26;:34::i;:::-;40747:4;40731:22;;;;:7;:22;;;;;:59;40686:104;40467:331;;;:::o;37621:242::-;37754:7;;:27;;37766:14;37754:11;:27::i;:::-;37744:7;:37;37815:20;;:40;;37840:14;37815:24;:40::i;:::-;37792:20;:63;-1:-1:-1;;37621:242:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:2;;303:1;300;293:12;318:257;377:6;430:2;418:9;409:7;405:23;401:32;398:2;;;451:6;443;436:22;398:2;495:9;482:23;514:31;539:5;514:31;:::i;580:261::-;650:6;703:2;691:9;682:7;678:23;674:32;671:2;;;724:6;716;709:22;671:2;761:9;755:16;780:31;805:5;780:31;:::i;846:398::-;914:6;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;1221:17;;;933:311;;;;;:::o;1249:466::-;1326:6;1334;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:2;;;1416:6;1408;1401:22;1363:2;1460:9;1447:23;1479:31;1504:5;1479:31;:::i;:::-;1529:5;-1:-1:-1;1586:2:1;1571:18;;1558:32;1599:33;1558:32;1599:33;:::i;:::-;1353:362;;1651:7;;-1:-1:-1;;;1705:2:1;1690:18;;;;1677:32;;1353:362::o;1720:325::-;1788:6;1796;1849:2;1837:9;1828:7;1824:23;1820:32;1817:2;;;1870:6;1862;1855:22;1817:2;1914:9;1901:23;1933:31;1958:5;1933:31;:::i;:::-;1983:5;2035:2;2020:18;;;;2007:32;;-1:-1:-1;;;1807:238:1:o;2050:1177::-;2134:6;2165:2;2208;2196:9;2187:7;2183:23;2179:32;2176:2;;;2229:6;2221;2214:22;2176:2;2274:9;2261:23;2303:18;2344:2;2336:6;2333:14;2330:2;;;2365:6;2357;2350:22;2330:2;2408:6;2397:9;2393:22;2383:32;;2453:7;2446:4;2442:2;2438:13;2434:27;2424:2;;2480:6;2472;2465:22;2424:2;2521;2508:16;2543:2;2539;2536:10;2533:2;;;2549:18;;:::i;:::-;2595:2;2592:1;2588:10;2627:2;2621:9;2690:2;2686:7;2681:2;2677;2673:11;2669:25;2661:6;2657:38;2745:6;2733:10;2730:22;2725:2;2713:10;2710:18;2707:46;2704:2;;;2756:18;;:::i;:::-;2792:2;2785:22;2842:18;;;2876:15;;;;-1:-1:-1;2911:11:1;;;2941;;;2937:20;;2934:33;-1:-1:-1;2931:2:1;;;2985:6;2977;2970:22;2931:2;3012:6;3003:15;;3027:169;3041:2;3038:1;3035:9;3027:169;;;3098:23;3117:3;3098:23;:::i;:::-;3086:36;;3059:1;3052:9;;;;;3142:12;;;;3174;;3027:169;;;-1:-1:-1;3215:6:1;2145:1082;-1:-1:-1;;;;;;;;2145:1082:1:o;3232:190::-;3288:6;3341:2;3329:9;3320:7;3316:23;3312:32;3309:2;;;3362:6;3354;3347:22;3309:2;3390:26;3406:9;3390:26;:::i;3427:190::-;3486:6;3539:2;3527:9;3518:7;3514:23;3510:32;3507:2;;;3560:6;3552;3545:22;3507:2;-1:-1:-1;3588:23:1;;3497:120;-1:-1:-1;3497:120:1:o;3622:258::-;3687:6;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:2;;;3769:6;3761;3754:22;3716:2;3810:9;3797:23;3787:33;;3839:35;3870:2;3859:9;3855:18;3839:35;:::i;:::-;3829:45;;3706:174;;;;;:::o;3885:316::-;3973:6;3981;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:2;;;4063:6;4055;4048:22;4010:2;4097:9;4091:16;4081:26;;4147:2;4136:9;4132:18;4126:25;4116:35;;4191:2;4180:9;4176:18;4170:25;4160:35;;4000:201;;;;;:::o;5762:603::-;5874:4;5903:2;5932;5921:9;5914:21;5964:6;5958:13;6007:6;6002:2;5991:9;5987:18;5980:34;6032:4;6045:140;6059:6;6056:1;6053:13;6045:140;;;6154:14;;;6150:23;;6144:30;6120:17;;;6139:2;6116:26;6109:66;6074:10;;6045:140;;;6203:6;6200:1;6197:13;6194:2;;;6273:4;6268:2;6259:6;6248:9;6244:22;6240:31;6233:45;6194:2;-1:-1:-1;6349:2:1;6328:15;-1:-1:-1;;6324:29:1;6309:45;;;;6356:2;6305:54;;5883:482;-1:-1:-1;;;5883:482:1:o;11313:356::-;11515:2;11497:21;;;11534:18;;;11527:30;11593:34;11588:2;11573:18;;11566:62;11660:2;11645:18;;11487:182::o;12490:335::-;12692:2;12674:21;;;12731:2;12711:18;;;12704:30;-1:-1:-1;;;12765:2:1;12750:18;;12743:41;12816:2;12801:18;;12664:161::o;14935:983::-;15197:4;15245:3;15234:9;15230:19;15276:6;15265:9;15258:25;15302:2;15340:6;15335:2;15324:9;15320:18;15313:34;15383:3;15378:2;15367:9;15363:18;15356:31;15407:6;15442;15436:13;15473:6;15465;15458:22;15511:3;15500:9;15496:19;15489:26;;15550:2;15542:6;15538:15;15524:29;;15571:4;15584:195;15598:6;15595:1;15592:13;15584:195;;;15663:13;;-1:-1:-1;;;;;15659:39:1;15647:52;;15754:15;;;;15719:12;;;;15695:1;15613:9;15584:195;;;-1:-1:-1;;;;;;;15835:32:1;;;;15830:2;15815:18;;15808:60;-1:-1:-1;;;15899:3:1;15884:19;15877:35;15796:3;15206:712;-1:-1:-1;;;15206:712:1:o;16436:128::-;16476:3;16507:1;16503:6;16500:1;16497:13;16494:2;;;16513:18;;:::i;:::-;-1:-1:-1;16549:9:1;;16484:80::o;16569:217::-;16609:1;16635;16625:2;;-1:-1:-1;;;16660:31:1;;16714:4;16711:1;16704:15;16742:4;16667:1;16732:15;16625:2;-1:-1:-1;16771:9:1;;16615:171::o;16791:168::-;16831:7;16897:1;16893;16889:6;16885:14;16882:1;16879:21;16874:1;16867:9;16860:17;16856:45;16853:2;;;16904:18;;:::i;:::-;-1:-1:-1;16944:9:1;;16843:116::o;16964:125::-;17004:4;17032:1;17029;17026:8;17023:2;;;17037:18;;:::i;:::-;-1:-1:-1;17074:9:1;;17013:76::o;17094:380::-;17173:1;17169:12;;;;17216;;;17237:2;;17291:4;17283:6;17279:17;17269:27;;17237:2;17344;17336:6;17333:14;17313:18;17310:38;17307:2;;;17390:10;17385:3;17381:20;17378:1;17371:31;17425:4;17422:1;17415:15;17453:4;17450:1;17443:15;17307:2;;17149:325;;;:::o;17479:135::-;17518:3;-1:-1:-1;;17539:17:1;;17536:2;;;17559:18;;:::i;:::-;-1:-1:-1;17606:1:1;17595:13;;17526:88::o;17619:175::-;17656:3;17700:4;17693:5;17689:16;17729:4;17720:7;17717:17;17714:2;;;17737:18;;:::i;:::-;17786:1;17773:15;;17664:130;-1:-1:-1;;17664:130:1:o;17799:127::-;17860:10;17855:3;17851:20;17848:1;17841:31;17891:4;17888:1;17881:15;17915:4;17912:1;17905:15;17931:127;17992:10;17987:3;17983:20;17980:1;17973:31;18023:4;18020:1;18013:15;18047:4;18044:1;18037:15;18063:131;-1:-1:-1;;;;;18138:31:1;;18128:42;;18118:2;;18184:1;18181;18174:12;18118:2;18108:86;:::o
Swarm Source
ipfs://b2ad6b619dbf1c959f60cac1756b2debc90fede259a6db1ce1a556930fa4ceb6
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.