ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 Turkey
Holders
102
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,005,843,660,263.534733082 TurkeyValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Turkey
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.3; /** * @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); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /* * @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 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 view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () payable { _owner = 0x5A4B7d72bfBB3189D5cfffbF940739B674A8f187; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { 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 { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, 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); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); 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; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Turkey is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping(address=> bool) private isBlacklisted; mapping (address => bool) private _isExcluded; address[] private _excluded; address private _charityWalletAddress = 0x92F8D852929A8F7e9b638DCA4fEEF4949ABaD9Cd; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Turkey"; string private _symbol = "Turkey"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _charityFee = 10; // uint256 private _previousCharityFee = _charityFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 1000000000000000 * 10**9; uint256 private numTokensSellToAddToLiquidity = 10 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function blackList(address _user) public onlyOwner { require(!isBlacklisted[_user], "user already blacklisted"); isBlacklisted[_user] = true; // emit events as well } function removeFromBlacklist(address _user) public onlyOwner { require(isBlacklisted[_user], "user already whitelisted"); isBlacklisted[_user] = false; // emit events as well } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setCharityFeePercent(uint256 charityFee) external onlyOwner() { _charityFee = charityFee; } function setMaxAmount(uint256 maxAmount) external onlyOwner() { _maxTxAmount = maxAmount; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tCharity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tCharity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tCharity = calculateCharityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tCharity); return (tTransferAmount, tFee, tLiquidity, tCharity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeCharity(uint256 tCharity) private { uint256 currentRate = _getRate(); uint256 rCharity = tCharity.mul(currentRate); _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rCharity); if(_isExcluded[_charityWalletAddress]) _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tCharity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateCharityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_charityFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousCharityFee = _charityFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _charityFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _charityFee = _previousCharityFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","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
60c0604052600880546001600160a01b0319167392f8d852929a8f7e9b638dca4feef4949abad9cd17905569d3c21bcecceda10000006009819055620000489060001962000558565b6200005690600019620004f5565b600a55604080518082019091526006808252655475726b657960d01b60209092019182526200008891600c916200041d565b50604080518082019091526006808252655475726b657960d01b6020909201918252620000b891600d916200041d565b50600e805460ff191660091790556001600f8190556010819055600a601181905560125560138190556014556015805461ff00191661010017905569d3c21bcecceda10000006016556402540be4006017553480156200011757600080fd5b50600080546001600160a01b031916735a4b7d72bfbb3189d5cfffbf940739b674a8f18790811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a5460016000620001856000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001fc57600080fd5b505afa15801562000211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002379190620004c3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028057600080fd5b505afa15801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb9190620004c3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200030457600080fd5b505af115801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f9190620004c3565b6001600160601b0319606091821b811660a0529082901b16608052600160046000620003736000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003c66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200040e91815260200190565b60405180910390a3506200057b565b8280546200042b906200051b565b90600052602060002090601f0160209004810192826200044f57600085556200049a565b82601f106200046a57805160ff19168380011785556200049a565b828001600101855582156200049a579182015b828111156200049a5782518255916020019190600101906200047d565b50620004a8929150620004ac565b5090565b5b80821115620004a85760008155600101620004ad565b600060208284031215620004d657600080fd5b81516001600160a01b0381168114620004ee57600080fd5b9392505050565b6000828210156200051657634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200053057607f821691505b602082108114156200055257634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200057657634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c612880620005d16000396000818161049d01526116b40152600081816102ee01528181611cf901528181611dc101528181611dfd01528181611e6f0152611e9601526128806000f3fe6080604052600436106102345760003560e01c80634fe47f701161012e5780638ee88c53116100ab578063c49b9a801161006f578063c49b9a80146106c4578063d543dbeb146106e4578063dd62ed3e14610704578063ea2f0b371461074a578063f2fde38b1461076a57600080fd5b80638ee88c531461062f57806395d89b411461064f578063a457c2d714610664578063a9059cbb14610684578063af41063b146106a457600080fd5b806370a08231116100f257806370a082311461058d578063715018a6146105ad5780637d1db4a5146105c257806388f82020146105d85780638da5cb5b1461061157600080fd5b80634fe47f70146104de57806352390c02146104fe5780635342acb41461051e578063537df3b6146105575780636bc87c3a1461057757600080fd5b80633685d419116101bc578063437823ec11610180578063437823ec1461042b5780634549b0391461044b5780634838d1651461046b57806349bd5a5e1461048b5780634a74bb02146104bf57600080fd5b80633685d4191461039f57806339509351146103bf5780633b124fe7146103df5780633bd5d173146103f557806340f8007a1461041557600080fd5b80631694505e116102035780631694505e146102dc57806318160ddd1461032857806323b872dd1461033d5780632d8381191461035d578063313ce5671461037d57600080fd5b8063061c82d01461024057806306fdde0314610262578063095ea7b31461028d57806313114a9d146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b36600461256f565b61078a565b005b34801561026e57600080fd5b506102776107c2565b60405161028491906125e2565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004612528565b610854565b6040519015158152602001610284565b3480156102c957600080fd5b50600b545b604051908152602001610284565b3480156102e857600080fd5b506103107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610284565b34801561033457600080fd5b506009546102ce565b34801561034957600080fd5b506102ad6103583660046124e7565b61086b565b34801561036957600080fd5b506102ce61037836600461256f565b6108d4565b34801561038957600080fd5b50600e5460405160ff9091168152602001610284565b3480156103ab57600080fd5b506102606103ba366004612474565b610958565b3480156103cb57600080fd5b506102ad6103da366004612528565b610b0f565b3480156103eb57600080fd5b506102ce600f5481565b34801561040157600080fd5b5061026061041036600461256f565b610b45565b34801561042157600080fd5b506102ce60115481565b34801561043757600080fd5b50610260610446366004612474565b610c31565b34801561045757600080fd5b506102ce610466366004612588565b610c7f565b34801561047757600080fd5b50610260610486366004612474565b610d0e565b34801561049757600080fd5b506103107f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506015546102ad90610100900460ff1681565b3480156104ea57600080fd5b506102606104f936600461256f565b610dc5565b34801561050a57600080fd5b50610260610519366004612474565b610df4565b34801561052a57600080fd5b506102ad610539366004612474565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561056357600080fd5b50610260610572366004612474565b610f47565b34801561058357600080fd5b506102ce60135481565b34801561059957600080fd5b506102ce6105a8366004612474565b610ffa565b3480156105b957600080fd5b50610260611059565b3480156105ce57600080fd5b506102ce60165481565b3480156105e457600080fd5b506102ad6105f3366004612474565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561061d57600080fd5b506000546001600160a01b0316610310565b34801561063b57600080fd5b5061026061064a36600461256f565b6110cd565b34801561065b57600080fd5b506102776110fc565b34801561067057600080fd5b506102ad61067f366004612528565b61110b565b34801561069057600080fd5b506102ad61069f366004612528565b61115a565b3480156106b057600080fd5b506102606106bf36600461256f565b611167565b3480156106d057600080fd5b506102606106df366004612554565b611196565b3480156106f057600080fd5b506102606106ff36600461256f565b611214565b34801561071057600080fd5b506102ce61071f3660046124ae565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075657600080fd5b50610260610765366004612474565b611264565b34801561077657600080fd5b50610260610785366004612474565b6112af565b6000546001600160a01b031633146107bd5760405162461bcd60e51b81526004016107b490612637565b60405180910390fd5b600f55565b6060600c80546107d19061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd9061274d565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b6000610861338484611399565b5060015b92915050565b60006108788484846114bd565b6108ca84336108c5856040518060600160405280602881526020016127fe602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061176e565b611399565b5060019392505050565b6000600a5482111561093b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016107b4565b600061094561179a565b905061095183826117bd565b9392505050565b6000546001600160a01b031633146109825760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526006602052604090205460ff166109ea5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016107b4565b60005b600754811015610b0b57816001600160a01b031660078281548110610a1457610a146127cf565b6000918252602090912001546001600160a01b03161415610af95760078054610a3f90600190612736565b81548110610a4f57610a4f6127cf565b600091825260209091200154600780546001600160a01b039092169183908110610a7b57610a7b6127cf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610ad357610ad36127b9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b0381612788565b9150506109ed565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108619185906108c590866117c9565b3360008181526006602052604090205460ff1615610bba5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016107b4565b6000610bc5836117d5565b5050506001600160a01b038616600090815260016020526040902054939450610bf393925084915050611830565b6001600160a01b038316600090815260016020526040902055600a54610c199082611830565b600a55600b54610c2990846117c9565b600b55505050565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610cd35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016107b4565b81610cf3576000610ce3846117d5565b5094965061086595505050505050565b6000610cfe846117d5565b5093965061086595505050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526005602052604090205460ff1615610da15760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107b4565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610def5760405162461bcd60e51b81526004016107b490612637565b601655565b6000546001600160a01b03163314610e1e5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526006602052604090205460ff1615610e875760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016107b4565b6001600160a01b03811660009081526001602052604090205415610ee1576001600160a01b038116600090815260016020526040902054610ec7906108d4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b03163314610f715760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526005602052604090205460ff16610fd95760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107b4565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6001600160a01b03811660009081526006602052604081205460ff161561103757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610865906108d4565b6000546001600160a01b031633146110835760405162461bcd60e51b81526004016107b490612637565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110f75760405162461bcd60e51b81526004016107b490612637565b601355565b6060600d80546107d19061274d565b600061086133846108c585604051806060016040528060258152602001612826602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061176e565b60006108613384846114bd565b6000546001600160a01b031633146111915760405162461bcd60e51b81526004016107b490612637565b601155565b6000546001600160a01b031633146111c05760405162461bcd60e51b81526004016107b490612637565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061120990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461123e5760405162461bcd60e51b81526004016107b490612637565b61125e60646112588360095461183c90919063ffffffff16565b906117bd565b60165550565b6000546001600160a01b0316331461128e5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112d95760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811661133e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107b4565b6001600160a01b03821661145c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107b4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107b4565b6001600160a01b0382166115835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107b4565b600081116115e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107b4565b6000546001600160a01b0384811691161480159061161157506000546001600160a01b03838116911614155b15611679576016548111156116795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107b4565b600061168430610ffa565b9050601654811061169457506016545b601754811080159081906116ab575060155460ff16155b80156116e957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156116fc5750601554610100900460ff165b1561170f57601754915061170f82611848565b6001600160a01b03851660009081526004602052604090205460019060ff168061175157506001600160a01b03851660009081526004602052604090205460ff165b1561175a575060005b611766868686846118e6565b505050505050565b600081848411156117925760405162461bcd60e51b81526004016107b491906125e2565b505050900390565b60008060006117a7611a69565b90925090506117b682826117bd565b9250505090565b600061095182846126f5565b600061095182846126dd565b60008060008060008060008060008060006117ef8c611beb565b935093509350935060008060006118108f87878761180b61179a565b611c40565b919f509d509b509599509397509195509350505050919395979092949650565b60006109518284612736565b60006109518284612717565b6015805460ff1916600117905560006118628260026117bd565b905060006118708383611830565b90504761187c83611ca2565b60006118884783611830565b90506118948382611e69565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff19169055505050565b806118f3576118f3611f7e565b6001600160a01b03841660009081526006602052604090205460ff16801561193457506001600160a01b03831660009081526006602052604090205460ff16155b1561194957611944848484611fb7565b611a47565b6001600160a01b03841660009081526006602052604090205460ff1615801561198a57506001600160a01b03831660009081526006602052604090205460ff165b1561199a576119448484846120fd565b6001600160a01b03841660009081526006602052604090205460ff161580156119dc57506001600160a01b03831660009081526006602052604090205460ff16155b156119ec576119448484846121bc565b6001600160a01b03841660009081526006602052604090205460ff168015611a2c57506001600160a01b03831660009081526006602052604090205460ff165b15611a3c57611944848484612216565b611a478484846121bc565b80611a6357611a63601054600f55601254601155601454601355565b50505050565b600a546009546000918291825b600754811015611bbb57826001600060078481548110611a9857611a986127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b035750816002600060078481548110611adc57611adc6127cf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1957600a54600954945094505050509091565b611b5f6001600060078481548110611b3357611b336127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611830565b9250611ba76002600060078481548110611b7b57611b7b6127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611830565b915080611bb381612788565b915050611a76565b50600954600a54611bcb916117bd565b821015611be257600a546009549350935050509091565b90939092509050565b6000806000806000611bfc8661229f565b90506000611c09876122bb565b90506000611c16886122d7565b90506000611c3082611c2a85818d89611830565b90611830565b9993985091965094509092505050565b6000808080611c4f898661183c565b90506000611c5d898761183c565b90506000611c6b898861183c565b90506000611c79898961183c565b90506000611c8d82611c2a85818989611830565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cd757611cd76127cf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d5057600080fd5b505afa158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190612491565b81600181518110611d9b57611d9b6127cf565b60200260200101906001600160a01b031690816001600160a01b031681525050611de6307f000000000000000000000000000000000000000000000000000000000000000084611399565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e3b90859060009086903090429060040161266c565b600060405180830381600087803b158015611e5557600080fd5b505af1158015611766573d6000803e3d6000fd5b611e94307f000000000000000000000000000000000000000000000000000000000000000084611399565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611edb6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f7791906125b4565b5050505050565b600f54158015611f8e5750601354155b15611f9557565b600f805460105560118054601255601380546014556000928390559082905555565b6000806000806000806000611fcb886117d5565b965096509650965096509650965061201188600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546120409088611830565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461206f90876117c9565b6001600160a01b038a16600090815260016020526040902055612091826122f3565b61209a8161237c565b6120a4858461243b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516120e991815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612111886117d5565b965096509650965096509650965061215787600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c1681526002909152205461218d90856117c9565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461206f90876117c9565b60008060008060008060006121d0886117d5565b965096509650965096509650965061204087600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b600080600080600080600061222a886117d5565b965096509650965096509650965061227088600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546121579088611830565b60006108656064611258600f548561183c90919063ffffffff16565b600061086560646112586013548561183c90919063ffffffff16565b600061086560646112586011548561183c90919063ffffffff16565b60006122fd61179a565b9050600061230b838361183c565b3060009081526001602052604090205490915061232890826117c9565b3060009081526001602090815260408083209390935560069052205460ff1615612377573060009081526002602052604090205461236690846117c9565b306000908152600260205260409020555b505050565b600061238661179a565b90506000612394838361183c565b6008546001600160a01b03166000908152600160205260409020549091506123bc90826117c9565b600880546001600160a01b03908116600090815260016020908152604080832095909555925490911681526006909152205460ff1615612377576008546001600160a01b031660009081526002602052604090205461241b90846117c9565b6008546001600160a01b0316600090815260026020526040902055505050565b600a546124489083611830565b600a55600b5461245890826117c9565b600b555050565b8035801515811461246f57600080fd5b919050565b60006020828403121561248657600080fd5b8135610951816127e5565b6000602082840312156124a357600080fd5b8151610951816127e5565b600080604083850312156124c157600080fd5b82356124cc816127e5565b915060208301356124dc816127e5565b809150509250929050565b6000806000606084860312156124fc57600080fd5b8335612507816127e5565b92506020840135612517816127e5565b929592945050506040919091013590565b6000806040838503121561253b57600080fd5b8235612546816127e5565b946020939093013593505050565b60006020828403121561256657600080fd5b6109518261245f565b60006020828403121561258157600080fd5b5035919050565b6000806040838503121561259b57600080fd5b823591506125ab6020840161245f565b90509250929050565b6000806000606084860312156125c957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b8181101561260f578581018301518582016040015282016125f3565b81811115612621576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126bc5784516001600160a01b031683529383019391830191600101612697565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156126f0576126f06127a3565b500190565b60008261271257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612731576127316127a3565b500290565b600082821015612748576127486127a3565b500390565b600181811c9082168061276157607f821691505b6020821081141561278257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561279c5761279c6127a3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146127fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bef345bb9866797ff64e649a1462bbcfd3c9ec92aecb3e9a5a906ba2754b6c864736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102345760003560e01c80634fe47f701161012e5780638ee88c53116100ab578063c49b9a801161006f578063c49b9a80146106c4578063d543dbeb146106e4578063dd62ed3e14610704578063ea2f0b371461074a578063f2fde38b1461076a57600080fd5b80638ee88c531461062f57806395d89b411461064f578063a457c2d714610664578063a9059cbb14610684578063af41063b146106a457600080fd5b806370a08231116100f257806370a082311461058d578063715018a6146105ad5780637d1db4a5146105c257806388f82020146105d85780638da5cb5b1461061157600080fd5b80634fe47f70146104de57806352390c02146104fe5780635342acb41461051e578063537df3b6146105575780636bc87c3a1461057757600080fd5b80633685d419116101bc578063437823ec11610180578063437823ec1461042b5780634549b0391461044b5780634838d1651461046b57806349bd5a5e1461048b5780634a74bb02146104bf57600080fd5b80633685d4191461039f57806339509351146103bf5780633b124fe7146103df5780633bd5d173146103f557806340f8007a1461041557600080fd5b80631694505e116102035780631694505e146102dc57806318160ddd1461032857806323b872dd1461033d5780632d8381191461035d578063313ce5671461037d57600080fd5b8063061c82d01461024057806306fdde0314610262578063095ea7b31461028d57806313114a9d146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b36600461256f565b61078a565b005b34801561026e57600080fd5b506102776107c2565b60405161028491906125e2565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004612528565b610854565b6040519015158152602001610284565b3480156102c957600080fd5b50600b545b604051908152602001610284565b3480156102e857600080fd5b506103107f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610284565b34801561033457600080fd5b506009546102ce565b34801561034957600080fd5b506102ad6103583660046124e7565b61086b565b34801561036957600080fd5b506102ce61037836600461256f565b6108d4565b34801561038957600080fd5b50600e5460405160ff9091168152602001610284565b3480156103ab57600080fd5b506102606103ba366004612474565b610958565b3480156103cb57600080fd5b506102ad6103da366004612528565b610b0f565b3480156103eb57600080fd5b506102ce600f5481565b34801561040157600080fd5b5061026061041036600461256f565b610b45565b34801561042157600080fd5b506102ce60115481565b34801561043757600080fd5b50610260610446366004612474565b610c31565b34801561045757600080fd5b506102ce610466366004612588565b610c7f565b34801561047757600080fd5b50610260610486366004612474565b610d0e565b34801561049757600080fd5b506103107f0000000000000000000000004017b6d370ad53b14db3e3e117f211aa69ac423681565b3480156104cb57600080fd5b506015546102ad90610100900460ff1681565b3480156104ea57600080fd5b506102606104f936600461256f565b610dc5565b34801561050a57600080fd5b50610260610519366004612474565b610df4565b34801561052a57600080fd5b506102ad610539366004612474565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561056357600080fd5b50610260610572366004612474565b610f47565b34801561058357600080fd5b506102ce60135481565b34801561059957600080fd5b506102ce6105a8366004612474565b610ffa565b3480156105b957600080fd5b50610260611059565b3480156105ce57600080fd5b506102ce60165481565b3480156105e457600080fd5b506102ad6105f3366004612474565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561061d57600080fd5b506000546001600160a01b0316610310565b34801561063b57600080fd5b5061026061064a36600461256f565b6110cd565b34801561065b57600080fd5b506102776110fc565b34801561067057600080fd5b506102ad61067f366004612528565b61110b565b34801561069057600080fd5b506102ad61069f366004612528565b61115a565b3480156106b057600080fd5b506102606106bf36600461256f565b611167565b3480156106d057600080fd5b506102606106df366004612554565b611196565b3480156106f057600080fd5b506102606106ff36600461256f565b611214565b34801561071057600080fd5b506102ce61071f3660046124ae565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561075657600080fd5b50610260610765366004612474565b611264565b34801561077657600080fd5b50610260610785366004612474565b6112af565b6000546001600160a01b031633146107bd5760405162461bcd60e51b81526004016107b490612637565b60405180910390fd5b600f55565b6060600c80546107d19061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd9061274d565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b6000610861338484611399565b5060015b92915050565b60006108788484846114bd565b6108ca84336108c5856040518060600160405280602881526020016127fe602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061176e565b611399565b5060019392505050565b6000600a5482111561093b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016107b4565b600061094561179a565b905061095183826117bd565b9392505050565b6000546001600160a01b031633146109825760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526006602052604090205460ff166109ea5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016107b4565b60005b600754811015610b0b57816001600160a01b031660078281548110610a1457610a146127cf565b6000918252602090912001546001600160a01b03161415610af95760078054610a3f90600190612736565b81548110610a4f57610a4f6127cf565b600091825260209091200154600780546001600160a01b039092169183908110610a7b57610a7b6127cf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610ad357610ad36127b9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b0381612788565b9150506109ed565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108619185906108c590866117c9565b3360008181526006602052604090205460ff1615610bba5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016107b4565b6000610bc5836117d5565b5050506001600160a01b038616600090815260016020526040902054939450610bf393925084915050611830565b6001600160a01b038316600090815260016020526040902055600a54610c199082611830565b600a55600b54610c2990846117c9565b600b55505050565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610cd35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016107b4565b81610cf3576000610ce3846117d5565b5094965061086595505050505050565b6000610cfe846117d5565b5093965061086595505050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526005602052604090205460ff1615610da15760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c6973746564000000000000000060448201526064016107b4565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610def5760405162461bcd60e51b81526004016107b490612637565b601655565b6000546001600160a01b03163314610e1e5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526006602052604090205460ff1615610e875760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016107b4565b6001600160a01b03811660009081526001602052604090205415610ee1576001600160a01b038116600090815260016020526040902054610ec7906108d4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b03163314610f715760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811660009081526005602052604090205460ff16610fd95760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c6973746564000000000000000060448201526064016107b4565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6001600160a01b03811660009081526006602052604081205460ff161561103757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610865906108d4565b6000546001600160a01b031633146110835760405162461bcd60e51b81526004016107b490612637565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110f75760405162461bcd60e51b81526004016107b490612637565b601355565b6060600d80546107d19061274d565b600061086133846108c585604051806060016040528060258152602001612826602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061176e565b60006108613384846114bd565b6000546001600160a01b031633146111915760405162461bcd60e51b81526004016107b490612637565b601155565b6000546001600160a01b031633146111c05760405162461bcd60e51b81526004016107b490612637565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061120990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461123e5760405162461bcd60e51b81526004016107b490612637565b61125e60646112588360095461183c90919063ffffffff16565b906117bd565b60165550565b6000546001600160a01b0316331461128e5760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146112d95760405162461bcd60e51b81526004016107b490612637565b6001600160a01b03811661133e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107b4565b6001600160a01b03821661145c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107b4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107b4565b6001600160a01b0382166115835760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107b4565b600081116115e55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107b4565b6000546001600160a01b0384811691161480159061161157506000546001600160a01b03838116911614155b15611679576016548111156116795760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107b4565b600061168430610ffa565b9050601654811061169457506016545b601754811080159081906116ab575060155460ff16155b80156116e957507f0000000000000000000000004017b6d370ad53b14db3e3e117f211aa69ac42366001600160a01b0316856001600160a01b031614155b80156116fc5750601554610100900460ff165b1561170f57601754915061170f82611848565b6001600160a01b03851660009081526004602052604090205460019060ff168061175157506001600160a01b03851660009081526004602052604090205460ff165b1561175a575060005b611766868686846118e6565b505050505050565b600081848411156117925760405162461bcd60e51b81526004016107b491906125e2565b505050900390565b60008060006117a7611a69565b90925090506117b682826117bd565b9250505090565b600061095182846126f5565b600061095182846126dd565b60008060008060008060008060008060006117ef8c611beb565b935093509350935060008060006118108f87878761180b61179a565b611c40565b919f509d509b509599509397509195509350505050919395979092949650565b60006109518284612736565b60006109518284612717565b6015805460ff1916600117905560006118628260026117bd565b905060006118708383611830565b90504761187c83611ca2565b60006118884783611830565b90506118948382611e69565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506015805460ff19169055505050565b806118f3576118f3611f7e565b6001600160a01b03841660009081526006602052604090205460ff16801561193457506001600160a01b03831660009081526006602052604090205460ff16155b1561194957611944848484611fb7565b611a47565b6001600160a01b03841660009081526006602052604090205460ff1615801561198a57506001600160a01b03831660009081526006602052604090205460ff165b1561199a576119448484846120fd565b6001600160a01b03841660009081526006602052604090205460ff161580156119dc57506001600160a01b03831660009081526006602052604090205460ff16155b156119ec576119448484846121bc565b6001600160a01b03841660009081526006602052604090205460ff168015611a2c57506001600160a01b03831660009081526006602052604090205460ff165b15611a3c57611944848484612216565b611a478484846121bc565b80611a6357611a63601054600f55601254601155601454601355565b50505050565b600a546009546000918291825b600754811015611bbb57826001600060078481548110611a9857611a986127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b035750816002600060078481548110611adc57611adc6127cf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1957600a54600954945094505050509091565b611b5f6001600060078481548110611b3357611b336127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611830565b9250611ba76002600060078481548110611b7b57611b7b6127cf565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611830565b915080611bb381612788565b915050611a76565b50600954600a54611bcb916117bd565b821015611be257600a546009549350935050509091565b90939092509050565b6000806000806000611bfc8661229f565b90506000611c09876122bb565b90506000611c16886122d7565b90506000611c3082611c2a85818d89611830565b90611830565b9993985091965094509092505050565b6000808080611c4f898661183c565b90506000611c5d898761183c565b90506000611c6b898861183c565b90506000611c79898961183c565b90506000611c8d82611c2a85818989611830565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cd757611cd76127cf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d5057600080fd5b505afa158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190612491565b81600181518110611d9b57611d9b6127cf565b60200260200101906001600160a01b031690816001600160a01b031681525050611de6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611399565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e3b90859060009086903090429060040161266c565b600060405180830381600087803b158015611e5557600080fd5b505af1158015611766573d6000803e3d6000fd5b611e94307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611399565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080611edb6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f7791906125b4565b5050505050565b600f54158015611f8e5750601354155b15611f9557565b600f805460105560118054601255601380546014556000928390559082905555565b6000806000806000806000611fcb886117d5565b965096509650965096509650965061201188600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546120409088611830565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461206f90876117c9565b6001600160a01b038a16600090815260016020526040902055612091826122f3565b61209a8161237c565b6120a4858461243b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516120e991815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612111886117d5565b965096509650965096509650965061215787600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c1681526002909152205461218d90856117c9565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461206f90876117c9565b60008060008060008060006121d0886117d5565b965096509650965096509650965061204087600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b600080600080600080600061222a886117d5565b965096509650965096509650965061227088600260008d6001600160a01b03166001600160a01b031681526020019081526020016000205461183090919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546121579088611830565b60006108656064611258600f548561183c90919063ffffffff16565b600061086560646112586013548561183c90919063ffffffff16565b600061086560646112586011548561183c90919063ffffffff16565b60006122fd61179a565b9050600061230b838361183c565b3060009081526001602052604090205490915061232890826117c9565b3060009081526001602090815260408083209390935560069052205460ff1615612377573060009081526002602052604090205461236690846117c9565b306000908152600260205260409020555b505050565b600061238661179a565b90506000612394838361183c565b6008546001600160a01b03166000908152600160205260409020549091506123bc90826117c9565b600880546001600160a01b03908116600090815260016020908152604080832095909555925490911681526006909152205460ff1615612377576008546001600160a01b031660009081526002602052604090205461241b90846117c9565b6008546001600160a01b0316600090815260026020526040902055505050565b600a546124489083611830565b600a55600b5461245890826117c9565b600b555050565b8035801515811461246f57600080fd5b919050565b60006020828403121561248657600080fd5b8135610951816127e5565b6000602082840312156124a357600080fd5b8151610951816127e5565b600080604083850312156124c157600080fd5b82356124cc816127e5565b915060208301356124dc816127e5565b809150509250929050565b6000806000606084860312156124fc57600080fd5b8335612507816127e5565b92506020840135612517816127e5565b929592945050506040919091013590565b6000806040838503121561253b57600080fd5b8235612546816127e5565b946020939093013593505050565b60006020828403121561256657600080fd5b6109518261245f565b60006020828403121561258157600080fd5b5035919050565b6000806040838503121561259b57600080fd5b823591506125ab6020840161245f565b90509250929050565b6000806000606084860312156125c957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b8181101561260f578581018301518582016040015282016125f3565b81811115612621576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126bc5784516001600160a01b031683529383019391830191600101612697565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156126f0576126f06127a3565b500190565b60008261271257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612731576127316127a3565b500290565b600082821015612748576127486127a3565b500390565b600181811c9082168061276157607f821691505b6020821081141561278257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561279c5761279c6127a3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146127fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bef345bb9866797ff64e649a1462bbcfd3c9ec92aecb3e9a5a906ba2754b6c864736f6c63430008070033
Deployed Bytecode Sourcemap
28768:20382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36959:98;;;;;;;;;;-1:-1:-1;36959:98:0;;;;;:::i;:::-;;:::i;:::-;;31381:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:161;;;;;;;;;;-1:-1:-1;32293:161:0;;;;;:::i;:::-;;:::i;:::-;;;3780:14:1;;3773:22;3755:41;;3743:2;3728:18;32293:161:0;3615:187:1;33414:87:0;;;;;;;;;;-1:-1:-1;33483:10:0;;33414:87;;;10597:25:1;;;10585:2;10570:18;33414:87:0;10451:177:1;29972:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2959:32:1;;;2941:51;;2929:2;2914:18;29972:51:0;2795:203:1;31658:95:0;;;;;;;;;;-1:-1:-1;31738:7:0;;31658:95;;32462:313;;;;;;;;;;-1:-1:-1;32462:313:0;;;;;:::i;:::-;;:::i;34800:253::-;;;;;;;;;;-1:-1:-1;34800:253:0;;;;;:::i;:::-;;:::i;31567:83::-;;;;;;;;;;-1:-1:-1;31633:9:0;;31567:83;;31633:9;;;;12084:36:1;;12072:2;12057:18;31567:83:0;11942:184:1;35516:479:0;;;;;;;;;;-1:-1:-1;35516:479:0;;;;;:::i;:::-;;:::i;32783:218::-;;;;;;;;;;-1:-1:-1;32783:218:0;;;;;:::i;:::-;;:::i;29686:26::-;;;;;;;;;;;;;;;;33968:378;;;;;;;;;;-1:-1:-1;33968:378:0;;;;;:::i;:::-;;:::i;29773:31::-;;;;;;;;;;;;;;;;36714:111;;;;;;;;;;-1:-1:-1;36714:111:0;;;;;:::i;:::-;;:::i;34354:438::-;;;;;;;;;;-1:-1:-1;34354:438:0;;;;;:::i;:::-;;:::i;33513:208::-;;;;;;;;;;-1:-1:-1;33513:208:0;;;;;:::i;:::-;;:::i;30030:38::-;;;;;;;;;;;;;;;30109:40;;;;;;;;;;-1:-1:-1;30109:40:0;;;;;;;;;;;37191:105;;;;;;;;;;-1:-1:-1;37191:105:0;;;;;:::i;:::-;;:::i;35061:447::-;;;;;;;;;;-1:-1:-1;35061:447:0;;;;;:::i;:::-;;:::i;41999:123::-;;;;;;;;;;-1:-1:-1;41999:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;42087:27:0;42063:4;42087:27;;;:18;:27;;;;;;;;;41999:123;33736:208;;;;;;;;;;-1:-1:-1;33736:208:0;;;;;:::i;:::-;;:::i;29871:32::-;;;;;;;;;;;;;;;;31761:198;;;;;;;;;;-1:-1:-1;31761:198:0;;;;;:::i;:::-;;:::i;20251:148::-;;;;;;;;;;;;;:::i;30162:55::-;;;;;;;;;;;;;;;;33286:120;;;;;;;;;;-1:-1:-1;33286:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;33378:20:0;33354:4;33378:20;;;:11;:20;;;;;;;;;33286:120;19600:87;;;;;;;;;;-1:-1:-1;19646:7:0;19673:6;-1:-1:-1;;;;;19673:6:0;19600:87;;37308:122;;;;;;;;;;-1:-1:-1;37308:122:0;;;;;:::i;:::-;;:::i;31472:87::-;;;;;;;;;;;;;:::i;33009:269::-;;;;;;;;;;-1:-1:-1;33009:269:0;;;;;:::i;:::-;;:::i;31967:167::-;;;;;;;;;;-1:-1:-1;31967:167:0;;;;;:::i;:::-;;:::i;37065:114::-;;;;;;;;;;-1:-1:-1;37065:114:0;;;;;:::i;:::-;;:::i;37611:171::-;;;;;;;;;;-1:-1:-1;37611:171:0;;;;;:::i;:::-;;:::i;37441:162::-;;;;;;;;;;-1:-1:-1;37441:162:0;;;;;:::i;:::-;;:::i;32142:143::-;;;;;;;;;;-1:-1:-1;32142:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;32250:18:0;;;32223:7;32250:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32142:143;36837:110;;;;;;;;;;-1:-1:-1;36837:110:0;;;;;:::i;:::-;;:::i;20554:244::-;;;;;;;;;;-1:-1:-1;20554:244:0;;;;;:::i;:::-;;:::i;36959:98::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;;;;;;;;;37033:7:::1;:16:::0;36959:98::o;31381:83::-;31418:13;31451:5;31444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31381:83;:::o;32293:161::-;32368:4;32385:39;10389:10;32408:7;32417:6;32385:8;:39::i;:::-;-1:-1:-1;32442:4:0;32293:161;;;;;:::o;32462:313::-;32560:4;32577:36;32587:6;32595:9;32606:6;32577:9;:36::i;:::-;32624:121;32633:6;10389:10;32655:89;32693:6;32655:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32655:19:0;;;;;;:11;:19;;;;;;;;10389:10;32655:33;;;;;;;;;;:37;:89::i;:::-;32624:8;:121::i;:::-;-1:-1:-1;32763:4:0;32462:313;;;;;:::o;34800:253::-;34866:7;34905;;34894;:18;;34886:73;;;;-1:-1:-1;;;34886:73:0;;5250:2:1;34886:73:0;;;5232:21:1;5289:2;5269:18;;;5262:30;5328:34;5308:18;;;5301:62;-1:-1:-1;;;5379:18:1;;;5372:40;5429:19;;34886:73:0;5048:406:1;34886:73:0;34970:19;34993:10;:8;:10::i;:::-;34970:33;-1:-1:-1;35021:24:0;:7;34970:33;35021:11;:24::i;:::-;35014:31;34800:253;-1:-1:-1;;;34800:253:0:o;35516:479::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35598:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35590:60;;;::::0;-1:-1:-1;;;35590:60:0;;6827:2:1;35590:60:0::1;::::0;::::1;6809:21:1::0;6866:2;6846:18;;;6839:30;6905:29;6885:18;;;6878:57;6952:18;;35590:60:0::1;6625:351:1::0;35590:60:0::1;35666:9;35661:327;35685:9;:16:::0;35681:20;::::1;35661:327;;;35743:7;-1:-1:-1::0;;;;;35727:23:0::1;:9;35737:1;35727:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35727:12:0::1;:23;35723:254;;;35786:9;35796:16:::0;;:20:::1;::::0;35815:1:::1;::::0;35796:20:::1;:::i;:::-;35786:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35771:9:::1;:12:::0;;-1:-1:-1;;;;;35786:31:0;;::::1;::::0;35781:1;;35771:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;35771:46:0::1;-1:-1:-1::0;;;;;35771:46:0;;::::1;;::::0;;35836:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35875:11:::1;:20:::0;;;;:28;;-1:-1:-1;;35875:28:0::1;::::0;;35922:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35922:15:0;;;;;-1:-1:-1;;;;;;35922:15:0::1;::::0;;;;;35661:327:::1;35516:479:::0;:::o;35723:254::-:1;35703:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35661:327;;;;35516:479:::0;:::o;32783:218::-;10389:10;32871:4;32920:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32920:34:0;;;;;;;;;;32871:4;;32888:83;;32911:7;;32920:50;;32959:10;32920:38;:50::i;33968:378::-;10389:10;34020:14;34069:19;;;:11;:19;;;;;;;;34068:20;34060:77;;;;-1:-1:-1;;;34060:77:0;;10240:2:1;34060:77:0;;;10222:21:1;10279:2;10259:18;;;10252:30;10318:34;10298:18;;;10291:62;-1:-1:-1;;;10369:18:1;;;10362:42;10421:19;;34060:77:0;10038:408:1;34060:77:0;34149:15;34174:19;34185:7;34174:10;:19::i;:::-;-1:-1:-1;;;;;;;;34222:15:0;;;;;;:7;:15;;;;;;34148:45;;-1:-1:-1;34222:28:0;;:15;-1:-1:-1;34148:45:0;;-1:-1:-1;;34222:19:0;:28::i;:::-;-1:-1:-1;;;;;34204:15:0;;;;;;:7;:15;;;;;:46;34271:7;;:20;;34283:7;34271:11;:20::i;:::-;34261:7;:30;34315:10;;:23;;34330:7;34315:14;:23::i;:::-;34302:10;:36;-1:-1:-1;;;33968:378:0:o;36714:111::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36783:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36783:34:0::1;36813:4;36783:34;::::0;;36714:111::o;34354:438::-;34444:7;34483;;34472;:18;;34464:62;;;;-1:-1:-1;;;34464:62:0;;7183:2:1;34464:62:0;;;7165:21:1;7222:2;7202:18;;;7195:30;7261:33;7241:18;;;7234:61;7312:18;;34464:62:0;6981:355:1;34464:62:0;34542:17;34537:248;;34577:15;34602:19;34613:7;34602:10;:19::i;:::-;-1:-1:-1;34576:45:0;;-1:-1:-1;34636:14:0;;-1:-1:-1;;;;;;34636:14:0;34537:248;34685:23;34717:19;34728:7;34717:10;:19::i;:::-;-1:-1:-1;34683:53:0;;-1:-1:-1;34751:22:0;;-1:-1:-1;;;;;;34751:22:0;33513:208;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33584:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;33583:21;33575:58;;;::::0;-1:-1:-1;;;33575:58:0;;7952:2:1;33575:58:0::1;::::0;::::1;7934:21:1::0;7991:2;7971:18;;;7964:30;8030:26;8010:18;;;8003:54;8074:18;;33575:58:0::1;7750:348:1::0;33575:58:0::1;-1:-1:-1::0;;;;;33644:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;33644:27:0::1;33667:4;33644:27;::::0;;33513:208::o;37191:105::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;37264:12:::1;:24:::0;37191:105::o;35061:447::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35258:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35257:21;35249:61;;;::::0;-1:-1:-1;;;35249:61:0;;6471:2:1;35249:61:0::1;::::0;::::1;6453:21:1::0;6510:2;6490:18;;;6483:30;6549:29;6529:18;;;6522:57;6596:18;;35249:61:0::1;6269:351:1::0;35249:61:0::1;-1:-1:-1::0;;;;;35324:16:0;::::1;35343:1;35324:16:::0;;;:7:::1;:16;::::0;;;;;:20;35321:108:::1;;-1:-1:-1::0;;;;;35400:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;35380:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;35361:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;35321:108:::1;-1:-1:-1::0;;;;;35439:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;35439:27:0::1;35462:4;35439:27:::0;;::::1;::::0;;;35477:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;35477:23:0::1;::::0;;::::1;::::0;;35061:447::o;33736:208::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33816:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;33808:57;;;::::0;-1:-1:-1;;;33808:57:0;;8305:2:1;33808:57:0::1;::::0;::::1;8287:21:1::0;8344:2;8324:18;;;8317:30;8383:26;8363:18;;;8356:54;8427:18;;33808:57:0::1;8103:348:1::0;33808:57:0::1;-1:-1:-1::0;;;;;33876:20:0::1;33899:5;33876:20:::0;;;:13:::1;:20;::::0;;;;:28;;-1:-1:-1;;33876:28:0::1;::::0;;33736:208::o;31761:198::-;-1:-1:-1;;;;;31851:20:0;;31827:7;31851:20;;;:11;:20;;;;;;;;31847:49;;;-1:-1:-1;;;;;;31880:16:0;;;;;:7;:16;;;;;;;31761:198::o;31847:49::-;-1:-1:-1;;;;;31934:16:0;;;;;;:7;:16;;;;;;31914:37;;:19;:37::i;20251:148::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;20358:1:::1;20342:6:::0;;20321:40:::1;::::0;-1:-1:-1;;;;;20342:6:0;;::::1;::::0;20321:40:::1;::::0;20358:1;;20321:40:::1;20389:1;20372:19:::0;;-1:-1:-1;;;;;;20372:19:0::1;::::0;;20251:148::o;37308:122::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;37394:13:::1;:28:::0;37308:122::o;31472:87::-;31511:13;31544:7;31537:14;;;;;:::i;33009:269::-;33102:4;33119:129;10389:10;33142:7;33151:96;33190:15;33151:96;;;;;;;;;;;;;;;;;10389:10;33151:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33151:34:0;;;;;;;;;;;;:38;:96::i;31967:167::-;32045:4;32062:42;10389:10;32086:9;32097:6;32062:9;:42::i;37065:114::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;37147:11:::1;:24:::0;37065:114::o;37611:171::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;37688:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37688:32:0;;::::1;;::::0;;37736:38:::1;::::0;::::1;::::0;::::1;::::0;37712:8;3780:14:1;3773:22;3755:41;;3743:2;3728:18;;3615:187;37736:38:0::1;;;;;;;;37611:171:::0;:::o;37441:162::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;37535:60:::1;37579:5;37535:25;37547:12;37535:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;37520:12;:75:::0;-1:-1:-1;37441:162:0:o;36837:110::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36904:27:0::1;36934:5;36904:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36904:35:0::1;::::0;;36837:110::o;20554:244::-;19646:7;19673:6;-1:-1:-1;;;;;19673:6:0;10389:10;19820:23;19812:68;;;;-1:-1:-1;;;19812:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20643:22:0;::::1;20635:73;;;::::0;-1:-1:-1;;;20635:73:0;;5661:2:1;20635:73:0::1;::::0;::::1;5643:21:1::0;5700:2;5680:18;;;5673:30;5739:34;5719:18;;;5712:62;-1:-1:-1;;;5790:18:1;;;5783:36;5836:19;;20635:73:0::1;5459:402:1::0;20635:73:0::1;20745:6;::::0;;20724:38:::1;::::0;-1:-1:-1;;;;;20724:38:0;;::::1;::::0;20745:6;::::1;::::0;20724:38:::1;::::0;::::1;20773:6;:17:::0;;-1:-1:-1;;;;;;20773:17:0::1;-1:-1:-1::0;;;;;20773:17:0;;;::::1;::::0;;;::::1;::::0;;20554:244::o;42130:337::-;-1:-1:-1;;;;;42223:19:0;;42215:68;;;;-1:-1:-1;;;42215:68:0;;9835:2:1;42215:68:0;;;9817:21:1;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:1;;;9957:34;10008:19;;42215:68:0;9633:400:1;42215:68:0;-1:-1:-1;;;;;42302:21:0;;42294:68;;;;-1:-1:-1;;;42294:68:0;;6068:2:1;42294:68:0;;;6050:21:1;6107:2;6087:18;;;6080:30;6146:34;6126:18;;;6119:62;-1:-1:-1;;;6197:18:1;;;6190:32;6239:19;;42294:68:0;5866:398:1;42294:68:0;-1:-1:-1;;;;;42375:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;42427:32;;10597:25:1;;;42427:32:0;;10570:18:1;42427:32:0;;;;;;;42130:337;;;:::o;42475:1813::-;-1:-1:-1;;;;;42597:18:0;;42589:68;;;;-1:-1:-1;;;42589:68:0;;9429:2:1;42589:68:0;;;9411:21:1;9468:2;9448:18;;;9441:30;9507:34;9487:18;;;9480:62;-1:-1:-1;;;9558:18:1;;;9551:35;9603:19;;42589:68:0;9227:401:1;42589:68:0;-1:-1:-1;;;;;42676:16:0;;42668:64;;;;-1:-1:-1;;;42668:64:0;;4846:2:1;42668:64:0;;;4828:21:1;4885:2;4865:18;;;4858:30;4924:34;4904:18;;;4897:62;-1:-1:-1;;;4975:18:1;;;4968:33;5018:19;;42668:64:0;4644:399:1;42668:64:0;42760:1;42751:6;:10;42743:64;;;;-1:-1:-1;;;42743:64:0;;9019:2:1;42743:64:0;;;9001:21:1;9058:2;9038:18;;;9031:30;9097:34;9077:18;;;9070:62;-1:-1:-1;;;9148:18:1;;;9141:39;9197:19;;42743:64:0;8817:405:1;42743:64:0;19646:7;19673:6;-1:-1:-1;;;;;42821:15:0;;;19673:6;;42821:15;;;;:32;;-1:-1:-1;19646:7:0;19673:6;-1:-1:-1;;;;;42840:13:0;;;19673:6;;42840:13;;42821:32;42818:125;;;42886:12;;42876:6;:22;;42868:75;;;;-1:-1:-1;;;42868:75:0;;7543:2:1;42868:75:0;;;7525:21:1;7582:2;7562:18;;;7555:30;7621:34;7601:18;;;7594:62;-1:-1:-1;;;7672:18:1;;;7665:38;7720:19;;42868:75:0;7341:404:1;42868:75:0;43238:28;43269:24;43287:4;43269:9;:24::i;:::-;43238:55;;43341:12;;43317:20;:36;43314:112;;-1:-1:-1;43402:12:0;;43314:112;43497:29;;43473:53;;;;;;;43555;;-1:-1:-1;43592:16:0;;;;43591:17;43555:53;:91;;;;;43633:13;-1:-1:-1;;;;;43625:21:0;:4;-1:-1:-1;;;;;43625:21:0;;;43555:91;:129;;;;-1:-1:-1;43663:21:0;;;;;;;43555:129;43537:318;;;43734:29;;43711:52;;43807:36;43822:20;43807:14;:36::i;:::-;-1:-1:-1;;;;;44063:24:0;;43936:12;44063:24;;;:18;:24;;;;;;43951:4;;44063:24;;;:50;;-1:-1:-1;;;;;;44091:22:0;;;;;;:18;:22;;;;;;;;44063:50;44060:96;;;-1:-1:-1;44139:5:0;44060:96;44242:38;44257:4;44262:2;44265:6;44272:7;44242:14;:38::i;:::-;42578:1710;;;42475:1813;;;:::o;7759:206::-;7845:7;7906:12;7898:6;;;;7890:29;;;;-1:-1:-1;;;7890:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7941:5:0;;;7759:206::o;39470:163::-;39511:7;39532:15;39549;39568:19;:17;:19::i;:::-;39531:56;;-1:-1:-1;39531:56:0;-1:-1:-1;39605:20:0;39531:56;;39605:11;:20::i;:::-;39598:27;;;;39470:163;:::o;6617:98::-;6675:7;6702:5;6706:1;6702;:5;:::i;5480:98::-;5538:7;5565:5;5569:1;5565;:5;:::i;38043:466::-;38102:7;38111;38120;38129;38138;38147;38156;38177:23;38202:12;38216:18;38236:16;38256:20;38268:7;38256:11;:20::i;:::-;38176:100;;;;;;;;38288:15;38305:23;38330:12;38346:60;38358:7;38367:4;38373:10;38385:8;38395:10;:8;:10::i;:::-;38346:11;:60::i;:::-;38287:119;;-1:-1:-1;38287:119:0;-1:-1:-1;38287:119:0;-1:-1:-1;38457:15:0;;-1:-1:-1;38474:4:0;;-1:-1:-1;38480:10:0;;-1:-1:-1;38492:8:0;-1:-1:-1;;;;38043:466:0;;;;;;;;;:::o;5861:98::-;5919:7;5946:5;5950:1;5946;:5;:::i;6218:98::-;6276:7;6303:5;6307:1;6303;:5;:::i;44296:985::-;30590:16;:23;;-1:-1:-1;;30590:23:0;30609:4;30590:23;;;:16;44447:27:::1;:20:::0;44472:1:::1;44447:24;:27::i;:::-;44432:42:::0;-1:-1:-1;44485:17:0::1;44505:30;:20:::0;44432:42;44505:24:::1;:30::i;:::-;44485:50:::0;-1:-1:-1;44838:21:0::1;44904:22;44921:4:::0;44904:16:::1;:22::i;:::-;45057:18;45078:41;:21;45104:14:::0;45078:25:::1;:41::i;:::-;45057:62;;45169:35;45182:9;45193:10;45169:12;:35::i;:::-;45230:43;::::0;;11820:25:1;;;11876:2;11861:18;;11854:34;;;11904:18;;;11897:34;;;45230:43:0::1;::::0;11808:2:1;11793:18;45230:43:0::1;;;;;;;-1:-1:-1::0;;30636:16:0;:24;;-1:-1:-1;;30636:24:0;;;-1:-1:-1;;;44296:985:0:o;46480:834::-;46591:7;46587:40;;46613:14;:12;:14::i;:::-;-1:-1:-1;;;;;46652:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;46676:22:0;;;;;;:11;:22;;;;;;;;46675:23;46652:46;46648:597;;;46715:48;46737:6;46745:9;46756:6;46715:21;:48::i;:::-;46648:597;;;-1:-1:-1;;;;;46786:19:0;;;;;;:11;:19;;;;;;;;46785:20;:46;;;;-1:-1:-1;;;;;;46809:22:0;;;;;;:11;:22;;;;;;;;46785:46;46781:464;;;46848:46;46868:6;46876:9;46887:6;46848:19;:46::i;46781:464::-;-1:-1:-1;;;;;46917:19:0;;;;;;:11;:19;;;;;;;;46916:20;:47;;;;-1:-1:-1;;;;;;46941:22:0;;;;;;:11;:22;;;;;;;;46940:23;46916:47;46912:333;;;46980:44;46998:6;47006:9;47017:6;46980:17;:44::i;46912:333::-;-1:-1:-1;;;;;47046:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47069:22:0;;;;;;:11;:22;;;;;;;;47046:45;47042:203;;;47108:48;47130:6;47138:9;47149:6;47108:21;:48::i;47042:203::-;47189:44;47207:6;47215:9;47226:6;47189:17;:44::i;:::-;47269:7;47265:41;;47291:15;41872;;41862:7;:25;41912:19;;41898:11;:33;41958:21;;41942:13;:37;41818:169;47291:15;46480:834;;;;:::o;39641:561::-;39738:7;;39774;;39691;;;;;39798:289;39822:9;:16;39818:20;;39798:289;;;39888:7;39864;:21;39872:9;39882:1;39872:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39872:12:0;39864:21;;;;;;;;;;;;;:31;;:66;;;39923:7;39899;:21;39907:9;39917:1;39907:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39907:12:0;39899:21;;;;;;;;;;;;;:31;39864:66;39860:97;;;39940:7;;39949;;39932:25;;;;;;;39641:561;;:::o;39860:97::-;39982:34;39994:7;:21;40002:9;40012:1;40002:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40002:12:0;39994:21;;;;;;;;;;;;;39982:7;;:11;:34::i;:::-;39972:44;;40041:34;40053:7;:21;40061:9;40071:1;40061:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40061:12:0;40053:21;;;;;;;;;;;;;40041:7;;:11;:34::i;:::-;40031:44;-1:-1:-1;39840:3:0;;;;:::i;:::-;;;;39798:289;;;-1:-1:-1;40123:7:0;;40111;;:20;;:11;:20::i;:::-;40101:7;:30;40097:61;;;40141:7;;40150;;40133:25;;;;;;39641:561;;:::o;40097:61::-;40177:7;;40186;;-1:-1:-1;39641:561:0;-1:-1:-1;39641:561:0:o;38517:421::-;38577:7;38586;38595;38604;38624:12;38639:24;38655:7;38639:15;:24::i;:::-;38624:39;;38674:18;38695:30;38717:7;38695:21;:30::i;:::-;38674:51;;38736:16;38755:28;38775:7;38755:19;:28::i;:::-;38736:47;-1:-1:-1;38794:23:0;38820:47;38736;38820:33;38842:10;38820:33;:7;38832:4;38820:11;:17::i;:::-;:21;;:33::i;:47::-;38794:73;38903:4;;-1:-1:-1;38909:10:0;;-1:-1:-1;38909:10:0;-1:-1:-1;38517:421:0;;-1:-1:-1;;;38517:421:0:o;38946:516::-;39079:7;;;;39135:24;:7;39147:11;39135;:24::i;:::-;39117:42;-1:-1:-1;39170:12:0;39185:21;:4;39194:11;39185:8;:21::i;:::-;39170:36;-1:-1:-1;39217:18:0;39238:27;:10;39253:11;39238:14;:27::i;:::-;39217:48;-1:-1:-1;39276:16:0;39295:25;:8;39308:11;39295:12;:25::i;:::-;39276:44;-1:-1:-1;39331:23:0;39357:47;39276:44;39357:33;39379:10;39357:33;:7;39369:4;39357:11;:17::i;:47::-;39423:7;;;;-1:-1:-1;39449:4:0;;-1:-1:-1;38946:516:0;;-1:-1:-1;;;;;;;;;38946:516:0:o;45289:589::-;45439:16;;;45453:1;45439:16;;;;;;;;45415:21;;45439:16;;;;;;;;;;-1:-1:-1;45439:16:0;45415:40;;45484:4;45466;45471:1;45466:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45466:23:0;;;-1:-1:-1;;;;;45466:23:0;;;;;45510:15;-1:-1:-1;;;;;45510:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45500:4;45505:1;45500:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45500:32:0;;;-1:-1:-1;;;;;45500:32:0;;;;;45545:62;45562:4;45577:15;45595:11;45545:8;:62::i;:::-;45646:224;;-1:-1:-1;;;45646:224:0;;-1:-1:-1;;;;;45646:15:0;:66;;;;:224;;45727:11;;45753:1;;45797:4;;45824;;45844:15;;45646:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45886:513;46034:62;46051:4;46066:15;46084:11;46034:8;:62::i;:::-;46139:15;-1:-1:-1;;;;;46139:31:0;;46178:9;46211:4;46231:11;46257:1;46300;46343:7;19646;19673:6;-1:-1:-1;;;;;19673:6:0;;19600:87;46343:7;46139:252;;;;;;-1:-1:-1;;;;;;46139:252:0;;;-1:-1:-1;;;;;3362:15:1;;;46139:252:0;;;3344:34:1;3394:18;;;3387:34;;;;3437:18;;;3430:34;;;;3480:18;;;3473:34;3544:15;;;3523:19;;;3516:44;46365:15:0;3576:19:1;;;3569:35;3278:19;;46139:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45886:513;;:::o;41486:320::-;41532:7;;:12;:34;;;;-1:-1:-1;41548:13:0;;:18;41532:34;41529:46;;;41486:320::o;41529:46::-;41613:7;;;41595:15;:25;41653:11;;;41631:19;:33;41699:13;;;41675:21;:37;-1:-1:-1;41733:11:0;;;;41755:15;;;;41781:17;41486:320::o;48528:617::-;48631:15;48648:23;48673:12;48687:23;48712:12;48726:18;48746:16;48766:19;48777:7;48766:10;:19::i;:::-;48630:155;;;;;;;;;;;;;;48814:28;48834:7;48814;:15;48822:6;-1:-1:-1;;;;;48814:15:0;-1:-1:-1;;;;;48814:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;48796:15:0;;;;;;:7;:15;;;;;;;;:46;;;;48871:7;:15;;;;:28;;48891:7;48871:19;:28::i;:::-;-1:-1:-1;;;;;48853:15:0;;;;;;;:7;:15;;;;;;:46;;;;48931:18;;;;;;;:39;;48954:15;48931:22;:39::i;:::-;-1:-1:-1;;;;;48910:18:0;;;;;;:7;:18;;;;;:60;48984:26;48999:10;48984:14;:26::i;:::-;49021:22;49034:8;49021:12;:22::i;:::-;49054:23;49066:4;49072;49054:11;:23::i;:::-;49110:9;-1:-1:-1;;;;;49093:44:0;49102:6;-1:-1:-1;;;;;49093:44:0;;49121:15;49093:44;;;;10597:25:1;;10585:2;10570:18;;10451:177;49093:44:0;;;;;;;;48619:526;;;;;;;48528:617;;;:::o;47883:637::-;47984:15;48001:23;48026:12;48040:23;48065:12;48079:18;48099:16;48119:19;48130:7;48119:10;:19::i;:::-;47983:155;;;;;;;;;;;;;;48167:28;48187:7;48167;:15;48175:6;-1:-1:-1;;;;;48167:15:0;-1:-1:-1;;;;;48167:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;48149:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48227:18;;;;;:7;:18;;;;;:39;;48250:15;48227:22;:39::i;:::-;-1:-1:-1;;;;;48206:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48298:7;:18;;;;:39;;48321:15;48298:22;:39::i;47322:553::-;47421:15;47438:23;47463:12;47477:23;47502:12;47516:18;47536:16;47556:19;47567:7;47556:10;:19::i;:::-;47420:155;;;;;;;;;;;;;;47604:28;47624:7;47604;:15;47612:6;-1:-1:-1;;;;;47604:15:0;-1:-1:-1;;;;;47604:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;36005:693::-;36108:15;36125:23;36150:12;36164:23;36189:12;36203:18;36223:16;36243:19;36254:7;36243:10;:19::i;:::-;36107:155;;;;;;;;;;;;;;36291:28;36311:7;36291;:15;36299:6;-1:-1:-1;;;;;36291:15:0;-1:-1:-1;;;;;36291:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;36273:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36348:7;:15;;;;:28;;36368:7;36348:19;:28::i;40976:154::-;41040:7;41067:55;41106:5;41067:20;41079:7;;41067;:11;;:20;;;;:::i;41308:166::-;41378:7;41405:61;41450:5;41405:26;41417:13;;41405:7;:11;;:26;;;;:::i;41138:162::-;41206:7;41233:59;41276:5;41233:24;41245:11;;41233:7;:11;;:24;;;;:::i;40214:355::-;40277:19;40300:10;:8;:10::i;:::-;40277:33;-1:-1:-1;40321:18:0;40342:27;:10;40277:33;40342:14;:27::i;:::-;40421:4;40405:22;;;;:7;:22;;;;;;40321:48;;-1:-1:-1;40405:38:0;;40321:48;40405:26;:38::i;:::-;40396:4;40380:22;;;;:7;:22;;;;;;;;:63;;;;40457:11;:26;;;;;;40454:107;;;40539:4;40523:22;;;;:7;:22;;;;;;:38;;40550:10;40523:26;:38::i;:::-;40514:4;40498:22;;;;:7;:22;;;;;:63;40454:107;40266:303;;40214:355;:::o;40581:383::-;40640:19;40663:10;:8;:10::i;:::-;40640:33;-1:-1:-1;40684:16:0;40703:25;:8;40640:33;40703:12;:25::i;:::-;40780:21;;-1:-1:-1;;;;;40780:21:0;40772:30;;;;:7;:30;;;;;;40684:44;;-1:-1:-1;40772:44:0;;40684;40772:34;:44::i;:::-;40747:21;;;-1:-1:-1;;;;;40747:21:0;;;40739:30;;;;:7;:30;;;;;;;;:77;;;;40842:21;;;;;40830:34;;:11;:34;;;;;;;40827:129;;;40920:21;;-1:-1:-1;;;;;40920:21:0;40912:30;;;;:7;:30;;;;;;:44;;40947:8;40912:34;:44::i;:::-;40887:21;;-1:-1:-1;;;;;40887:21:0;40879:30;;;;:7;:30;;;;;:77;40629:335;;40581:383;:::o;37888:147::-;37966:7;;:17;;37978:4;37966:11;:17::i;:::-;37956:7;:27;38007:10;;:20;;38022:4;38007:14;:20::i;:::-;37994:10;:33;-1:-1:-1;;37888:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2484:306;;;;;:::o;4042:597::-;4154:4;4183:2;4212;4201:9;4194:21;4244:6;4238:13;4287:6;4282:2;4271:9;4267:18;4260:34;4312:1;4322:140;4336:6;4333:1;4330:13;4322:140;;;4431:14;;;4427:23;;4421:30;4397:17;;;4416:2;4393:26;4386:66;4351:10;;4322:140;;;4480:6;4477:1;4474:13;4471:91;;;4550:1;4545:2;4536:6;4525:9;4521:22;4517:31;4510:42;4471:91;-1:-1:-1;4623:2:1;4602:15;-1:-1:-1;;4598:29:1;4583:45;;;;4630:2;4579:54;;4042:597;-1:-1:-1;;;4042:597:1:o;8456:356::-;8658:2;8640:21;;;8677:18;;;8670:30;8736:34;8731:2;8716:18;;8709:62;8803:2;8788:18;;8456:356::o;10633:980::-;10895:4;10943:3;10932:9;10928:19;10974:6;10963:9;10956:25;11000:2;11038:6;11033:2;11022:9;11018:18;11011:34;11081:3;11076:2;11065:9;11061:18;11054:31;11105:6;11140;11134:13;11171:6;11163;11156:22;11209:3;11198:9;11194:19;11187:26;;11248:2;11240:6;11236:15;11222:29;;11269:1;11279:195;11293:6;11290:1;11287:13;11279:195;;;11358:13;;-1:-1:-1;;;;;11354:39:1;11342:52;;11449:15;;;;11414:12;;;;11390:1;11308:9;11279:195;;;-1:-1:-1;;;;;;;11530:32:1;;;;11525:2;11510:18;;11503:60;-1:-1:-1;;;11594:3:1;11579:19;11572:35;11491:3;10633:980;-1:-1:-1;;;10633:980:1:o;12131:128::-;12171:3;12202:1;12198:6;12195:1;12192:13;12189:39;;;12208:18;;:::i;:::-;-1:-1:-1;12244:9:1;;12131:128::o;12264:217::-;12304:1;12330;12320:132;;12374:10;12369:3;12365:20;12362:1;12355:31;12409:4;12406:1;12399:15;12437:4;12434:1;12427:15;12320:132;-1:-1:-1;12466:9:1;;12264:217::o;12486:168::-;12526:7;12592:1;12588;12584:6;12580:14;12577:1;12574:21;12569:1;12562:9;12555:17;12551:45;12548:71;;;12599:18;;:::i;:::-;-1:-1:-1;12639:9:1;;12486:168::o;12659:125::-;12699:4;12727:1;12724;12721:8;12718:34;;;12732:18;;:::i;:::-;-1:-1:-1;12769:9:1;;12659:125::o;12789:380::-;12868:1;12864:12;;;;12911;;;12932:61;;12986:4;12978:6;12974:17;12964:27;;12932:61;13039:2;13031:6;13028:14;13008:18;13005:38;13002:161;;;13085:10;13080:3;13076:20;13073:1;13066:31;13120:4;13117:1;13110:15;13148:4;13145:1;13138:15;13002:161;;12789:380;;;:::o;13174:135::-;13213:3;-1:-1:-1;;13234:17:1;;13231:43;;;13254:18;;:::i;:::-;-1:-1:-1;13301:1:1;13290:13;;13174:135::o;13314:127::-;13375:10;13370:3;13366:20;13363:1;13356:31;13406:4;13403:1;13396:15;13430:4;13427:1;13420:15;13446:127;13507:10;13502:3;13498:20;13495:1;13488:31;13538:4;13535:1;13528:15;13562:4;13559:1;13552:15;13578:127;13639:10;13634:3;13630:20;13627:1;13620:31;13670:4;13667:1;13660:15;13694:4;13691:1;13684:15;13842:131;-1:-1:-1;;;;;13917:31:1;;13907:42;;13897:70;;13963:1;13960;13953:12;13897:70;13842:131;:::o
Swarm Source
ipfs://1bef345bb9866797ff64e649a1462bbcfd3c9ec92aecb3e9a5a906ba2754b6c8
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.