ERC-20
Overview
Max Total Supply
43,049.38078266 UFOR
Holders
35
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,490.042320669 UFORValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
UFOR
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-01 */ // oooooOOOOOOOOOOOOOOOOooooo // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII // HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz // .<><><><><><><><><><><><><><><><><><><><><><><><><><><><>. // /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ // /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ // \XXX[ ]XXX[ ]XXXX[ ]XXXX[ ]XXXX[ ]XXXX[ ]XXXX[ ]XXX[ ]XXX/ // \XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/ // ~~~~\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/~~~~ // / ~~~<><><><><><><><><><>~~~ \ // / / | | | \ \ // / / | | \ \ // / / | \ \ // / / | | \ \ // / / | \ \ // _/_/ | | \_\_ // <___> | | | <___> // // $UFOR // https://t.me/UFOReloaded // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal virtual view returns (address payable) { return msg.sender; } function _msgData() internal virtual view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @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; } } /** * @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; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { 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; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Pair { function sync() external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; } contract Balancer { constructor() public { } } contract UFOR is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name = "UFO Reloaded"; string private _symbol = "UFOR"; uint8 private _decimals = 9; mapping(address => uint256) internal _reflectionBalance; mapping(address => uint256) internal _tokenBalance; mapping(address => mapping(address => uint256)) internal _allowances; uint256 private constant MAX = ~uint256(0); uint256 internal _tokenTotal = 51_000e9; uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal)); mapping(address => bool) isExcludedFromFee; mapping(address => bool) internal _isExcluded; address[] internal _excluded; //@dev The tax fee contains two decimal places so 350 = 3.5% uint256 public _feeDecimal = 2; uint256 public _taxFee = 510; uint256 public _liquidityFee = 510; uint256 public _rebalanceCallerFee = 666; uint256 public _taxFeeTotal; uint256 public _burnFeeTotal; uint256 public _liquidityFeeTotal; bool public tradingEnabled = false; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public rebalanceEnalbed = true; uint256 public minTokensBeforeSwap = 100; uint256 public minEthBeforeSwap = 100; uint256 public liquidityAddedAt; uint256 public lastRebalance = now ; uint256 public rebalanceInterval = 14 minutes; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public balancer; event TradingEnabled(bool enabled); event RewardsDistributed(uint256 amount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapedTokenForEth(uint256 EthAmount, uint256 TokenAmount); event SwapedEthForTokens(uint256 EthAmount, uint256 TokenAmount, uint256 CallerReward, uint256 AmountBurned); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() public { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //@dev Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; balancer = address(new Balancer()); isExcludedFromFee[_msgSender()] = true; isExcludedFromFee[address(this)] = true; //@dev Exclude uniswapV2Pair from taking rewards _isExcluded[uniswapV2Pair] = true; _excluded.push(uniswapV2Pair); _reflectionBalance[_msgSender()] = _reflectionTotal; emit Transfer(address(0), _msgSender(), _tokenTotal); } 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 override view returns (uint256) { return _tokenTotal; } function balanceOf(address account) public override view returns (uint256) { if (_isExcluded[account]) return _tokenBalance[account]; return tokenFromReflection(_reflectionBalance[account]); } function transfer(address recipient, uint256 amount) public override virtual returns (bool) { _transfer(_msgSender(),recipient,amount); return true; } function allowance(address owner, address spender) public override view 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 virtual 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 isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee) public view returns (uint256) { require(tokenAmount <= _tokenTotal, "Amount must be less than supply"); if (!deductTransferFee) { return tokenAmount.mul(_getReflectionRate()); } else { return tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul( _getReflectionRate() ); } } function tokenFromReflection(uint256 reflectionAmount) public view returns (uint256) { require( reflectionAmount <= _reflectionTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getReflectionRate(); return reflectionAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require( account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, "UFOR: Uniswap router cannot be excluded." ); require(account != address(this), 'UFOR: The contract it self cannot be excluded'); require(!_isExcluded[account], "UFOR: Account is already excluded"); if (_reflectionBalance[account] > 0) { _tokenBalance[account] = tokenFromReflection( _reflectionBalance[account] ); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "UFOR: Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tokenBalance[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || sender == owner() || recipient == owner() || isExcludedFromFee[sender] || isExcludedFromFee[recipient], "Trading is locked before presale."); //@dev Limit the transfer to ____ tokens for first __ minutes require(now > liquidityAddedAt + 3 minutes || amount <= 510e9, "You cannot transfer more than 510 tokens."); //@dev Don't swap or buy tokens when uniswapV2Pair is sender, to avoid circular loop if(!inSwapAndLiquify && sender != uniswapV2Pair) { bool swap = true; uint256 contractBalance = address(this).balance; //@dev Buy tokens if(now > lastRebalance + rebalanceInterval && rebalanceEnalbed && contractBalance >= minEthBeforeSwap){ buyAndBurnToken(contractBalance); swap = false; } //@dev Buy eth if(swap) { uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap; if (overMinTokenBalance && swapAndLiquifyEnabled) { swapTokensForEth(); } } } uint256 transferAmount = amount; uint256 rate = _getReflectionRate(); if(!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && !inSwapAndLiquify){ transferAmount = collectFee(sender,amount,rate); } //@dev Transfer reflection _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate)); _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate)); //@dev If any account belongs to the excludedAccount transfer token if (_isExcluded[sender]) { _tokenBalance[sender] = _tokenBalance[sender].sub(amount); } if (_isExcluded[recipient]) { _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount); } emit Transfer(sender, recipient, transferAmount); } function collectFee(address account, uint256 amount, uint256 rate) private returns (uint256) { uint256 transferAmount = amount; //@dev Tax fee if(_taxFee != 0){ uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(taxFee); _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate)); _taxFeeTotal = _taxFeeTotal.add(taxFee); emit RewardsDistributed(taxFee); } //@dev Take liquidity fee if(_liquidityFee != 0){ uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(liquidityFee); _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate)); _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee); emit Transfer(account,address(this),liquidityFee); } return transferAmount; } function _getReflectionRate() private view returns (uint256) { uint256 reflectionSupply = _reflectionTotal; uint256 tokenSupply = _tokenTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _reflectionBalance[_excluded[i]] > reflectionSupply || _tokenBalance[_excluded[i]] > tokenSupply ) return _reflectionTotal.div(_tokenTotal); reflectionSupply = reflectionSupply.sub( _reflectionBalance[_excluded[i]] ); tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]); } if (reflectionSupply < _reflectionTotal.div(_tokenTotal)) return _reflectionTotal.div(_tokenTotal); return reflectionSupply.div(tokenSupply); } function swapTokensForEth() private lockTheSwap { uint256 tokenAmount = balanceOf(address(this)); uint256 ethAmount = address(this).balance; //@dev 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); //@dev Make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); ethAmount = address(this).balance.sub(ethAmount); emit SwapedTokenForEth(tokenAmount,ethAmount); } function swapEthForTokens(uint256 EthAmount) private { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: EthAmount}( 0, path, address(balancer), block.timestamp ); } function buyAndBurnToken(uint256 contractBalance) private lockTheSwap { lastRebalance = now; //@dev Uniswap doesn't allow for a token to by itself, so we have to use an external account, which in this case is called the balancer swapEthForTokens(contractBalance); //@dev How much tokens we swaped into uint256 swapedTokens = balanceOf(address(balancer)); uint256 rewardForCaller = swapedTokens.mul(_rebalanceCallerFee).div(10**(_feeDecimal + 2)); uint256 amountToBurn = swapedTokens.sub(rewardForCaller); uint256 rate = _getReflectionRate(); _reflectionBalance[tx.origin] = _reflectionBalance[tx.origin].add(rewardForCaller.mul(rate)); _reflectionBalance[address(balancer)] = 0; _burnFeeTotal = _burnFeeTotal.add(amountToBurn); _tokenTotal = _tokenTotal.sub(amountToBurn); _reflectionTotal = _reflectionTotal.sub(amountToBurn.mul(rate)); emit Transfer(address(balancer), tx.origin, rewardForCaller); emit Transfer(address(balancer), address(0), amountToBurn); emit SwapedEthForTokens(contractBalance, swapedTokens, rewardForCaller, amountToBurn); } function setExcludedFromFee(address account, bool excluded) public onlyOwner { isExcludedFromFee[account] = excluded; } function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner { swapAndLiquifyEnabled = enabled; SwapAndLiquifyEnabledUpdated(enabled); } function setTaxFee(uint256 fee) public onlyOwner { _taxFee = fee; } function setLiquidityFee(uint256 fee) public onlyOwner { _liquidityFee = fee; } function setRebalanceCallerFee(uint256 fee) public onlyOwner { _rebalanceCallerFee = fee; } function setMinTokensBeforeSwap(uint256 amount) public onlyOwner { minTokensBeforeSwap = amount; } function setMinEthBeforeSwap(uint256 amount) public onlyOwner { minEthBeforeSwap = amount; } function setRebalanceInterval(uint256 interval) public onlyOwner { rebalanceInterval = interval; } function setRebalanceEnabled(bool enabled) public onlyOwner { rebalanceEnalbed = enabled; } function enableTrading() external onlyOwner() { tradingEnabled = true; TradingEnabled(true); liquidityAddedAt = now; } receive() external payable {} }
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":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":"amount","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CallerReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountBurned","type":"uint256"}],"name":"SwapedEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"}],"name":"SwapedTokenForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","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":"_burnFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebalanceCallerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balancer","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minEthBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceEnalbed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinEthBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRebalanceCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRebalanceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setRebalanceInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","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":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600c60808190526b155193c814995b1bd859195960a21b60a09081526200002f916001919062000464565b50604080518082019091526004808252632aa327a960e11b60209092019182526200005d9160029162000464565b506003805460ff19166009179055652e625ce23000600781905560001906196008556002600c556101fe600d819055600e5561029a600f556013805463ff0000001962ff00ff1990911662010000171663010000001790556064601481905560155542601755610348601855348015620000d657600080fd5b506000620000e362000460565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018057600080fd5b505afa15801562000195573d6000803e3d6000fd5b505050506040513d6020811015620001ac57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620001fd57600080fd5b505afa15801562000212573d6000803e3d6000fd5b505050506040513d60208110156200022957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200027c57600080fd5b505af115801562000291573d6000803e3d6000fd5b505050506040513d6020811015620002a857600080fd5b5051601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055604051620002e790620004e9565b604051809103906000f08015801562000304573d6000803e3d6000fd5b50601b80546001600160a01b0319166001600160a01b03929092169190911790556001600960006200033562000460565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260098452828120805486166001908117909155601a805484168352600a909552928120805490951683179094559154600b8054928301815584527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319169190921617905560085490600490620003e862000460565b6001600160a01b031681526020810191909152604001600020556200040c62000460565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3506200050d565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004a757805160ff1916838001178555620004d7565b82800160010185558215620004d7579182015b82811115620004d7578251825591602001919060010190620004ba565b50620004e5929150620004f6565b5090565b605c806200305583390190565b5b80821115620004e55760008155600101620004f7565b612b38806200051d6000396000f3fe60806040526004361061028c5760003560e01c80635b7dcaed1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146108c2578063e563037e146108fd578063e5d41c6b14610912578063f2cc0c1814610927578063f2fde38b1461095a578063f84354f11461098d57610293565b8063a9059cbb146107c1578063c4081a4c146107fa578063c49b9a8014610824578063cba0e99614610850578063cd980e5614610883578063d400336f146108ad57610293565b80637e64c7aa116101135780637e64c7aa1461071f5780638a8c523c146107345780638da5cb5b1461074957806395d89b411461075e5780639d46cf8a14610773578063a457c2d71461078857610293565b80635b7dcaed146106335780635ce15f7e1461065d5780636612e66f146106875780636bc87c3a146106c257806370a08231146106d7578063715018a61461070a57610293565b8063313ce567116101fe5780634549b039116101b75780634549b0391461056c57806348a464731461059e57806349bd5a5e146105c85780634a74bb02146105dd5780634ada218b146105f257806355a50ede1461060757610293565b8063313ce5671461049d578063355bc60b146104c8578063357bf15c146104dd57806338e07fb214610509578063395093511461051e5780633b124fe71461055757610293565b80631694505e116102505780631694505e146103c057806316d1d916146103f157806318160ddd1461040657806319db457d1461041b57806323b872dd146104305780632d8381191461047357610293565b806304b645271461029857806306fdde03146102bf578063095ea7b3146103495780630d9a521914610396578063106b9ca1146103ab57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6109c0565b60408051918252519081900360200190f35b3480156102cb57600080fd5b506102d46109c6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103826004803603604081101561036c57600080fd5b506001600160a01b038135169060200135610a5c565b604080519115158252519081900360200190f35b3480156103a257600080fd5b506102ad610a7a565b3480156103b757600080fd5b506102ad610a80565b3480156103cc57600080fd5b506103d5610a86565b604080516001600160a01b039092168252519081900360200190f35b3480156103fd57600080fd5b506102ad610a95565b34801561041257600080fd5b506102ad610a9b565b34801561042757600080fd5b506102ad610aa1565b34801561043c57600080fd5b506103826004803603606081101561045357600080fd5b506001600160a01b03813581169160208101359091169060400135610aa7565b34801561047f57600080fd5b506102ad6004803603602081101561049657600080fd5b5035610b2e565b3480156104a957600080fd5b506104b2610b90565b6040805160ff9092168252519081900360200190f35b3480156104d457600080fd5b506102ad610b99565b3480156104e957600080fd5b506105076004803603602081101561050057600080fd5b5035610b9f565b005b34801561051557600080fd5b50610382610bfc565b34801561052a57600080fd5b506103826004803603604081101561054157600080fd5b506001600160a01b038135169060200135610c0c565b34801561056357600080fd5b506102ad610c5a565b34801561057857600080fd5b506102ad6004803603604081101561058f57600080fd5b50803590602001351515610c60565b3480156105aa57600080fd5b50610507600480360360208110156105c157600080fd5b5035610d19565b3480156105d457600080fd5b506103d5610d76565b3480156105e957600080fd5b50610382610d85565b3480156105fe57600080fd5b50610382610d94565b34801561061357600080fd5b506105076004803603602081101561062a57600080fd5b50351515610d9d565b34801561063f57600080fd5b506105076004803603602081101561065657600080fd5b5035610e13565b34801561066957600080fd5b506105076004803603602081101561068057600080fd5b5035610e70565b34801561069357600080fd5b50610507600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001351515610ecd565b3480156106ce57600080fd5b506102ad610f50565b3480156106e357600080fd5b506102ad600480360360208110156106fa57600080fd5b50356001600160a01b0316610f56565b34801561071657600080fd5b50610507610fb8565b34801561072b57600080fd5b506102ad61105a565b34801561074057600080fd5b50610507611060565b34801561075557600080fd5b506103d5611100565b34801561076a57600080fd5b506102d461110f565b34801561077f57600080fd5b506102ad61116d565b34801561079457600080fd5b50610382600480360360408110156107ab57600080fd5b506001600160a01b038135169060200135611173565b3480156107cd57600080fd5b50610382600480360360408110156107e457600080fd5b506001600160a01b0381351690602001356111db565b34801561080657600080fd5b506105076004803603602081101561081d57600080fd5b50356111ef565b34801561083057600080fd5b506105076004803603602081101561084757600080fd5b5035151561124c565b34801561085c57600080fd5b506103826004803603602081101561087357600080fd5b50356001600160a01b03166112f5565b34801561088f57600080fd5b50610507600480360360208110156108a657600080fd5b5035611313565b3480156108b957600080fd5b506102ad611370565b3480156108ce57600080fd5b506102ad600480360360408110156108e557600080fd5b506001600160a01b0381358116916020013516611376565b34801561090957600080fd5b506103d56113a1565b34801561091e57600080fd5b506102ad6113b0565b34801561093357600080fd5b506105076004803603602081101561094a57600080fd5b50356001600160a01b03166113b6565b34801561096657600080fd5b506105076004803603602081101561097d57600080fd5b50356001600160a01b03166115ca565b34801561099957600080fd5b50610507600480360360208110156109b057600080fd5b50356001600160a01b03166116c2565b60165481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a515780601f10610a2657610100808354040283529160200191610a51565b820191906000526020600020905b815481529060010190602001808311610a3457829003601f168201915b505050505090505b90565b6000610a70610a6961186d565b8484611871565b5060015b92915050565b60115481565b60175481565b6019546001600160a01b031681565b60185481565b60075490565b600c5481565b6000610ab484848461195d565b610b2484610ac061186d565b610b1f85604051806060016040528060288152602001612992602891396001600160a01b038a16600090815260066020526040812090610afe61186d565b6001600160a01b031681526020810191909152604001600020549190611def565b611871565b5060019392505050565b6000600854821115610b715760405162461bcd60e51b815260040180806020018281038252602a815260200180612890602a913960400191505060405180910390fd5b6000610b7b611e86565b9050610b878382611ffd565b9150505b919050565b60035460ff1690565b60105481565b610ba761186d565b6000546001600160a01b03908116911614610bf7576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600e55565b6013546301000000900460ff1681565b6000610a70610c1961186d565b84610b1f8560066000610c2a61186d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612046565b600d5481565b6000600754831115610cb9576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610cd757610cd0610cc9611e86565b84906120a0565b9050610a74565b610cd0610ce2611e86565b610d13610d0c600c54600a0a600201610d06600d54896120a090919063ffffffff16565b90611ffd565b86906120f9565b906120a0565b610d2161186d565b6000546001600160a01b03908116911614610d71576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601455565b601a546001600160a01b031681565b60135462010000900460ff1681565b60135460ff1681565b610da561186d565b6000546001600160a01b03908116911614610df5576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805491151563010000000263ff00000019909216919091179055565b610e1b61186d565b6000546001600160a01b03908116911614610e6b576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601855565b610e7861186d565b6000546001600160a01b03908116911614610ec8576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601555565b610ed561186d565b6000546001600160a01b03908116911614610f25576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600e5481565b6001600160a01b0381166000908152600a602052604081205460ff1615610f9657506001600160a01b038116600090815260056020526040902054610b8b565b6001600160a01b038216600090815260046020526040902054610a7490610b2e565b610fc061186d565b6000546001600160a01b03908116911614611010576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5481565b61106861186d565b6000546001600160a01b039081169116146110b8576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601655565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610a515780601f10610a2657610100808354040283529160200191610a51565b60125481565b6000610a7061118061186d565b84610b1f85604051806060016040528060258152602001612ab660259139600660006111aa61186d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611def565b6000610a706111e861186d565b848461195d565b6111f761186d565b6000546001600160a01b03908116911614611247576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600d55565b61125461186d565b6000546001600160a01b039081169116146112a4576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805482151562010000810262ff0000199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600a602052604090205460ff1690565b61131b61186d565b6000546001600160a01b0390811691161461136b576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600f55565b60155481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b601b546001600160a01b031681565b60145481565b6113be61186d565b6000546001600160a01b0390811691161461140e576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561146a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612adb6028913960400191505060405180910390fd5b6001600160a01b0381163014156114b25760405162461bcd60e51b815260040180806020018281038252602d815260200180612902602d913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff161561150a5760405162461bcd60e51b81526004018080602001828103825260218152602001806129716021913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205415611564576001600160a01b03811660009081526004602052604090205461154a90610b2e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6115d261186d565b6000546001600160a01b03908116911614611622576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b0381166116675760405162461bcd60e51b81526004018080602001828103825260268152602001806128ba6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6116ca61186d565b6000546001600160a01b0390811691161461171a576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff166117715760405162461bcd60e51b8152600401808060200182810382526021815260200180612a4c6021913960400191505060405180910390fd5b60005b600b5481101561186957816001600160a01b0316600b828154811061179557fe5b6000918252602090912001546001600160a01b0316141561186157600b805460001981019081106117c257fe5b600091825260209091200154600b80546001600160a01b0390921691839081106117e857fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061183a57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611869565b600101611774565b5050565b3390565b6001600160a01b0383166118b65760405162461bcd60e51b8152600401808060200182810382526024815260200180612a926024913960400191505060405180910390fd5b6001600160a01b0382166118fb5760405162461bcd60e51b81526004018080602001828103825260228152602001806128e06022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526025815260200180612a6d6025913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b815260040180806020018281038252602381526020018061286d6023913960400191505060405180910390fd5b60008111611a265760405162461bcd60e51b8152600401808060200182810382526029815260200180612a036029913960400191505060405180910390fd5b60135460ff1680611a4f5750611a3a611100565b6001600160a01b0316836001600160a01b0316145b80611a725750611a5d611100565b6001600160a01b0316826001600160a01b0316145b80611a9557506001600160a01b03831660009081526009602052604090205460ff165b80611ab857506001600160a01b03821660009081526009602052604090205460ff165b611af35760405162461bcd60e51b815260040180806020018281038252602181526020018061292f6021913960400191505060405180910390fd5b60165460b401421180611b0b57506476be5e6c008111155b611b465760405162461bcd60e51b81526004018080602001828103825260298152602001806129da6029913960400191505060405180910390fd5b601354610100900460ff16158015611b6c5750601a546001600160a01b03848116911614155b15611bf85760185460175460019147910142118015611b9457506013546301000000900460ff165b8015611ba257506015548110155b15611bb557611bb08161213b565b600091505b8115611bf5576000611bc630610f56565b60145490915081108015908190611be5575060135462010000900460ff165b15611bf257611bf26122ee565b50505b50505b806000611c03611e86565b6001600160a01b03861660009081526009602052604090205490915060ff16158015611c4857506001600160a01b03841660009081526009602052604090205460ff16155b8015611c5c5750601354610100900460ff16155b15611c6f57611c6c858483612518565b91505b611c9b611c7c84836120a0565b6001600160a01b038716600090815260046020526040902054906120f9565b6001600160a01b038616600090815260046020526040902055611ce0611cc183836120a0565b6001600160a01b03861660009081526004602052604090205490612046565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600a909152205460ff1615611d51576001600160a01b038516600090815260056020526040902054611d3790846120f9565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600a602052604090205460ff1615611daf576001600160a01b038416600090815260056020526040902054611d959083612046565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b0316600080516020612a2c833981519152846040518082815260200191505060405180910390a35050505050565b60008184841115611e7e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e43578181015183820152602001611e2b565b50505050905090810190601f168015611e705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60085460075460009190825b600b54811015611fbd578260046000600b8481548110611eae57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f1357508160056000600b8481548110611eec57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f3157600754600854611f2791611ffd565b9350505050610a59565b611f7160046000600b8481548110611f4557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f9565b9250611fb360056000600b8481548110611f8757fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f9565b9150600101611e92565b50600754600854611fcd91611ffd565b821015611fec57600754600854611fe391611ffd565b92505050610a59565b611ff68282611ffd565b9250505090565b600061203f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061265f565b9392505050565b60008282018381101561203f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826120af57506000610a74565b828202828482816120bc57fe5b041461203f5760405162461bcd60e51b81526004018080602001828103825260218152602001806129506021913960400191505060405180910390fd5b600061203f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611def565b6013805461ff00191661010017905542601755612157816126c4565b601b5460009061216f906001600160a01b0316610f56565b90506000612194600c54600201600a0a610d06600f54856120a090919063ffffffff16565b905060006121a283836120f9565b905060006121ae611e86565b90506121d36121bd84836120a0565b3260009081526004602052604090205490612046565b3260009081526004602052604080822092909255601b546001600160a01b03168152908120556011546122069083612046565b60115560075461221690836120f9565b60075561222f61222683836120a0565b600854906120f9565b600855601b5460408051858152905132926001600160a01b031691600080516020612a2c833981519152919081900360200190a3601b546040805184815290516000926001600160a01b031691600080516020612a2c833981519152919081900360200190a360408051868152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506013805461ff0019169055505050565b6013805461ff001916610100179055600061230830610f56565b60408051600280825260608083018452939450479392602083019080368337019050509050308160008151811061233b57fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561238f57600080fd5b505afa1580156123a3573d6000803e3d6000fd5b505050506040513d60208110156123b957600080fd5b50518151829060019081106123ca57fe5b6001600160a01b0392831660209182029290920101526019546123f09130911685611871565b60195460405163791ac94760e01b8152600481018581526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968b968a9594939092909160c40190602080880191028083838b5b8381101561247657818101518382015260200161245e565b505050509050019650505050505050600060405180830381600087803b15801561249f57600080fd5b505af11580156124b3573d6000803e3d6000fd5b505050506124ca82476120f990919063ffffffff16565b604080518581526020810183905281519294507fc7930294ac86944079f9f4a60abedac1187a74a770c6928ea39d9455ebeaf90f929081900390910190a150506013805461ff001916905550565b600d546000908390156125ab576000612548600c54600201600a0a610d06600d54886120a090919063ffffffff16565b905061255482826120f9565b915061256361222682866120a0565b6008556010546125739082612046565b6010556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b600e54156126575760006125d6600c54600201600a0a610d06600e54886120a090919063ffffffff16565b90506125e282826120f9565b91506126076125f182866120a0565b3060009081526004602052604090205490612046565b306000908152600460205260409020556012546126249082612046565b60125560408051828152905130916001600160a01b03891691600080516020612a2c8339815191529181900360200190a3505b949350505050565b600081836126ae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e43578181015183820152602001611e2b565b5060008385816126ba57fe5b0495945050505050565b60408051600280825260608083018452926020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561272857600080fd5b505afa15801561273c573d6000803e3d6000fd5b505050506040513d602081101561275257600080fd5b50518151829060009061276157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061278f57fe5b6001600160a01b03928316602091820292909201810191909152601954601b5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612828578181015183820152602001612810565b50505050905001955050505050506000604051808303818588803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737355464f523a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7755464f523a204163636f756e7420697320616c7265616479206578636c7564656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572596f752063616e6e6f74207472616e73666572206d6f7265207468616e2035313020746f6b656e732e5472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef55464f523a204163636f756e7420697320616c726561647920696e636c7564656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f55464f523a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642ea26469706673582212207bf6545357c48736727dcd54da9fb74670b8e430e34173279fbde776923530fa64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e5507a6777dada54869f30c7a416c7d1f59502248ba26910deec117de6ea447664736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c80635b7dcaed1161015a578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e146108c2578063e563037e146108fd578063e5d41c6b14610912578063f2cc0c1814610927578063f2fde38b1461095a578063f84354f11461098d57610293565b8063a9059cbb146107c1578063c4081a4c146107fa578063c49b9a8014610824578063cba0e99614610850578063cd980e5614610883578063d400336f146108ad57610293565b80637e64c7aa116101135780637e64c7aa1461071f5780638a8c523c146107345780638da5cb5b1461074957806395d89b411461075e5780639d46cf8a14610773578063a457c2d71461078857610293565b80635b7dcaed146106335780635ce15f7e1461065d5780636612e66f146106875780636bc87c3a146106c257806370a08231146106d7578063715018a61461070a57610293565b8063313ce567116101fe5780634549b039116101b75780634549b0391461056c57806348a464731461059e57806349bd5a5e146105c85780634a74bb02146105dd5780634ada218b146105f257806355a50ede1461060757610293565b8063313ce5671461049d578063355bc60b146104c8578063357bf15c146104dd57806338e07fb214610509578063395093511461051e5780633b124fe71461055757610293565b80631694505e116102505780631694505e146103c057806316d1d916146103f157806318160ddd1461040657806319db457d1461041b57806323b872dd146104305780632d8381191461047357610293565b806304b645271461029857806306fdde03146102bf578063095ea7b3146103495780630d9a521914610396578063106b9ca1146103ab57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6109c0565b60408051918252519081900360200190f35b3480156102cb57600080fd5b506102d46109c6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103826004803603604081101561036c57600080fd5b506001600160a01b038135169060200135610a5c565b604080519115158252519081900360200190f35b3480156103a257600080fd5b506102ad610a7a565b3480156103b757600080fd5b506102ad610a80565b3480156103cc57600080fd5b506103d5610a86565b604080516001600160a01b039092168252519081900360200190f35b3480156103fd57600080fd5b506102ad610a95565b34801561041257600080fd5b506102ad610a9b565b34801561042757600080fd5b506102ad610aa1565b34801561043c57600080fd5b506103826004803603606081101561045357600080fd5b506001600160a01b03813581169160208101359091169060400135610aa7565b34801561047f57600080fd5b506102ad6004803603602081101561049657600080fd5b5035610b2e565b3480156104a957600080fd5b506104b2610b90565b6040805160ff9092168252519081900360200190f35b3480156104d457600080fd5b506102ad610b99565b3480156104e957600080fd5b506105076004803603602081101561050057600080fd5b5035610b9f565b005b34801561051557600080fd5b50610382610bfc565b34801561052a57600080fd5b506103826004803603604081101561054157600080fd5b506001600160a01b038135169060200135610c0c565b34801561056357600080fd5b506102ad610c5a565b34801561057857600080fd5b506102ad6004803603604081101561058f57600080fd5b50803590602001351515610c60565b3480156105aa57600080fd5b50610507600480360360208110156105c157600080fd5b5035610d19565b3480156105d457600080fd5b506103d5610d76565b3480156105e957600080fd5b50610382610d85565b3480156105fe57600080fd5b50610382610d94565b34801561061357600080fd5b506105076004803603602081101561062a57600080fd5b50351515610d9d565b34801561063f57600080fd5b506105076004803603602081101561065657600080fd5b5035610e13565b34801561066957600080fd5b506105076004803603602081101561068057600080fd5b5035610e70565b34801561069357600080fd5b50610507600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001351515610ecd565b3480156106ce57600080fd5b506102ad610f50565b3480156106e357600080fd5b506102ad600480360360208110156106fa57600080fd5b50356001600160a01b0316610f56565b34801561071657600080fd5b50610507610fb8565b34801561072b57600080fd5b506102ad61105a565b34801561074057600080fd5b50610507611060565b34801561075557600080fd5b506103d5611100565b34801561076a57600080fd5b506102d461110f565b34801561077f57600080fd5b506102ad61116d565b34801561079457600080fd5b50610382600480360360408110156107ab57600080fd5b506001600160a01b038135169060200135611173565b3480156107cd57600080fd5b50610382600480360360408110156107e457600080fd5b506001600160a01b0381351690602001356111db565b34801561080657600080fd5b506105076004803603602081101561081d57600080fd5b50356111ef565b34801561083057600080fd5b506105076004803603602081101561084757600080fd5b5035151561124c565b34801561085c57600080fd5b506103826004803603602081101561087357600080fd5b50356001600160a01b03166112f5565b34801561088f57600080fd5b50610507600480360360208110156108a657600080fd5b5035611313565b3480156108b957600080fd5b506102ad611370565b3480156108ce57600080fd5b506102ad600480360360408110156108e557600080fd5b506001600160a01b0381358116916020013516611376565b34801561090957600080fd5b506103d56113a1565b34801561091e57600080fd5b506102ad6113b0565b34801561093357600080fd5b506105076004803603602081101561094a57600080fd5b50356001600160a01b03166113b6565b34801561096657600080fd5b506105076004803603602081101561097d57600080fd5b50356001600160a01b03166115ca565b34801561099957600080fd5b50610507600480360360208110156109b057600080fd5b50356001600160a01b03166116c2565b60165481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a515780601f10610a2657610100808354040283529160200191610a51565b820191906000526020600020905b815481529060010190602001808311610a3457829003601f168201915b505050505090505b90565b6000610a70610a6961186d565b8484611871565b5060015b92915050565b60115481565b60175481565b6019546001600160a01b031681565b60185481565b60075490565b600c5481565b6000610ab484848461195d565b610b2484610ac061186d565b610b1f85604051806060016040528060288152602001612992602891396001600160a01b038a16600090815260066020526040812090610afe61186d565b6001600160a01b031681526020810191909152604001600020549190611def565b611871565b5060019392505050565b6000600854821115610b715760405162461bcd60e51b815260040180806020018281038252602a815260200180612890602a913960400191505060405180910390fd5b6000610b7b611e86565b9050610b878382611ffd565b9150505b919050565b60035460ff1690565b60105481565b610ba761186d565b6000546001600160a01b03908116911614610bf7576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600e55565b6013546301000000900460ff1681565b6000610a70610c1961186d565b84610b1f8560066000610c2a61186d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612046565b600d5481565b6000600754831115610cb9576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610cd757610cd0610cc9611e86565b84906120a0565b9050610a74565b610cd0610ce2611e86565b610d13610d0c600c54600a0a600201610d06600d54896120a090919063ffffffff16565b90611ffd565b86906120f9565b906120a0565b610d2161186d565b6000546001600160a01b03908116911614610d71576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601455565b601a546001600160a01b031681565b60135462010000900460ff1681565b60135460ff1681565b610da561186d565b6000546001600160a01b03908116911614610df5576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805491151563010000000263ff00000019909216919091179055565b610e1b61186d565b6000546001600160a01b03908116911614610e6b576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601855565b610e7861186d565b6000546001600160a01b03908116911614610ec8576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b601555565b610ed561186d565b6000546001600160a01b03908116911614610f25576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600e5481565b6001600160a01b0381166000908152600a602052604081205460ff1615610f9657506001600160a01b038116600090815260056020526040902054610b8b565b6001600160a01b038216600090815260046020526040902054610a7490610b2e565b610fc061186d565b6000546001600160a01b03908116911614611010576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600f5481565b61106861186d565b6000546001600160a01b039081169116146110b8576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601655565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610a515780601f10610a2657610100808354040283529160200191610a51565b60125481565b6000610a7061118061186d565b84610b1f85604051806060016040528060258152602001612ab660259139600660006111aa61186d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611def565b6000610a706111e861186d565b848461195d565b6111f761186d565b6000546001600160a01b03908116911614611247576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600d55565b61125461186d565b6000546001600160a01b039081169116146112a4576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6013805482151562010000810262ff0000199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600a602052604090205460ff1690565b61131b61186d565b6000546001600160a01b0390811691161461136b576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b600f55565b60155481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b601b546001600160a01b031681565b60145481565b6113be61186d565b6000546001600160a01b0390811691161461140e576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561146a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612adb6028913960400191505060405180910390fd5b6001600160a01b0381163014156114b25760405162461bcd60e51b815260040180806020018281038252602d815260200180612902602d913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff161561150a5760405162461bcd60e51b81526004018080602001828103825260218152602001806129716021913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205415611564576001600160a01b03811660009081526004602052604090205461154a90610b2e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6115d261186d565b6000546001600160a01b03908116911614611622576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b0381166116675760405162461bcd60e51b81526004018080602001828103825260268152602001806128ba6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6116ca61186d565b6000546001600160a01b0390811691161461171a576040805162461bcd60e51b815260206004820181905260248201526000805160206129ba833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff166117715760405162461bcd60e51b8152600401808060200182810382526021815260200180612a4c6021913960400191505060405180910390fd5b60005b600b5481101561186957816001600160a01b0316600b828154811061179557fe5b6000918252602090912001546001600160a01b0316141561186157600b805460001981019081106117c257fe5b600091825260209091200154600b80546001600160a01b0390921691839081106117e857fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061183a57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611869565b600101611774565b5050565b3390565b6001600160a01b0383166118b65760405162461bcd60e51b8152600401808060200182810382526024815260200180612a926024913960400191505060405180910390fd5b6001600160a01b0382166118fb5760405162461bcd60e51b81526004018080602001828103825260228152602001806128e06022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166119a25760405162461bcd60e51b8152600401808060200182810382526025815260200180612a6d6025913960400191505060405180910390fd5b6001600160a01b0382166119e75760405162461bcd60e51b815260040180806020018281038252602381526020018061286d6023913960400191505060405180910390fd5b60008111611a265760405162461bcd60e51b8152600401808060200182810382526029815260200180612a036029913960400191505060405180910390fd5b60135460ff1680611a4f5750611a3a611100565b6001600160a01b0316836001600160a01b0316145b80611a725750611a5d611100565b6001600160a01b0316826001600160a01b0316145b80611a9557506001600160a01b03831660009081526009602052604090205460ff165b80611ab857506001600160a01b03821660009081526009602052604090205460ff165b611af35760405162461bcd60e51b815260040180806020018281038252602181526020018061292f6021913960400191505060405180910390fd5b60165460b401421180611b0b57506476be5e6c008111155b611b465760405162461bcd60e51b81526004018080602001828103825260298152602001806129da6029913960400191505060405180910390fd5b601354610100900460ff16158015611b6c5750601a546001600160a01b03848116911614155b15611bf85760185460175460019147910142118015611b9457506013546301000000900460ff165b8015611ba257506015548110155b15611bb557611bb08161213b565b600091505b8115611bf5576000611bc630610f56565b60145490915081108015908190611be5575060135462010000900460ff165b15611bf257611bf26122ee565b50505b50505b806000611c03611e86565b6001600160a01b03861660009081526009602052604090205490915060ff16158015611c4857506001600160a01b03841660009081526009602052604090205460ff16155b8015611c5c5750601354610100900460ff16155b15611c6f57611c6c858483612518565b91505b611c9b611c7c84836120a0565b6001600160a01b038716600090815260046020526040902054906120f9565b6001600160a01b038616600090815260046020526040902055611ce0611cc183836120a0565b6001600160a01b03861660009081526004602052604090205490612046565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600a909152205460ff1615611d51576001600160a01b038516600090815260056020526040902054611d3790846120f9565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600a602052604090205460ff1615611daf576001600160a01b038416600090815260056020526040902054611d959083612046565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b0316600080516020612a2c833981519152846040518082815260200191505060405180910390a35050505050565b60008184841115611e7e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e43578181015183820152602001611e2b565b50505050905090810190601f168015611e705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60085460075460009190825b600b54811015611fbd578260046000600b8481548110611eae57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f1357508160056000600b8481548110611eec57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f3157600754600854611f2791611ffd565b9350505050610a59565b611f7160046000600b8481548110611f4557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f9565b9250611fb360056000600b8481548110611f8757fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f9565b9150600101611e92565b50600754600854611fcd91611ffd565b821015611fec57600754600854611fe391611ffd565b92505050610a59565b611ff68282611ffd565b9250505090565b600061203f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061265f565b9392505050565b60008282018381101561203f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826120af57506000610a74565b828202828482816120bc57fe5b041461203f5760405162461bcd60e51b81526004018080602001828103825260218152602001806129506021913960400191505060405180910390fd5b600061203f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611def565b6013805461ff00191661010017905542601755612157816126c4565b601b5460009061216f906001600160a01b0316610f56565b90506000612194600c54600201600a0a610d06600f54856120a090919063ffffffff16565b905060006121a283836120f9565b905060006121ae611e86565b90506121d36121bd84836120a0565b3260009081526004602052604090205490612046565b3260009081526004602052604080822092909255601b546001600160a01b03168152908120556011546122069083612046565b60115560075461221690836120f9565b60075561222f61222683836120a0565b600854906120f9565b600855601b5460408051858152905132926001600160a01b031691600080516020612a2c833981519152919081900360200190a3601b546040805184815290516000926001600160a01b031691600080516020612a2c833981519152919081900360200190a360408051868152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506013805461ff0019169055505050565b6013805461ff001916610100179055600061230830610f56565b60408051600280825260608083018452939450479392602083019080368337019050509050308160008151811061233b57fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561238f57600080fd5b505afa1580156123a3573d6000803e3d6000fd5b505050506040513d60208110156123b957600080fd5b50518151829060019081106123ca57fe5b6001600160a01b0392831660209182029290920101526019546123f09130911685611871565b60195460405163791ac94760e01b8152600481018581526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968b968a9594939092909160c40190602080880191028083838b5b8381101561247657818101518382015260200161245e565b505050509050019650505050505050600060405180830381600087803b15801561249f57600080fd5b505af11580156124b3573d6000803e3d6000fd5b505050506124ca82476120f990919063ffffffff16565b604080518581526020810183905281519294507fc7930294ac86944079f9f4a60abedac1187a74a770c6928ea39d9455ebeaf90f929081900390910190a150506013805461ff001916905550565b600d546000908390156125ab576000612548600c54600201600a0a610d06600d54886120a090919063ffffffff16565b905061255482826120f9565b915061256361222682866120a0565b6008556010546125739082612046565b6010556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b600e54156126575760006125d6600c54600201600a0a610d06600e54886120a090919063ffffffff16565b90506125e282826120f9565b91506126076125f182866120a0565b3060009081526004602052604090205490612046565b306000908152600460205260409020556012546126249082612046565b60125560408051828152905130916001600160a01b03891691600080516020612a2c8339815191529181900360200190a3505b949350505050565b600081836126ae5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e43578181015183820152602001611e2b565b5060008385816126ba57fe5b0495945050505050565b60408051600280825260608083018452926020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561272857600080fd5b505afa15801561273c573d6000803e3d6000fd5b505050506040513d602081101561275257600080fd5b50518151829060009061276157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061278f57fe5b6001600160a01b03928316602091820292909201810191909152601954601b5460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612828578181015183820152602001612810565b50505050905001955050505050506000604051808303818588803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737355464f523a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7755464f523a204163636f756e7420697320616c7265616479206578636c7564656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572596f752063616e6e6f74207472616e73666572206d6f7265207468616e2035313020746f6b656e732e5472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef55464f523a204163636f756e7420697320616c726561647920696e636c7564656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f55464f523a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642ea26469706673582212207bf6545357c48736727dcd54da9fb74670b8e430e34173279fbde776923530fa64736f6c634300060c0033
Deployed Bytecode Sourcemap
21168:16045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22517:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24079:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25099:193;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25099:193:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22171:28;;;;;;;;;;;;;:::i;22557:34::-;;;;;;;;;;;;;:::i;22657:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;22657:42:0;;;;;;;;;;;;;;22599:45;;;;;;;;;;;;;:::i;24356:99::-;;;;;;;;;;;;;:::i;21973:30::-;;;;;;;;;;;;;:::i;25300:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25300:368:0;;;;;;;;;;;;;;;;;:::i;27038:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27038:368:0;;:::i;24265:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22137:27;;;;;;;;;;;;;:::i;36314:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36314:93:0;;:::i;:::-;;22372:35;;;;;;;;;;;;;:::i;25676:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25676:300:0;;;;;;;;:::i;22010:28::-;;;;;;;;;;;;;:::i;26510:520::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26510:520:0;;;;;;;;;:::i;36536:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36536:112:0;;:::i;22706:29::-;;;;;;;;;;;;;:::i;22325:40::-;;;;;;;;;;;;;:::i;22248:34::-;;;;;;;;;;;;;:::i;36902:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36902:105:0;;;;:::i;36778:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36778:112:0;;:::i;36660:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36660:106:0;;:::i;35901:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35901:133:0;;;;;;;;;;:::i;22045:34::-;;;;;;;;;;;;;:::i;24463:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24463:215:0;-1:-1:-1;;;;;24463:215:0;;:::i;18670:148::-;;;;;;;;;;;;;:::i;22088:40::-;;;;;;;;;;;;;:::i;37019:150::-;;;;;;;;;;;;;:::i;18028:79::-;;;;;;;;;;;;;:::i;24170:87::-;;;;;;;;;;;;;:::i;22206:33::-;;;;;;;;;;;;;:::i;25984:400::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25984:400:0;;;;;;;;:::i;24686:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24686:213:0;;;;;;;;:::i;36221:81::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36221:81:0;;:::i;36046:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36046:163:0;;;;:::i;26392:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26392:110:0;-1:-1:-1;;;;;26392:110:0;;:::i;36419:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36419:105:0;;:::i;22467:37::-;;;;;;;;;;;;;:::i;24907:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24907:184:0;;;;;;;;;;:::i;22742:23::-;;;;;;;;;;;;;:::i;22420:40::-;;;;;;;;;;;;;:::i;27414:646::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27414:646:0;-1:-1:-1;;;;;27414:646:0;;:::i;18973:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18973:281:0;-1:-1:-1;;;;;18973:281:0;;:::i;28068:490::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28068:490:0;-1:-1:-1;;;;;28068:490:0;;:::i;22517:31::-;;;;:::o;24079:83::-;24149:5;24142:12;;;;;;;;-1:-1:-1;;24142:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24116:13;;24142:12;;24149:5;;24142:12;;24149:5;24142:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24079:83;;:::o;25099:193::-;25201:4;25223:39;25232:12;:10;:12::i;:::-;25246:7;25255:6;25223:8;:39::i;:::-;-1:-1:-1;25280:4:0;25099:193;;;;;:::o;22171:28::-;;;;:::o;22557:34::-;;;;:::o;22657:42::-;;;-1:-1:-1;;;;;22657:42:0;;:::o;22599:45::-;;;;:::o;24356:99::-;24436:11;;24356:99;:::o;21973:30::-;;;;:::o;25300:368::-;25440:4;25457:34;25467:6;25474:9;25484:6;25457:9;:34::i;:::-;25519:119;25528:6;25535:12;:10;:12::i;:::-;25548:89;25587:6;25548:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25548:19:0;;;;;;:11;:19;;;;;;25568:12;:10;:12::i;:::-;-1:-1:-1;;;;;25548:33:0;;;;;;;;;;;;-1:-1:-1;25548:33:0;;;:89;:37;:89::i;:::-;25519:8;:119::i;:::-;-1:-1:-1;25656:4:0;25300:368;;;;;:::o;27038:::-;27141:7;27208:16;;27188;:36;;27166:128;;;;-1:-1:-1;;;27166:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27305:19;27327:20;:18;:20::i;:::-;27305:42;-1:-1:-1;27365:33:0;:16;27305:42;27365:20;:33::i;:::-;27358:40;;;27038:368;;;;:::o;24265:83::-;24331:9;;;;24265:83;:::o;22137:27::-;;;;:::o;36314:93::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36380:13:::1;:19:::0;36314:93::o;22372:35::-;;;;;;;;;:::o;25676:300::-;25791:4;25813:133;25836:12;:10;:12::i;:::-;25863:7;25885:50;25924:10;25885:11;:25;25897:12;:10;:12::i;:::-;-1:-1:-1;;;;;25885:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;25885:25:0;;;:34;;;;;;;;;;;:38;:50::i;22010:28::-;;;;:::o;26510:520::-;26632:7;26680:11;;26665;:26;;26657:70;;;;;-1:-1:-1;;;26657:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26743:17;26738:285;;26784:37;26800:20;:18;:20::i;:::-;26784:11;;:15;:37::i;:::-;26777:44;;;;26738:285;26878:133;26972:20;:18;:20::i;:::-;26878:67;26894:50;26928:11;;26923:2;:16;26942:1;26923:20;26894:24;26910:7;;26894:11;:15;;:24;;;;:::i;:::-;:28;;:50::i;:::-;26878:11;;:15;:67::i;:::-;:71;;:133::i;36536:112::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36612:19:::1;:28:::0;36536:112::o;22706:29::-;;;-1:-1:-1;;;;;22706:29:0;;:::o;22325:40::-;;;;;;;;;:::o;22248:34::-;;;;;;:::o;36902:105::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36973:16:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36973:26:0;;::::1;::::0;;;::::1;::::0;;36902:105::o;36778:112::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36854:17:::1;:28:::0;36778:112::o;36660:106::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36733:16:::1;:25:::0;36660:106::o;35901:133::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35989:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;35989:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35901:133::o;22045:34::-;;;;:::o;24463:215::-;-1:-1:-1;;;;;24553:20:0;;24529:7;24553:20;;;:11;:20;;;;;;;;24549:55;;;-1:-1:-1;;;;;;24582:22:0;;;;;;:13;:22;;;;;;24575:29;;24549:55;-1:-1:-1;;;;;24642:27:0;;;;;;:18;:27;;;;;;24622:48;;:19;:48::i;18670:148::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;18777:1:::1;18761:6:::0;;18740:40:::1;::::0;-1:-1:-1;;;;;18761:6:0;;::::1;::::0;18740:40:::1;::::0;18777:1;;18740:40:::1;18808:1;18791:19:::0;;-1:-1:-1;;;;;;18791:19:0::1;::::0;;18670:148::o;22088:40::-;;;;:::o;37019:150::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;37076:14:::1;:21:::0;;-1:-1:-1;;37076:21:0::1;37093:4;37076:21:::0;;::::1;::::0;;;37108:20:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;37158:3;37139:16;:22:::0;37019:150::o;18028:79::-;18066:7;18093:6;-1:-1:-1;;;;;18093:6:0;18028:79;:::o;24170:87::-;24242:7;24235:14;;;;;;;-1:-1:-1;;24235:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:13;;24235:14;;24242:7;;24235:14;;24242:7;24235:14;;;;;;;;;;;;;;;;;;;;;;;;22206:33;;;;:::o;25984:400::-;26104:4;26126:228;26149:12;:10;:12::i;:::-;26176:7;26198:145;26255:15;26198:145;;;;;;;;;;;;;;;;;:11;:25;26210:12;:10;:12::i;:::-;-1:-1:-1;;;;;26198:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26198:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;24686:213::-;24808:4;24829:40;24839:12;:10;:12::i;:::-;24852:9;24862:6;24829:9;:40::i;36221:81::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36281:7:::1;:13:::0;36221:81::o;36046:163::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36122:21:::1;:31:::0;;;::::1;;::::0;;::::1;-1:-1:-1::0;;36122:31:0;;::::1;::::0;;;::::1;::::0;;;36164:37:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;36046:163:::0;:::o;26392:110::-;-1:-1:-1;;;;;26474:20:0;26450:4;26474:20;;;:11;:20;;;;;;;;;26392:110::o;36419:105::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;36491:19:::1;:25:::0;36419:105::o;22467:37::-;;;;:::o;24907:184::-;-1:-1:-1;;;;;25056:18:0;;;25024:7;25056:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24907:184::o;22742:23::-;;;-1:-1:-1;;;;;22742:23:0;;:::o;22420:40::-;;;;:::o;27414:646::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;27520:42:::1;-1:-1:-1::0;;;;;27509:53:0;::::1;;;27487:143;;;;-1:-1:-1::0;;;27487:143:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27649:24:0;::::1;27668:4;27649:24;;27641:82;;;;-1:-1:-1::0;;;27641:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27743:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27742:21;27734:67;;;;-1:-1:-1::0;;;27734:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27816:27:0;::::1;27846:1;27816:27:::0;;;:18:::1;:27;::::0;;;;;:31;27812:169:::1;;-1:-1:-1::0;;;;;27927:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;27889:80:::1;::::0;:19:::1;:80::i;:::-;-1:-1:-1::0;;;;;27864:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:105;27812:169:::1;-1:-1:-1::0;;;;;27991:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27991:27:0::1;28014:4;27991:27:::0;;::::1;::::0;;;28029:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28029:23:0::1;::::0;;::::1;::::0;;27414:646::o;18973:281::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19076:22:0;::::1;19054:110;;;;-1:-1:-1::0;;;19054:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19201:6;::::0;;19180:38:::1;::::0;-1:-1:-1;;;;;19180:38:0;;::::1;::::0;19201:6;::::1;::::0;19180:38:::1;::::0;::::1;19229:6;:17:::0;;-1:-1:-1;;;;;;19229:17:0::1;-1:-1:-1::0;;;;;19229:17:0;;;::::1;::::0;;;::::1;::::0;;18973:281::o;28068:490::-;18250:12;:10;:12::i;:::-;18240:6;;-1:-1:-1;;;;;18240:6:0;;;:22;;;18232:67;;;;;-1:-1:-1;;;18232:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18232:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28149:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28141:66;;;;-1:-1:-1::0;;;28141:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28223:9;28218:333;28242:9;:16:::0;28238:20;::::1;28218:333;;;28300:7;-1:-1:-1::0;;;;;28284:23:0::1;:9;28294:1;28284:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28284:12:0::1;:23;28280:260;;;28343:9;28353:16:::0;;-1:-1:-1;;28353:20:0;;;28343:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;28328:9:::1;:12:::0;;-1:-1:-1;;;;;28343:31:0;;::::1;::::0;28338:1;;28328:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28328:46:0::1;-1:-1:-1::0;;;;;28328:46:0;;::::1;;::::0;;28393:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;28438:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28438:28:0::1;::::0;;28485:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28485:15:0;;;;;-1:-1:-1;;;;;;28485:15:0::1;::::0;;;;;28519:5:::1;;28280:260;28260:3;;28218:333;;;;28068:490:::0;:::o;1809:106::-;1897:10;1809:106;:::o;28566:371::-;-1:-1:-1;;;;;28693:19:0;;28685:68;;;;-1:-1:-1;;;28685:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28772:21:0;;28764:68;;;;-1:-1:-1;;;28764:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28845:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28897:32;;;;;;;;;;;;;;;;;28566:371;;;:::o;28945:2555::-;-1:-1:-1;;;;;29076:20:0;;29068:70;;;;-1:-1:-1;;;29068:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29157:23:0;;29149:71;;;;-1:-1:-1;;;29149:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29248:1;29239:6;:10;29231:64;;;;-1:-1:-1;;;29231:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29314:14;;;;;:35;;;29342:7;:5;:7::i;:::-;-1:-1:-1;;;;;29332:17:0;:6;-1:-1:-1;;;;;29332:17:0;;29314:35;:59;;;;29366:7;:5;:7::i;:::-;-1:-1:-1;;;;;29353:20:0;:9;-1:-1:-1;;;;;29353:20:0;;29314:59;:105;;;-1:-1:-1;;;;;;29394:25:0;;;;;;:17;:25;;;;;;;;29314:105;:137;;;-1:-1:-1;;;;;;29423:28:0;;;;;;:17;:28;;;;;;;;29314:137;29306:183;;;;-1:-1:-1;;;29306:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29595:16;;29614:9;29595:28;29589:3;:34;:54;;;;29638:5;29628:6;:15;;29589:54;29581:108;;;;-1:-1:-1;;;29581:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29808:16;;;;;;;29807:17;:44;;;;-1:-1:-1;29838:13:0;;-1:-1:-1;;;;;29828:23:0;;;29838:13;;29828:23;;29807:44;29804:798;;;30017:17;;30001:13;;29880:4;;29925:21;;30001:33;29995:3;:39;:77;;;;-1:-1:-1;30056:16:0;;;;;;;29995:77;:134;;;;;30113:16;;30094:15;:35;;29995:134;29992:236;;;30149:32;30165:15;30149;:32::i;:::-;30207:5;30200:12;;29992:236;30273:4;30270:321;;;30298:28;30329:24;30347:4;30329:9;:24::i;:::-;30423:19;;30298:55;;-1:-1:-1;30399:43:0;;;;;;;30466:44;;-1:-1:-1;30489:21:0;;;;;;;30466:44;30462:115;;;30535:18;:16;:18::i;:::-;30270:321;;;29804:798;;;30647:6;30622:22;30679:20;:18;:20::i;:::-;-1:-1:-1;;;;;30716:25:0;;;;;;:17;:25;;;;;;30664:35;;-1:-1:-1;30716:25:0;;30715:26;:59;;;;-1:-1:-1;;;;;;30746:28:0;;;;;;:17;:28;;;;;;;;30745:29;30715:59;:80;;;;-1:-1:-1;30779:16:0;;;;;;;30778:17;30715:80;30712:158;;;30828:30;30839:6;30846;30853:4;30828:10;:30::i;:::-;30811:47;;30712:158;30947:48;30978:16;:6;30989:4;30978:10;:16::i;:::-;-1:-1:-1;;;;;30947:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;30918:26:0;;;;;;:18;:26;;;;;:77;31038:59;31072:24;:14;31091:4;31072:18;:24::i;:::-;-1:-1:-1;;;;;31038:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;31006:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;31191:19;;;;;:11;:19;;;;;;;31187:109;;;-1:-1:-1;;;;;31251:21:0;;;;;;:13;:21;;;;;;:33;;31277:6;31251:25;:33::i;:::-;-1:-1:-1;;;;;31227:21:0;;;;;;:13;:21;;;;;:57;31187:109;-1:-1:-1;;;;;31310:22:0;;;;;;:11;:22;;;;;;;;31306:126;;;-1:-1:-1;;;;;31376:24:0;;;;;;:13;:24;;;;;;:44;;31405:14;31376:28;:44::i;:::-;-1:-1:-1;;;;;31349:24:0;;;;;;:13;:24;;;;;:71;31306:126;31466:9;-1:-1:-1;;;;;31449:43:0;31458:6;-1:-1:-1;;;;;31449:43:0;-1:-1:-1;;;;;;;;;;;31477:14:0;31449:43;;;;;;;;;;;;;;;;;;28945:2555;;;;;:::o;6732:226::-;6852:7;6888:12;6880:6;;;;6872:29;;;;-1:-1:-1;;;6872:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6924:5:0;;;6732:226::o;32568:808::-;32667:16;;32716:11;;32620:7;;32667:16;32620:7;32738:458;32762:9;:16;32758:20;;32738:458;;;32857:16;32822:18;:32;32841:9;32851:1;32841:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32841:12:0;32822:32;;;;;;;;;;;;;:51;;:113;;;32924:11;32894:13;:27;32908:9;32918:1;32908:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32908:12:0;32894:27;;;;;;;;;;;;;:41;32822:113;32800:191;;;32979:11;;32958:16;;:33;;:20;:33::i;:::-;32951:40;;;;;;;32800:191;33025:86;33064:18;:32;33083:9;33093:1;33083:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33083:12:0;33064:32;;;;;;;;;;;;;33025:16;;:20;:86::i;:::-;33006:105;;33140:44;33156:13;:27;33170:9;33180:1;33170:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33170:12:0;33156:27;;;;;;;;;;;;;33140:11;;:15;:44::i;:::-;33126:58;-1:-1:-1;32780:3:0;;32738:458;;;-1:-1:-1;33250:11:0;;33229:16;;:33;;:20;:33::i;:::-;33210:16;:52;33206:111;;;33305:11;;33284:16;;:33;;:20;:33::i;:::-;33277:40;;;;;;33206:111;33335:33;:16;33356:11;33335:20;:33::i;:::-;33328:40;;;;32568:808;:::o;8164:132::-;8222:7;8249:39;8253:1;8256;8249:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8242:46;8164:132;-1:-1:-1;;;8164:132:0:o;5829:181::-;5887:7;5919:5;;;5943:6;;;;5935:46;;;;;-1:-1:-1;;;5935:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7217:471;7275:7;7520:6;7516:47;;-1:-1:-1;7550:1:0;7543:8;;7516:47;7587:5;;;7591:1;7587;:5;:1;7611:5;;;;;:10;7603:56;;;;-1:-1:-1;;;7603:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6293:136;6351:7;6378:43;6382:1;6385;6378:43;;;;;;;;;;;;;;;;;:3;:43::i;34655:1234::-;23140:16;:23;;-1:-1:-1;;23140:23:0;;;;;34752:3:::1;34736:13;:19:::0;34921:33:::1;34938:15:::0;34921:16:::1;:33::i;:::-;35055:8;::::0;35014:20:::1;::::0;35037:28:::1;::::0;-1:-1:-1;;;;;35055:8:0::1;35037:9;:28::i;:::-;35014:51;;35076:23;35102:64;35149:11;;35163:1;35149:15;35144:2;:21;35102:37;35119:19;;35102:12;:16;;:37;;;;:::i;:64::-;35076:90:::0;-1:-1:-1;35177:20:0::1;35200:33;:12:::0;35076:90;35200:16:::1;:33::i;:::-;35177:56;;35254:12;35270:20;:18;:20::i;:::-;35254:36:::0;-1:-1:-1;35335:60:0::1;35369:25;:15:::0;35254:36;35369:19:::1;:25::i;:::-;35354:9;35335:29;::::0;;;:18:::1;:29;::::0;;;;;;:33:::1;:60::i;:::-;35322:9;35303:29;::::0;;;:18:::1;:29;::::0;;;;;:92;;;;35433:8:::1;::::0;-1:-1:-1;;;;;35433:8:0::1;35406:37:::0;;;;;:41;35484:13:::1;::::0;:31:::1;::::0;35502:12;35484:17:::1;:31::i;:::-;35468:13;:47:::0;35540:11:::1;::::0;:29:::1;::::0;35556:12;35540:15:::1;:29::i;:::-;35526:11;:43:::0;35599:44:::1;35620:22;:12:::0;35637:4;35620:16:::1;:22::i;:::-;35599:16;::::0;;:20:::1;:44::i;:::-;35580:16;:63:::0;35678:8:::1;::::0;35661:55:::1;::::0;;;;;;;35689:9:::1;::::0;-1:-1:-1;;;;;35678:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;35661:55:0;;;;;::::1;::::0;;::::1;35749:8;::::0;35732:53:::1;::::0;;;;;;;35768:1:::1;::::0;-1:-1:-1;;;;;35749:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;35732:53:0;;;;;::::1;::::0;;::::1;35801:80;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;23186:16:0;:24;;-1:-1:-1;;23186:24:0;;;-1:-1:-1;;;34655:1234:0:o;33384:834::-;23140:16;:23;;-1:-1:-1;;23140:23:0;;;;;;33465:24:::1;33483:4;33465:9;:24::i;:::-;33650:16;::::0;;33664:1:::1;33650:16:::0;;;33626:21:::1;33650:16:::0;;::::1;::::0;;33443:46;;-1:-1:-1;33520:21:0::1;::::0;33626;33650:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33650:16:0::1;33626:40;;33695:4;33677;33682:1;33677:7;;;;;;;;-1:-1:-1::0;;;;;33677:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;33721:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;33721:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;33677:7;;33721:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33721:22:0;33711:7;;:4;;33716:1:::1;::::0;33711:7;::::1;;;;;-1:-1:-1::0;;;;;33711:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;33788:15:::1;::::0;33756:62:::1;::::0;33773:4:::1;::::0;33788:15:::1;33806:11:::0;33756:8:::1;:62::i;:::-;33861:15;::::0;:224:::1;::::0;-1:-1:-1;;;33861:224:0;;::::1;::::0;::::1;::::0;;;:15:::1;:224:::0;;;;;;34039:4:::1;33861:224:::0;;;;;;34059:15:::1;33861:224:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33861:15:0;;::::1;::::0;:66:::1;::::0;33942:11;;34012:4;;34039;34059:15;33861:224;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:224:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34118:36;34144:9;34118:21;:25;;:36;;;;:::i;:::-;34170:40;::::0;;;;;::::1;::::0;::::1;::::0;;;;;34106:48;;-1:-1:-1;34170:40:0::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;23186:16:0;:24;;-1:-1:-1;;23186:24:0;;;-1:-1:-1;33384:834:0:o;31512:1048::-;31695:7;;31596;;31641:6;;31695:12;31692:336;;31723:14;31740:46;31769:11;;31783:1;31769:15;31764:2;:21;31740:19;31751:7;;31740:6;:10;;:19;;;;:::i;:46::-;31723:63;-1:-1:-1;31818:26:0;:14;31723:63;31818:18;:26::i;:::-;31801:43;-1:-1:-1;31878:38:0;31899:16;:6;31910:4;31899:10;:16::i;31878:38::-;31859:16;:57;31946:12;;:24;;31963:6;31946:16;:24::i;:::-;31931:12;:39;31990:26;;;;;;;;;;;;;;;;;31692:336;;32078:13;;:18;32075:436;;32112:20;32135:52;32170:11;;32184:1;32170:15;32165:2;:21;32135:25;32146:13;;32135:6;:10;;:25;;;;:::i;:52::-;32112:75;-1:-1:-1;32219:32:0;:14;32112:75;32219:18;:32::i;:::-;32202:49;-1:-1:-1;32302:61:0;32340:22;:12;32357:4;32340:16;:22::i;:::-;32329:4;32302:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;32293:4;32266:33;;;;:18;:33;;;;;:97;32399:18;;:36;;32422:12;32399:22;:36::i;:::-;32378:18;:57;32455:44;;;;;;;;32480:4;;-1:-1:-1;;;;;32455:44:0;;;-1:-1:-1;;;;;;;;;;;32455:44:0;;;;;;;;32075:436;;32538:14;31512:1048;-1:-1:-1;;;;31512:1048:0:o;8792:312::-;8912:7;8947:12;8940:5;8932:28;;;;-1:-1:-1;;;8932:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8971:9;8987:1;8983;:5;;;;;;;8792:312;-1:-1:-1;;;;;8792:312:0:o;34230:414::-;34318:16;;;34332:1;34318:16;;;34294:21;34318:16;;;;;34294:21;34318:16;;;;;;;;-1:-1:-1;;34355:15:0;;:22;;;-1:-1:-1;;;34355:22:0;;;;34294:40;;-1:-1:-1;;;;;;34355:15:0;;;;:20;;-1:-1:-1;34355:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34355:22:0;34345:7;;:4;;34350:1;;34345:7;;;;;;;;;:32;-1:-1:-1;;;;;34345:32:0;;;-1:-1:-1;;;;;34345:32:0;;;;;34406:4;34388;34393:1;34388:7;;;;;;;;-1:-1:-1;;;;;34388:23:0;;;:7;;;;;;;;;;:23;;;;34424:15;;34578:8;;34424:212;;-1:-1:-1;;;34424:212:0;;:15;:212;;;;;;34578:8;;;34424:212;;;;;;34606:15;34424:212;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;34498:9;;34424:15;;34547:4;;34578:8;;34606:15;;34424:212;;;;;;;;;;;;;;;:15;:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34230:414;;:::o
Swarm Source
ipfs://e5507a6777dada54869f30c7a416c7d1f59502248ba26910deec117de6ea4476
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.