ERC-20
Overview
Max Total Supply
10,000,000 NOOTNOOT
Holders
28
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NOOTNOOT
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-24 */ /** https://nootnoot.fun/ https://t.me/NootNoot_ETH https://twitter.com/nootnootETH */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.19; // IERC20 interface interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, 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); } // pragma solidity >=0.6.2; 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 LockToken is Ownable { bool public isOpen = false; mapping(address => bool) private _whiteList; modifier open(address from, address to) { require(isOpen || _whiteList[from] || _whiteList[to], "Not Open"); _; } constructor() { _whiteList[msg.sender] = true; _whiteList[address(this)] = true; } function openTrade() external onlyOwner { isOpen = true; } function includeToWhiteList(address[] memory _users) external onlyOwner { for(uint8 i = 0; i < _users.length; i++) { _whiteList[_users[i]] = true; } } } contract NOOTNOOT is Context, IERC20, Ownable, LockToken { using Address for address; using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; string private _name = "Pingu"; string private _symbol = "NOOTNOOT"; uint8 private _decimals = 9; 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) public _isExcludedFromWalletLimit; mapping (address=> bool) public _isExcludedFromMaxTx; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) public _isBlacklisted; bool public blacklistRenounced = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 private _donationFee = 0; uint256 private _previousDonationFee = _donationFee; uint256 private _burnFee = 0; uint256 private _previousBurnFee = _burnFee; uint256 private _treasuryFee = 0; uint256 private _previousTreasuryFee = _treasuryFee; uint256 public _maxTxAmount = 10000000 * 10**9; uint256 public swapTokensAtAmount = 5000 * 10**9; uint256 public maxWalletToken = 200000 * 10**9; address payable public donationWallet = payable(0xb26fbd55bB71D0af04FCE9a26DdEfFD8F166365f); // donation wallet address. address payable public treasuryWallet = payable (0x66Ed96F61b09e11C2349c021eCEeeAf45E3A070a);// treasury wallet address. address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; //burn wallet address. //sell fees uint256 public _sellTaxFee = 2; uint256 public _sellDonationFee = 9; uint256 public _sellBurnFee = 2; uint256 public _sellTreasuryFee = 0; //buy fees uint256 public _buyTaxFee = 2; uint256 public _buyDonationFee = 0; uint256 public _buyBurnFee = 2; uint256 public _buyTreasuryFee = 0; bool inSwap; bool public swapEnabled = true; modifier lockTheSwap { inSwap = true; _; inSwap = false; } event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event swapEnabledUpdated(bool enabled); event BlacklistMultipleAccounts(address[] accounts, bool isBlacklisted); constructor (address _owner) { _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/limits _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 _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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } 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(!_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 excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromWalletLimit (address user, bool excluded) external onlyOwner { _isExcludedFromWalletLimit[user] = excluded; } function excludeFromMaxTxLimit (address user, bool excluded) external onlyOwner { _isExcludedFromMaxTx[user] = excluded; } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tDonationAndTreasury, uint256 tBurn) = _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); if(_donationFee > 0 || _treasuryFee > 0) { _takeDonationAndTreasury(tDonationAndTreasury); emit Transfer(sender, address(this), tDonationAndTreasury); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } 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 tDonationAndTreasury, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDonationAndTreasury, tBurn, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tDonationAndTreasury, tBurn); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tDonationAndTreasury = calculateDonationFee(tAmount).add(calculateTreasuryFee(tAmount)); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tDonationAndTreasury).sub(tBurn); return (tTransferAmount, tFee, tDonationAndTreasury, tBurn); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tDonationAndTreasury, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rDonationAndTreasury = tDonationAndTreasury.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rDonationAndTreasury).sub(rBurn); 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 _takeDonationAndTreasury(uint256 tDonationAndTreasury) private { uint256 currentRate = _getRate(); uint256 rDonationAndTreasury = tDonationAndTreasury.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rDonationAndTreasury); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tDonationAndTreasury); } function _takeBurn(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); if(_isExcluded[deadAddress]) _tOwned[deadAddress] = _tOwned[deadAddress].add(tBurn); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateDonationFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_donationFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function calculateTreasuryFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_treasuryFee).div( 10**2 ); } function removeAllFee() private { _taxFee = 0; _donationFee = 0; _burnFee = 0; _treasuryFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _donationFee = _previousDonationFee; _burnFee = _previousBurnFee; _treasuryFee = _previousTreasuryFee; } function _transfer( address from, address to, uint256 amount ) open(from, to) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address'); bool excludedAccount = _isExcludedFromFee[from] || _isExcludedFromFee[to] || _isExcludedFromWalletLimit[to]; if (to != uniswapV2Pair && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwap && to == uniswapV2Pair && swapEnabled ) { contractTokenBalance = swapTokensAtAmount; //swap tokens for donation wallet uint256 forSwap = contractTokenBalance.mul(_buyDonationFee + _sellDonationFee).div(_buyDonationFee + _sellDonationFee + _buyTreasuryFee + _sellTreasuryFee); uint256 Tbalance = contractTokenBalance.mul(_buyTreasuryFee + _sellTreasuryFee).div(_buyDonationFee + _sellDonationFee + _buyTreasuryFee + _sellTreasuryFee); swapTokensForEth(donationWallet, forSwap); if (Tbalance > 0){ _tokenTransfer(address(this), treasuryWallet, Tbalance); } } _tokenTransfer(from,to,amount); } function swapTokensForEth(address wallet, uint256 tokenAmount) private lockTheSwap{ // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, wallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(recipient==uniswapV2Pair){ setAllFees(_sellTaxFee, _sellDonationFee, _sellBurnFee, _sellTreasuryFee); } if(sender == uniswapV2Pair){ setAllFees(_buyTaxFee, _buyDonationFee, _buyBurnFee, _buyTreasuryFee); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else { if (!_isExcludedFromMaxTx[sender]){ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } } 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); } restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tDonationAndTreasury, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_donationFee > 0 || _treasuryFee > 0) { _takeDonationAndTreasury(tDonationAndTreasury); emit Transfer(sender, address(this), tDonationAndTreasury); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _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 tDonationAndTreasury, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_donationFee > 0|| _treasuryFee > 0) { _takeDonationAndTreasury(tDonationAndTreasury); emit Transfer(sender, address(this), tDonationAndTreasury); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _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 tDonationAndTreasury, uint256 tBurn) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_donationFee > 0|| _treasuryFee > 0) { _takeDonationAndTreasury(tDonationAndTreasury); emit Transfer(sender, address(this), tDonationAndTreasury); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setAllFees(uint256 taxFee, uint256 donationFee, uint256 burnFee, uint256 treasuryFee) private { _taxFee = taxFee; _donationFee = donationFee; _burnFee = burnFee; _treasuryFee = treasuryFee; } function setBuyFees(uint256 taxFee, uint256 donationFee, uint256 burnFee, uint256 treasuryFee) external onlyOwner() { require(_buyBurnFee + _buyDonationFee + _buyTaxFee + _buyTreasuryFee + _sellBurnFee + _sellDonationFee + _sellTaxFee + _sellTreasuryFee <= 25, "tax too high"); _buyTaxFee = taxFee; _buyDonationFee = donationFee; _buyBurnFee = burnFee; _buyTreasuryFee = treasuryFee; } function setSellFees(uint256 taxFee, uint256 donationFee, uint256 burnFee, uint256 treasuryFee ) external onlyOwner() { require(_buyBurnFee + _buyDonationFee + _buyTaxFee + _buyTreasuryFee + _sellBurnFee + _sellDonationFee + _sellTaxFee + _sellTreasuryFee <= 25, "tax too high"); _sellTaxFee = taxFee; _sellDonationFee = donationFee; _sellBurnFee = burnFee; _sellTreasuryFee = treasuryFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(100), "value too low"); } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; require(_maxTxAmount >= totalSupply().div(100), "value too low"); } function setSwapEnabled(bool _enabled) public onlyOwner { swapEnabled = _enabled; emit swapEnabledUpdated(_enabled); } function renounceBlacklist() external onlyOwner { require(blacklistRenounced == false, "already renounced"); blacklistRenounced = true; } function blacklistAddress(address account, bool value) external onlyOwner{ require(blacklistRenounced == false, "Blacklist has already been renounced"); _isBlacklisted[account] = value; } function blacklistMultipleAccounts(address[] calldata accounts, bool blacklisted) public onlyOwner { require(blacklistRenounced == false, "Blacklist has already been renounced"); for(uint256 i = 0; i < accounts.length; i++) { _isBlacklisted[accounts[i]] = blacklisted; } emit BlacklistMultipleAccounts(accounts, blacklisted); } function setDonationWallet(address payable newWallet) external onlyOwner() { donationWallet = newWallet; } function setTreasuryWallet (address payable newWallet) external onlyOwner(){ treasuryWallet = newWallet; } function setSwapTokensAtAmount(uint256 newAmt) external onlyOwner() { swapTokensAtAmount = newAmt; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistMultipleAccounts","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":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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDonationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDonationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","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":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donationWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"_users","type":"address[]"}],"name":"includeToWhiteList","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":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"donationFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setDonationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"donationFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6001805460ff60a01b19169055610120604052600560e09081526450696e677560d81b61010052600390620000359082620004b3565b506040805180820190915260088152671393d3d51393d3d560c21b6020820152600490620000649082620004b3565b506005805460ff19908116600917909155600f80549091169055662386f26fc10000601081905562000099906000196200057f565b620000a790600019620005a2565b60115560006013819055601481905560158190556016819055601781905560188190556019819055601a819055662386f26fc10000601b5565048c27395000601c5565b5e620f48000601d55601e80546001600160a01b031990811673b26fbd55bb71d0af04fce9a26ddeffd8f166365f17909155601f80549091167366ed96f61b09e11c2349c021eceeeaf45e3a070a17905561dead60c05260026020819055600960215560228190556023829055602481905560258290556026556027556028805461ff0019166101001790553480156200018357600080fd5b5060405162003d3238038062003d32833981016040819052620001a691620005ca565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503360009081526002602090815260408083208054600160ff199182168117909255308552828520805490911690911790556011546001600160a01b0385168452600683529281902092909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a59190620005ca565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003199190620005ca565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000367573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038d9190620005ca565b6001600160a01b0390811660a052818116608052821660008181526009602090815260408083208054600160ff1991821681179092553085528285208054909116909117905560105490519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005fc565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200043957607f821691505b6020821081036200045a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004ae57600081815260208120601f850160051c81016020861015620004895750805b601f850160051c820191505b81811015620004aa5782815560010162000495565b5050505b505050565b81516001600160401b03811115620004cf57620004cf6200040e565b620004e781620004e0845462000424565b8462000460565b602080601f8311600181146200051f5760008415620005065750858301515b600019600386901b1c1916600185901b178555620004aa565b600085815260208120601f198616915b8281101562000550578886015182559484019460019091019084016200052f565b50858210156200056f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200059d57634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620005c457634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620005dd57600080fd5b81516001600160a01b0381168114620005f557600080fd5b9392505050565b60805160a05160c0516136b2620006806000396000818161059c01528181612b6201528181612f2b01528181612f7101528181612fbe015261300101526000818161070d01528181611ec201528181611faa0152818161249301526124ef01526000818161045b0152818161231d015281816123d6015261241201526136b26000f3fe6080604052600436106103905760003560e01c80636c5b2855116101dc578063afa4f3b211610102578063e6c75f71116100a0578063efcc52de1161006f578063efcc52de14610af7578063f2fde38b14610b0d578063f761920c14610b2d578063fb201b1d14610b4357600080fd5b8063e6c75f7114610a81578063e7b94df414610a97578063ea2f0b3714610ab7578063ec28438a14610ad757600080fd5b8063dd62ed3e116100dc578063dd62ed3e146109e5578063e01af92c14610a2b578063e16830a814610a4b578063e2f4560514610a6b57600080fd5b8063afa4f3b21461097f578063bea852521461099f578063d628df9c146109cf57600080fd5b806388f820201161017a578063a457c2d711610149578063a457c2d7146108ff578063a7b97fa91461091f578063a8602fea1461093f578063a9059cbb1461095f57600080fd5b806388f82020146108735780638da5cb5b146108ac57806391d55f41146108ca57806395d89b41146108ea57600080fd5b806370a08231116101b657806370a0823114610812578063715018a6146108325780637abdc1ca146108475780637d1db4a51461085d57600080fd5b80636c5b2855146107bd5780636ddd1713146107dd5780636edb091d146107fc57600080fd5b80632d838119116102c1578063455a43961161025f57806352390c021161022e57806352390c021461072f5780635342acb41461074f5780635a96cdd7146107885780635f189361146107a857600080fd5b8063455a43961461069a5780634626402b146106ba57806347535d7b146106da57806349bd5a5e146106fb57600080fd5b8063395093511161029b57806339509351146106205780633dc599ff14610640578063437823ec1461065a5780634549b0391461067a57600080fd5b80632d838119146105be578063313ce567146105de5780633685d4191461060057600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461053457806323cc66011461055457806324fcf8cf1461057457806327c8f8351461058a57600080fd5b806318160ddd146104d95780631cdd3be3146104ee578063200a692d1461051e57600080fd5b80630b6bb6f51161036a5780630b6bb6f5146104275780631694505e1461044957806316f2f1a814610495578063178d9b8e146104b957600080fd5b806306fdde031461039c57806307866291146103c7578063095ea7b31461040757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610b58565b6040516103be9190613059565b60405180910390f35b3480156103d357600080fd5b506103f76103e23660046130cc565b600b6020526000908152604090205460ff1681565b60405190151581526020016103be565b34801561041357600080fd5b506103f76104223660046130e9565b610bea565b34801561043357600080fd5b5061044761044236600461312b565b610c01565b005b34801561045557600080fd5b5061047d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103be565b3480156104a157600080fd5b506104ab60265481565b6040519081526020016103be565b3480156104c557600080fd5b506104476104d43660046131f0565b610ca6565b3480156104e557600080fd5b506010546104ab565b3480156104fa57600080fd5b506103f76105093660046130cc565b600e6020526000908152604090205460ff1681565b34801561052a57600080fd5b506104ab60205481565b34801561054057600080fd5b506103f761054f366004613222565b610d81565b34801561056057600080fd5b5061044761056f366004613273565b610dea565b34801561058057600080fd5b506104ab60235481565b34801561059657600080fd5b5061047d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ca57600080fd5b506104ab6105d93660046132a8565b610e3f565b3480156105ea57600080fd5b5060055460405160ff90911681526020016103be565b34801561060c57600080fd5b5061044761061b3660046130cc565b610ec3565b34801561062c57600080fd5b506103f761063b3660046130e9565b611075565b34801561064c57600080fd5b50600f546103f79060ff1681565b34801561066657600080fd5b506104476106753660046130cc565b6110ab565b34801561068657600080fd5b506104ab6106953660046132c1565b6110f9565b3480156106a657600080fd5b506104476106b5366004613273565b611188565b3480156106c657600080fd5b50601f5461047d906001600160a01b031681565b3480156106e657600080fd5b506001546103f790600160a01b900460ff1681565b34801561070757600080fd5b5061047d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073b57600080fd5b5061044761074a3660046130cc565b611200565b34801561075b57600080fd5b506103f761076a3660046130cc565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561079457600080fd5b506104476107a33660046130cc565b611353565b3480156107b457600080fd5b5061044761139f565b3480156107c957600080fd5b506104476107d83660046131f0565b61141f565b3480156107e957600080fd5b506028546103f790610100900460ff1681565b34801561080857600080fd5b506104ab60215481565b34801561081e57600080fd5b506104ab61082d3660046130cc565b6114fa565b34801561083e57600080fd5b50610447611559565b34801561085357600080fd5b506104ab60225481565b34801561086957600080fd5b506104ab601b5481565b34801561087f57600080fd5b506103f761088e3660046130cc565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156108b857600080fd5b506000546001600160a01b031661047d565b3480156108d657600080fd5b506104476108e53660046132a8565b6115cd565b3480156108f657600080fd5b506103b1611654565b34801561090b57600080fd5b506103f761091a3660046130e9565b611663565b34801561092b57600080fd5b5061044761093a3660046132e4565b6116b2565b34801561094b57600080fd5b5061044761095a3660046130cc565b6117b1565b34801561096b57600080fd5b506103f761097a3660046130e9565b6117fd565b34801561098b57600080fd5b5061044761099a3660046132a8565b61180a565b3480156109ab57600080fd5b506103f76109ba3660046130cc565b600a6020526000908152604090205460ff1681565b3480156109db57600080fd5b506104ab60275481565b3480156109f157600080fd5b506104ab610a00366004613368565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a3757600080fd5b50610447610a463660046133a1565b611839565b348015610a5757600080fd5b50610447610a66366004613273565b6118b7565b348015610a7757600080fd5b506104ab601c5481565b348015610a8d57600080fd5b506104ab601d5481565b348015610aa357600080fd5b50601e5461047d906001600160a01b031681565b348015610ac357600080fd5b50610447610ad23660046130cc565b61190c565b348015610ae357600080fd5b50610447610af23660046132a8565b611957565b348015610b0357600080fd5b506104ab60245481565b348015610b1957600080fd5b50610447610b283660046130cc565b6119d5565b348015610b3957600080fd5b506104ab60255481565b348015610b4f57600080fd5b50610447611abf565b606060038054610b67906133bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906133bc565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611afe565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b906133f6565b60405180910390fd5b60005b81518160ff161015610ca257600160026000848460ff1681518110610c5e57610c5e61342b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9a81613457565b915050610c37565b5050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610c2b906133f6565b6019602354602054602154602254602754602454602554602654610cf49190613476565b610cfe9190613476565b610d089190613476565b610d129190613476565b610d1c9190613476565b610d269190613476565b610d309190613476565b1115610d6d5760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610c2b565b602493909355602591909155602655602755565b6000610d8e848484611c22565b610de08433610ddb85604051806060016040528060288152602001613630602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906120de565b611afe565b5060019392505050565b6000546001600160a01b03163314610e145760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000601154821115610ea65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610eb0612118565b9050610ebc838261213b565b9392505050565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b0381166000908152600c602052604090205460ff16610f555760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610ca257816001600160a01b0316600d8281548110610f7f57610f7f61342b565b6000918252602090912001546001600160a01b03160361106357600d8054610fa990600190613489565b81548110610fb957610fb961342b565b600091825260209091200154600d80546001600160a01b039092169183908110610fe557610fe561342b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061103d5761103d61349c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061106d816134b2565b915050610f58565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610bf7918590610ddb908661217d565b6000546001600160a01b031633146110d55760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600060105483111561114d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b8161116d57600061115d846121dc565b50949650610bfb95505050505050565b6000611178846121dc565b50939650610bfb95505050505050565b6000546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156111d55760405162461bcd60e51b8152600401610c2b906134cb565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b0381166000908152600c602052604090205460ff16156112935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b038116600090815260066020526040902054156112ed576001600160a01b0381166000908152600660205260409020546112d390610e3f565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b0316331461137d5760405162461bcd60e51b8152600401610c2b906133f6565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156114105760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995b9bdd5b98d959607a1b6044820152606401610c2b565b600f805460ff19166001179055565b6000546001600160a01b031633146114495760405162461bcd60e51b8152600401610c2b906133f6565b601960235460205460215460225460275460245460255460265461146d9190613476565b6114779190613476565b6114819190613476565b61148b9190613476565b6114959190613476565b61149f9190613476565b6114a99190613476565b11156114e65760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610c2b565b602093909355602191909155602255602355565b6001600160a01b0381166000908152600c602052604081205460ff161561153757506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610bfb90610e3f565b6000546001600160a01b031633146115835760405162461bcd60e51b8152600401610c2b906133f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115f75760405162461bcd60e51b8152600401610c2b906133f6565b601d819055611610606461160a60105490565b9061213b565b601d5410156116515760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610c2b565b50565b606060048054610b67906133bc565b6000610bf73384610ddb85604051806060016040528060258152602001613658602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906120de565b6000546001600160a01b031633146116dc5760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156116ff5760405162461bcd60e51b8152600401610c2b906134cb565b60005b828110156117705781600e60008686858181106117215761172161342b565b905060200201602081019061173691906130cc565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611768816134b2565b915050611702565b507f6a7a5947ac5b035c56afedd80341423bf33595b569bd49d4e2f82b23e72275e38383836040516117a49392919061350f565b60405180910390a1505050565b6000546001600160a01b031633146117db5760405162461bcd60e51b8152600401610c2b906133f6565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610bf7338484611c22565b6000546001600160a01b031633146118345760405162461bcd60e51b8152600401610c2b906133f6565b601c55565b6000546001600160a01b031633146118635760405162461bcd60e51b8152600401610c2b906133f6565b602880548215156101000261ff00199091161790556040517f4b2f02f52c63d8e0a67a39776bc2d158740139cfef7438af1666c33a6a29dac3906118ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118e15760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146119815760405162461bcd60e51b8152600401610c2b906133f6565b601b819055611994606461160a60105490565b601b5410156116515760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610c2b565b6000546001600160a01b031633146119ff5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b038116611a645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ae95760405162461bcd60e51b8152600401610c2b906133f6565b6001805460ff60a01b1916600160a01b179055565b6001600160a01b038316611b605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611bc15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60015483908390600160a01b900460ff1680611c5657506001600160a01b03821660009081526002602052604090205460ff165b80611c7957506001600160a01b03811660009081526002602052604090205460ff165b611cb05760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610c2b565b6001600160a01b038516611d145760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038416611d765760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008311611dd85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b6001600160a01b0385166000908152600e602052604090205460ff16158015611e1a57506001600160a01b0384166000908152600e602052604090205460ff16155b611e5c5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610c2b565b6001600160a01b03851660009081526009602052604081205460ff1680611e9b57506001600160a01b03851660009081526009602052604090205460ff165b80611ebe57506001600160a01b0385166000908152600a602052604090205460ff165b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614158015611f00575080155b15611f7c576000611f10866114fa565b601d54909150611f208683613476565b1115611f7a5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610c2b565b505b6000611f87306114fa565b601c5490915081108015908190611fa1575060285460ff16155b8015611fde57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316145b8015611ff15750602854610100900460ff165b156120c957601c54915060006120446023546027546021546025546120169190613476565b6120209190613476565b61202a9190613476565b61160a60215460255461203d9190613476565b8690612237565b9050600061208f6023546027546021546025546120619190613476565b61206b9190613476565b6120759190613476565b61160a6023546027546120889190613476565b8790612237565b601e549091506120a8906001600160a01b0316836122b9565b80156120c657601f546120c69030906001600160a01b031683612491565b50505b6120d4888888612491565b5050505050505050565b600081848411156121025760405162461bcd60e51b8152600401610c2b9190613059565b50600061210f8486613489565b95945050505050565b60008060006121256127a4565b9092509050612134828261213b565b9250505090565b6000610ebc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612926565b60008061218a8385613476565b905083811015610ebc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2b565b60008060008060008060008060008060006121f68c612954565b935093509350935060008060006122178f878787612212612118565b6129bb565b919f509d509b509599509397509195509350505050919395979092949650565b60008260000361224957506000610bfb565b60006122558385613568565b905082612262858361357f565b14610ebc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2b565b6028805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106122fb576122fb61342b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239d91906135a1565b816001815181106123b0576123b061342b565b60200260200101906001600160a01b031690816001600160a01b0316815250506123fb307f000000000000000000000000000000000000000000000000000000000000000084611afe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906124509085906000908690899042906004016135be565b600060405180830381600087803b15801561246a57600080fd5b505af115801561247e573d6000803e3d6000fd5b50506028805460ff191690555050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036124ed576124ed602054602154602254602354601393909355601591909155601755601955565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361254957612549602454602554602654602754601393909355601591909155601755601955565b6001600160a01b03831660009081526009602052604090205460ff168061258857506001600160a01b03821660009081526009602052604090205460ff165b156125ab576125a66000601381905560158190556017819055601955565b61262e565b6001600160a01b0383166000908152600b602052604090205460ff1661262e57601b5481111561262e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b6001600160a01b0383166000908152600c602052604090205460ff16801561266f57506001600160a01b0382166000908152600c602052604090205460ff16155b156126845761267f838383612a1d565b612782565b6001600160a01b0383166000908152600c602052604090205460ff161580156126c557506001600160a01b0382166000908152600c602052604090205460ff165b156126d55761267f838383612c31565b6001600160a01b0383166000908152600c602052604090205460ff1615801561271757506001600160a01b0382166000908152600c602052604090205460ff16155b156127275761267f838383612cf0565b6001600160a01b0383166000908152600c602052604090205460ff16801561276757506001600160a01b0382166000908152600c602052604090205460ff165b156127775761267f838383612d4a565b612782838383612cf0565b61279f601454601355601654601555601854601755601a54601955565b505050565b6011546010546000918291825b600d548110156128f6578260066000600d84815481106127d3576127d361342b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061283e57508160076000600d84815481106128175761281761342b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561285457601154601054945094505050509091565b61289a60066000600d848154811061286e5761286e61342b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dcf565b92506128e260076000600d84815481106128b6576128b661342b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dcf565b9150806128ee816134b2565b9150506127b1565b506010546011546129069161213b565b82101561291d576011546010549350935050509091565b90939092509050565b600081836129475760405162461bcd60e51b8152600401610c2b9190613059565b50600061210f848661357f565b600080600080600061296586612e11565b9050600061298461297588612e2d565b61297e89612e49565b9061217d565b9050600061299188612e65565b905060006129ab826129a585818d89612dcf565b90612dcf565b9993985091965094509092505050565b60008080806129ca8986612237565b905060006129d88987612237565b905060006129e68988612237565b905060006129f48989612237565b90506000612a08826129a585818989612dcf565b949d949c50929a509298505050505050505050565b6000806000806000806000612a31886121dc565b9650965096509650965096509650612a7788600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b038b16600090815260076020908152604080832093909355600690522054612aa69088612dcf565b6001600160a01b03808c1660009081526006602052604080822093909355908b1681522054612ad5908761217d565b6001600160a01b038a16600090815260066020526040902055601554151580612b0057506000601954115b15612b4f57612b0e82612e81565b60405182815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b60175415612bce57612b6081612f09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bc591815260200190565b60405180910390a35b612bd88584613035565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612c1d91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612c45886121dc565b9650965096509650965096509650612c8b87600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c16815260079091522054612cc1908561217d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612ad5908761217d565b6000806000806000806000612d04886121dc565b9650965096509650965096509650612aa687600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6000806000806000806000612d5e886121dc565b9650965096509650965096509650612da488600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b038b16600090815260076020908152604080832093909355600690522054612c8b90885b6000610ebc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120de565b6000610bfb606461160a6013548561223790919063ffffffff16565b6000610bfb606461160a6019548561223790919063ffffffff16565b6000610bfb606461160a6015548561223790919063ffffffff16565b6000610bfb606461160a6017548561223790919063ffffffff16565b6000612e8b612118565b90506000612e998383612237565b30600090815260066020526040902054909150612eb6908261217d565b30600090815260066020908152604080832093909355600c9052205460ff161561279f5730600090815260076020526040902054612ef4908461217d565b30600090815260076020526040902055505050565b6000612f13612118565b90506000612f218383612237565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260066020526040902054909150612f67908261217d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260066020908152604080832093909355600c9052205460ff161561279f576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260076020526040902054612ff7908461217d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260076020526040902055505050565b6011546130429083612dcf565b601155601254613052908261217d565b6012555050565b600060208083528351808285015260005b818110156130865785810183015185820160400152820161306a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461165157600080fd5b80356130c7816130a7565b919050565b6000602082840312156130de57600080fd5b8135610ebc816130a7565b600080604083850312156130fc57600080fd5b8235613107816130a7565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561313e57600080fd5b823567ffffffffffffffff8082111561315657600080fd5b818501915085601f83011261316a57600080fd5b81358181111561317c5761317c613115565b8060051b604051601f19603f830116810181811085821117156131a1576131a1613115565b6040529182528482019250838101850191888311156131bf57600080fd5b938501935b828510156131e4576131d5856130bc565b845293850193928501926131c4565b98975050505050505050565b6000806000806080858703121561320657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561323757600080fd5b8335613242816130a7565b92506020840135613252816130a7565b929592945050506040919091013590565b803580151581146130c757600080fd5b6000806040838503121561328657600080fd5b8235613291816130a7565b915061329f60208401613263565b90509250929050565b6000602082840312156132ba57600080fd5b5035919050565b600080604083850312156132d457600080fd5b8235915061329f60208401613263565b6000806000604084860312156132f957600080fd5b833567ffffffffffffffff8082111561331157600080fd5b818601915086601f83011261332557600080fd5b81358181111561333457600080fd5b8760208260051b850101111561334957600080fd5b60209283019550935061335f9186019050613263565b90509250925092565b6000806040838503121561337b57600080fd5b8235613386816130a7565b91506020830135613396816130a7565b809150509250929050565b6000602082840312156133b357600080fd5b610ebc82613263565b600181811c908216806133d057607f821691505b6020821081036133f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361346d5761346d613441565b60010192915050565b80820180821115610bfb57610bfb613441565b81810381811115610bfb57610bfb613441565b634e487b7160e01b600052603160045260246000fd5b6000600182016134c4576134c4613441565b5060010190565b60208082526024908201527f426c61636b6c6973742068617320616c7265616479206265656e2072656e6f756040820152631b98d95960e21b606082015260800190565b6040808252810183905260008460608301825b86811015613552578235613535816130a7565b6001600160a01b0316825260209283019290910190600101613522565b5080925050508215156020830152949350505050565b8082028115828204841417610bfb57610bfb613441565b60008261359c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135b357600080fd5b8151610ebc816130a7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561360e5784516001600160a01b0316835293830193918301916001016135e9565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d173b2b4e0c8782d7aa22ff6397f6b057d1bbde3b2f0a17245295f743e42b5264736f6c6343000813003300000000000000000000000014e4b8f7292c73118b19a54387d3235ab12272cc
Deployed Bytecode
0x6080604052600436106103905760003560e01c80636c5b2855116101dc578063afa4f3b211610102578063e6c75f71116100a0578063efcc52de1161006f578063efcc52de14610af7578063f2fde38b14610b0d578063f761920c14610b2d578063fb201b1d14610b4357600080fd5b8063e6c75f7114610a81578063e7b94df414610a97578063ea2f0b3714610ab7578063ec28438a14610ad757600080fd5b8063dd62ed3e116100dc578063dd62ed3e146109e5578063e01af92c14610a2b578063e16830a814610a4b578063e2f4560514610a6b57600080fd5b8063afa4f3b21461097f578063bea852521461099f578063d628df9c146109cf57600080fd5b806388f820201161017a578063a457c2d711610149578063a457c2d7146108ff578063a7b97fa91461091f578063a8602fea1461093f578063a9059cbb1461095f57600080fd5b806388f82020146108735780638da5cb5b146108ac57806391d55f41146108ca57806395d89b41146108ea57600080fd5b806370a08231116101b657806370a0823114610812578063715018a6146108325780637abdc1ca146108475780637d1db4a51461085d57600080fd5b80636c5b2855146107bd5780636ddd1713146107dd5780636edb091d146107fc57600080fd5b80632d838119116102c1578063455a43961161025f57806352390c021161022e57806352390c021461072f5780635342acb41461074f5780635a96cdd7146107885780635f189361146107a857600080fd5b8063455a43961461069a5780634626402b146106ba57806347535d7b146106da57806349bd5a5e146106fb57600080fd5b8063395093511161029b57806339509351146106205780633dc599ff14610640578063437823ec1461065a5780634549b0391461067a57600080fd5b80632d838119146105be578063313ce567146105de5780633685d4191461060057600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461053457806323cc66011461055457806324fcf8cf1461057457806327c8f8351461058a57600080fd5b806318160ddd146104d95780631cdd3be3146104ee578063200a692d1461051e57600080fd5b80630b6bb6f51161036a5780630b6bb6f5146104275780631694505e1461044957806316f2f1a814610495578063178d9b8e146104b957600080fd5b806306fdde031461039c57806307866291146103c7578063095ea7b31461040757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610b58565b6040516103be9190613059565b60405180910390f35b3480156103d357600080fd5b506103f76103e23660046130cc565b600b6020526000908152604090205460ff1681565b60405190151581526020016103be565b34801561041357600080fd5b506103f76104223660046130e9565b610bea565b34801561043357600080fd5b5061044761044236600461312b565b610c01565b005b34801561045557600080fd5b5061047d7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103be565b3480156104a157600080fd5b506104ab60265481565b6040519081526020016103be565b3480156104c557600080fd5b506104476104d43660046131f0565b610ca6565b3480156104e557600080fd5b506010546104ab565b3480156104fa57600080fd5b506103f76105093660046130cc565b600e6020526000908152604090205460ff1681565b34801561052a57600080fd5b506104ab60205481565b34801561054057600080fd5b506103f761054f366004613222565b610d81565b34801561056057600080fd5b5061044761056f366004613273565b610dea565b34801561058057600080fd5b506104ab60235481565b34801561059657600080fd5b5061047d7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105ca57600080fd5b506104ab6105d93660046132a8565b610e3f565b3480156105ea57600080fd5b5060055460405160ff90911681526020016103be565b34801561060c57600080fd5b5061044761061b3660046130cc565b610ec3565b34801561062c57600080fd5b506103f761063b3660046130e9565b611075565b34801561064c57600080fd5b50600f546103f79060ff1681565b34801561066657600080fd5b506104476106753660046130cc565b6110ab565b34801561068657600080fd5b506104ab6106953660046132c1565b6110f9565b3480156106a657600080fd5b506104476106b5366004613273565b611188565b3480156106c657600080fd5b50601f5461047d906001600160a01b031681565b3480156106e657600080fd5b506001546103f790600160a01b900460ff1681565b34801561070757600080fd5b5061047d7f0000000000000000000000001b6698368472b9f70648b976caf9b8d66d3e30b881565b34801561073b57600080fd5b5061044761074a3660046130cc565b611200565b34801561075b57600080fd5b506103f761076a3660046130cc565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561079457600080fd5b506104476107a33660046130cc565b611353565b3480156107b457600080fd5b5061044761139f565b3480156107c957600080fd5b506104476107d83660046131f0565b61141f565b3480156107e957600080fd5b506028546103f790610100900460ff1681565b34801561080857600080fd5b506104ab60215481565b34801561081e57600080fd5b506104ab61082d3660046130cc565b6114fa565b34801561083e57600080fd5b50610447611559565b34801561085357600080fd5b506104ab60225481565b34801561086957600080fd5b506104ab601b5481565b34801561087f57600080fd5b506103f761088e3660046130cc565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156108b857600080fd5b506000546001600160a01b031661047d565b3480156108d657600080fd5b506104476108e53660046132a8565b6115cd565b3480156108f657600080fd5b506103b1611654565b34801561090b57600080fd5b506103f761091a3660046130e9565b611663565b34801561092b57600080fd5b5061044761093a3660046132e4565b6116b2565b34801561094b57600080fd5b5061044761095a3660046130cc565b6117b1565b34801561096b57600080fd5b506103f761097a3660046130e9565b6117fd565b34801561098b57600080fd5b5061044761099a3660046132a8565b61180a565b3480156109ab57600080fd5b506103f76109ba3660046130cc565b600a6020526000908152604090205460ff1681565b3480156109db57600080fd5b506104ab60275481565b3480156109f157600080fd5b506104ab610a00366004613368565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a3757600080fd5b50610447610a463660046133a1565b611839565b348015610a5757600080fd5b50610447610a66366004613273565b6118b7565b348015610a7757600080fd5b506104ab601c5481565b348015610a8d57600080fd5b506104ab601d5481565b348015610aa357600080fd5b50601e5461047d906001600160a01b031681565b348015610ac357600080fd5b50610447610ad23660046130cc565b61190c565b348015610ae357600080fd5b50610447610af23660046132a8565b611957565b348015610b0357600080fd5b506104ab60245481565b348015610b1957600080fd5b50610447610b283660046130cc565b6119d5565b348015610b3957600080fd5b506104ab60255481565b348015610b4f57600080fd5b50610447611abf565b606060038054610b67906133bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906133bc565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000610bf7338484611afe565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b906133f6565b60405180910390fd5b60005b81518160ff161015610ca257600160026000848460ff1681518110610c5e57610c5e61342b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c9a81613457565b915050610c37565b5050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610c2b906133f6565b6019602354602054602154602254602754602454602554602654610cf49190613476565b610cfe9190613476565b610d089190613476565b610d129190613476565b610d1c9190613476565b610d269190613476565b610d309190613476565b1115610d6d5760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610c2b565b602493909355602591909155602655602755565b6000610d8e848484611c22565b610de08433610ddb85604051806060016040528060288152602001613630602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906120de565b611afe565b5060019392505050565b6000546001600160a01b03163314610e145760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000601154821115610ea65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610eb0612118565b9050610ebc838261213b565b9392505050565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b0381166000908152600c602052604090205460ff16610f555760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610ca257816001600160a01b0316600d8281548110610f7f57610f7f61342b565b6000918252602090912001546001600160a01b03160361106357600d8054610fa990600190613489565b81548110610fb957610fb961342b565b600091825260209091200154600d80546001600160a01b039092169183908110610fe557610fe561342b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061103d5761103d61349c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061106d816134b2565b915050610f58565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610bf7918590610ddb908661217d565b6000546001600160a01b031633146110d55760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600060105483111561114d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b8161116d57600061115d846121dc565b50949650610bfb95505050505050565b6000611178846121dc565b50939650610bfb95505050505050565b6000546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156111d55760405162461bcd60e51b8152600401610c2b906134cb565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b0381166000908152600c602052604090205460ff16156112935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b038116600090815260066020526040902054156112ed576001600160a01b0381166000908152600660205260409020546112d390610e3f565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b0316331461137d5760405162461bcd60e51b8152600401610c2b906133f6565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156114105760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995b9bdd5b98d959607a1b6044820152606401610c2b565b600f805460ff19166001179055565b6000546001600160a01b031633146114495760405162461bcd60e51b8152600401610c2b906133f6565b601960235460205460215460225460275460245460255460265461146d9190613476565b6114779190613476565b6114819190613476565b61148b9190613476565b6114959190613476565b61149f9190613476565b6114a99190613476565b11156114e65760405162461bcd60e51b815260206004820152600c60248201526b0e8c2f040e8dede40d0d2ced60a31b6044820152606401610c2b565b602093909355602191909155602255602355565b6001600160a01b0381166000908152600c602052604081205460ff161561153757506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610bfb90610e3f565b6000546001600160a01b031633146115835760405162461bcd60e51b8152600401610c2b906133f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115f75760405162461bcd60e51b8152600401610c2b906133f6565b601d819055611610606461160a60105490565b9061213b565b601d5410156116515760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610c2b565b50565b606060048054610b67906133bc565b6000610bf73384610ddb85604051806060016040528060258152602001613658602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906120de565b6000546001600160a01b031633146116dc5760405162461bcd60e51b8152600401610c2b906133f6565b600f5460ff16156116ff5760405162461bcd60e51b8152600401610c2b906134cb565b60005b828110156117705781600e60008686858181106117215761172161342b565b905060200201602081019061173691906130cc565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611768816134b2565b915050611702565b507f6a7a5947ac5b035c56afedd80341423bf33595b569bd49d4e2f82b23e72275e38383836040516117a49392919061350f565b60405180910390a1505050565b6000546001600160a01b031633146117db5760405162461bcd60e51b8152600401610c2b906133f6565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610bf7338484611c22565b6000546001600160a01b031633146118345760405162461bcd60e51b8152600401610c2b906133f6565b601c55565b6000546001600160a01b031633146118635760405162461bcd60e51b8152600401610c2b906133f6565b602880548215156101000261ff00199091161790556040517f4b2f02f52c63d8e0a67a39776bc2d158740139cfef7438af1666c33a6a29dac3906118ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118e15760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119365760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146119815760405162461bcd60e51b8152600401610c2b906133f6565b601b819055611994606461160a60105490565b601b5410156116515760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610c2b565b6000546001600160a01b031633146119ff5760405162461bcd60e51b8152600401610c2b906133f6565b6001600160a01b038116611a645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ae95760405162461bcd60e51b8152600401610c2b906133f6565b6001805460ff60a01b1916600160a01b179055565b6001600160a01b038316611b605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611bc15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60015483908390600160a01b900460ff1680611c5657506001600160a01b03821660009081526002602052604090205460ff165b80611c7957506001600160a01b03811660009081526002602052604090205460ff165b611cb05760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610c2b565b6001600160a01b038516611d145760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038416611d765760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008311611dd85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b6001600160a01b0385166000908152600e602052604090205460ff16158015611e1a57506001600160a01b0384166000908152600e602052604090205460ff16155b611e5c5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610c2b565b6001600160a01b03851660009081526009602052604081205460ff1680611e9b57506001600160a01b03851660009081526009602052604090205460ff165b80611ebe57506001600160a01b0385166000908152600a602052604090205460ff165b90507f0000000000000000000000001b6698368472b9f70648b976caf9b8d66d3e30b86001600160a01b0316856001600160a01b031614158015611f00575080155b15611f7c576000611f10866114fa565b601d54909150611f208683613476565b1115611f7a5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610c2b565b505b6000611f87306114fa565b601c5490915081108015908190611fa1575060285460ff16155b8015611fde57507f0000000000000000000000001b6698368472b9f70648b976caf9b8d66d3e30b86001600160a01b0316876001600160a01b0316145b8015611ff15750602854610100900460ff165b156120c957601c54915060006120446023546027546021546025546120169190613476565b6120209190613476565b61202a9190613476565b61160a60215460255461203d9190613476565b8690612237565b9050600061208f6023546027546021546025546120619190613476565b61206b9190613476565b6120759190613476565b61160a6023546027546120889190613476565b8790612237565b601e549091506120a8906001600160a01b0316836122b9565b80156120c657601f546120c69030906001600160a01b031683612491565b50505b6120d4888888612491565b5050505050505050565b600081848411156121025760405162461bcd60e51b8152600401610c2b9190613059565b50600061210f8486613489565b95945050505050565b60008060006121256127a4565b9092509050612134828261213b565b9250505090565b6000610ebc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612926565b60008061218a8385613476565b905083811015610ebc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2b565b60008060008060008060008060008060006121f68c612954565b935093509350935060008060006122178f878787612212612118565b6129bb565b919f509d509b509599509397509195509350505050919395979092949650565b60008260000361224957506000610bfb565b60006122558385613568565b905082612262858361357f565b14610ebc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2b565b6028805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106122fb576122fb61342b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239d91906135a1565b816001815181106123b0576123b061342b565b60200260200101906001600160a01b031690816001600160a01b0316815250506123fb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611afe565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906124509085906000908690899042906004016135be565b600060405180830381600087803b15801561246a57600080fd5b505af115801561247e573d6000803e3d6000fd5b50506028805460ff191690555050505050565b7f0000000000000000000000001b6698368472b9f70648b976caf9b8d66d3e30b86001600160a01b0316826001600160a01b0316036124ed576124ed602054602154602254602354601393909355601591909155601755601955565b7f0000000000000000000000001b6698368472b9f70648b976caf9b8d66d3e30b86001600160a01b0316836001600160a01b03160361254957612549602454602554602654602754601393909355601591909155601755601955565b6001600160a01b03831660009081526009602052604090205460ff168061258857506001600160a01b03821660009081526009602052604090205460ff165b156125ab576125a66000601381905560158190556017819055601955565b61262e565b6001600160a01b0383166000908152600b602052604090205460ff1661262e57601b5481111561262e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b6001600160a01b0383166000908152600c602052604090205460ff16801561266f57506001600160a01b0382166000908152600c602052604090205460ff16155b156126845761267f838383612a1d565b612782565b6001600160a01b0383166000908152600c602052604090205460ff161580156126c557506001600160a01b0382166000908152600c602052604090205460ff165b156126d55761267f838383612c31565b6001600160a01b0383166000908152600c602052604090205460ff1615801561271757506001600160a01b0382166000908152600c602052604090205460ff16155b156127275761267f838383612cf0565b6001600160a01b0383166000908152600c602052604090205460ff16801561276757506001600160a01b0382166000908152600c602052604090205460ff165b156127775761267f838383612d4a565b612782838383612cf0565b61279f601454601355601654601555601854601755601a54601955565b505050565b6011546010546000918291825b600d548110156128f6578260066000600d84815481106127d3576127d361342b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061283e57508160076000600d84815481106128175761281761342b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561285457601154601054945094505050509091565b61289a60066000600d848154811061286e5761286e61342b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612dcf565b92506128e260076000600d84815481106128b6576128b661342b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612dcf565b9150806128ee816134b2565b9150506127b1565b506010546011546129069161213b565b82101561291d576011546010549350935050509091565b90939092509050565b600081836129475760405162461bcd60e51b8152600401610c2b9190613059565b50600061210f848661357f565b600080600080600061296586612e11565b9050600061298461297588612e2d565b61297e89612e49565b9061217d565b9050600061299188612e65565b905060006129ab826129a585818d89612dcf565b90612dcf565b9993985091965094509092505050565b60008080806129ca8986612237565b905060006129d88987612237565b905060006129e68988612237565b905060006129f48989612237565b90506000612a08826129a585818989612dcf565b949d949c50929a509298505050505050505050565b6000806000806000806000612a31886121dc565b9650965096509650965096509650612a7788600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b038b16600090815260076020908152604080832093909355600690522054612aa69088612dcf565b6001600160a01b03808c1660009081526006602052604080822093909355908b1681522054612ad5908761217d565b6001600160a01b038a16600090815260066020526040902055601554151580612b0057506000601954115b15612b4f57612b0e82612e81565b60405182815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b60175415612bce57612b6081612f09565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bc591815260200190565b60405180910390a35b612bd88584613035565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612c1d91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612c45886121dc565b9650965096509650965096509650612c8b87600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c16815260079091522054612cc1908561217d565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612ad5908761217d565b6000806000806000806000612d04886121dc565b9650965096509650965096509650612aa687600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6000806000806000806000612d5e886121dc565b9650965096509650965096509650612da488600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612dcf90919063ffffffff16565b6001600160a01b038b16600090815260076020908152604080832093909355600690522054612c8b90885b6000610ebc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120de565b6000610bfb606461160a6013548561223790919063ffffffff16565b6000610bfb606461160a6019548561223790919063ffffffff16565b6000610bfb606461160a6015548561223790919063ffffffff16565b6000610bfb606461160a6017548561223790919063ffffffff16565b6000612e8b612118565b90506000612e998383612237565b30600090815260066020526040902054909150612eb6908261217d565b30600090815260066020908152604080832093909355600c9052205460ff161561279f5730600090815260076020526040902054612ef4908461217d565b30600090815260076020526040902055505050565b6000612f13612118565b90506000612f218383612237565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260066020526040902054909150612f67908261217d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260066020908152604080832093909355600c9052205460ff161561279f576001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260076020526040902054612ff7908461217d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260076020526040902055505050565b6011546130429083612dcf565b601155601254613052908261217d565b6012555050565b600060208083528351808285015260005b818110156130865785810183015185820160400152820161306a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461165157600080fd5b80356130c7816130a7565b919050565b6000602082840312156130de57600080fd5b8135610ebc816130a7565b600080604083850312156130fc57600080fd5b8235613107816130a7565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561313e57600080fd5b823567ffffffffffffffff8082111561315657600080fd5b818501915085601f83011261316a57600080fd5b81358181111561317c5761317c613115565b8060051b604051601f19603f830116810181811085821117156131a1576131a1613115565b6040529182528482019250838101850191888311156131bf57600080fd5b938501935b828510156131e4576131d5856130bc565b845293850193928501926131c4565b98975050505050505050565b6000806000806080858703121561320657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561323757600080fd5b8335613242816130a7565b92506020840135613252816130a7565b929592945050506040919091013590565b803580151581146130c757600080fd5b6000806040838503121561328657600080fd5b8235613291816130a7565b915061329f60208401613263565b90509250929050565b6000602082840312156132ba57600080fd5b5035919050565b600080604083850312156132d457600080fd5b8235915061329f60208401613263565b6000806000604084860312156132f957600080fd5b833567ffffffffffffffff8082111561331157600080fd5b818601915086601f83011261332557600080fd5b81358181111561333457600080fd5b8760208260051b850101111561334957600080fd5b60209283019550935061335f9186019050613263565b90509250925092565b6000806040838503121561337b57600080fd5b8235613386816130a7565b91506020830135613396816130a7565b809150509250929050565b6000602082840312156133b357600080fd5b610ebc82613263565b600181811c908216806133d057607f821691505b6020821081036133f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361346d5761346d613441565b60010192915050565b80820180821115610bfb57610bfb613441565b81810381811115610bfb57610bfb613441565b634e487b7160e01b600052603160045260246000fd5b6000600182016134c4576134c4613441565b5060010190565b60208082526024908201527f426c61636b6c6973742068617320616c7265616479206265656e2072656e6f756040820152631b98d95960e21b606082015260800190565b6040808252810183905260008460608301825b86811015613552578235613535816130a7565b6001600160a01b0316825260209283019290910190600101613522565b5080925050508215156020830152949350505050565b8082028115828204841417610bfb57610bfb613441565b60008261359c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156135b357600080fd5b8151610ebc816130a7565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561360e5784516001600160a01b0316835293830193918301916001016135e9565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d173b2b4e0c8782d7aa22ff6397f6b057d1bbde3b2f0a17245295f743e42b5264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000014e4b8f7292c73118b19a54387d3235ab12272cc
-----Decoded View---------------
Arg [0] : _owner (address): 0x14E4b8f7292c73118B19a54387D3235AB12272cc
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000014e4b8f7292c73118b19a54387d3235ab12272cc
Deployed Bytecode Sourcemap
21054:22806:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24482:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21716:52;;;;;;;;;;-1:-1:-1;21716:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1259:14:1;;1252:22;1234:41;;1222:2;1207:18;21716:52:0;1094:187:1;25394:161:0;;;;;;;;;;-1:-1:-1;25394:161:0;;;;;:::i;:::-;;:::i;20857:186::-;;;;;;;;;;-1:-1:-1;20857:186:0;;;;;:::i;:::-;;:::i;:::-;;21191:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3055:32:1;;;3037:51;;3025:2;3010:18;21191:51:0;2864:230:1;23322:30:0;;;;;;;;;;;;;;;;;;;3245:25:1;;;3233:2;3218:18;23322:30:0;3099:177:1;41108:460:0;;;;;;;;;;-1:-1:-1;41108:460:0;;;;;:::i;:::-;;:::i;24759:95::-;;;;;;;;;;-1:-1:-1;24839:7:0;;24759:95;;21861:46;;;;;;;;;;-1:-1:-1;21861:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23068:30;;;;;;;;;;;;;;;;25563:313;;;;;;;;;;-1:-1:-1;25563:313:0;;;;;:::i;:::-;;:::i;28546:136::-;;;;;;;;;;-1:-1:-1;28546:136:0;;;;;:::i;:::-;;:::i;23185:35::-;;;;;;;;;;;;;;;;22938:81;;;;;;;;;;;;;;;27306:253;;;;;;;;;;-1:-1:-1;27306:253:0;;;;;:::i;:::-;;:::i;24668:83::-;;;;;;;;;;-1:-1:-1;24734:9:0;;24668:83;;24734:9;;;;5152:36:1;;5140:2;5125:18;24668:83:0;5010:184:1;27908:479:0;;;;;;;;;;-1:-1:-1;27908:479:0;;;;;:::i;:::-;;:::i;25884:218::-;;;;;;;;;;-1:-1:-1;25884:218:0;;;;;:::i;:::-;;:::i;21914:38::-;;;;;;;;;;-1:-1:-1;21914:38:0;;;;;;;;29665:111;;;;;;;;;;-1:-1:-1;29665:111:0;;;;;:::i;:::-;;:::i;26860:438::-;;;;;;;;;;-1:-1:-1;26860:438:0;;;;;:::i;:::-;;:::i;42782:210::-;;;;;;;;;;-1:-1:-1;42782:210:0;;;;;:::i;:::-;;:::i;22812:92::-;;;;;;;;;;-1:-1:-1;22812:92:0;;;;-1:-1:-1;;;;;22812:92:0;;;20437:26;;;;;;;;;;-1:-1:-1;20437:26:0;;;;-1:-1:-1;;;20437:26:0;;;;;;21249:38;;;;;;;;;;;;;;;27567:333;;;;;;;;;;-1:-1:-1;27567:333:0;;;;;:::i;:::-;;:::i;29784:123::-;;;;;;;;;;-1:-1:-1;29784:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;29872:27:0;29848:4;29872:27;;;:18;:27;;;;;;;;;29784:123;43391:120;;;;;;;;;;-1:-1:-1;43391:120:0;;;;;:::i;:::-;;:::i;42614:160::-;;;;;;;;;;;;;:::i;41586:477::-;;;;;;;;;;-1:-1:-1;41586:477:0;;;;;:::i;:::-;;:::i;23426:30::-;;;;;;;;;;-1:-1:-1;23426:30:0;;;;;;;;;;;23105:35;;;;;;;;;;;;;;;;24862:198;;;;;;;;;;-1:-1:-1;24862:198:0;;;;;:::i;:::-;;:::i;2514:148::-;;;;;;;;;;;;;:::i;23147:31::-;;;;;;;;;;;;;;;;22522:46;;;;;;;;;;;;;;;;26732:120;;;;;;;;;;-1:-1:-1;26732:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26824:20:0;26800:4;26824:20;;;:11;:20;;;;;;;;;26732:120;1871:79;;;;;;;;;;-1:-1:-1;1909:7:0;1936:6;-1:-1:-1;;;;;1936:6:0;1871:79;;42074:185;;;;;;;;;;-1:-1:-1;42074:185:0;;;;;:::i;:::-;;:::i;24573:87::-;;;;;;;;;;;;;:::i;26110:269::-;;;;;;;;;;-1:-1:-1;26110:269:0;;;;;:::i;:::-;;:::i;43000:383::-;;;;;;;;;;-1:-1:-1;43000:383:0;;;;;:::i;:::-;;:::i;43519:120::-;;;;;;;;;;-1:-1:-1;43519:120:0;;;;;:::i;:::-;;:::i;25068:167::-;;;;;;;;;;-1:-1:-1;25068:167:0;;;;;:::i;:::-;;:::i;43647:114::-;;;;;;;;;;-1:-1:-1;43647:114:0;;;;;:::i;:::-;;:::i;21650:59::-;;;;;;;;;;-1:-1:-1;21650:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23359:34;;;;;;;;;;;;;;;;25243:143;;;;;;;;;;-1:-1:-1;25243:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;25351:18:0;;;25324:7;25351:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25243:143;42465:141;;;;;;;;;;-1:-1:-1;42465:141:0;;;;;:::i;:::-;;:::i;28395:143::-;;;;;;;;;;-1:-1:-1;28395:143:0;;;;;:::i;:::-;;:::i;22575:48::-;;;;;;;;;;;;;;;;22630:46;;;;;;;;;;;;;;;;22685:91;;;;;;;;;;-1:-1:-1;22685:91:0;;;;-1:-1:-1;;;;;22685:91:0;;;29919:110;;;;;;;;;;-1:-1:-1;29919:110:0;;;;;:::i;:::-;;:::i;42271:186::-;;;;;;;;;;-1:-1:-1;42271:186:0;;;;;:::i;:::-;;:::i;23245:29::-;;;;;;;;;;;;;;;;2817:244;;;;;;;;;;-1:-1:-1;2817:244:0;;;;;:::i;:::-;;:::i;23281:34::-;;;;;;;;;;;;;;;;20777:72;;;;;;;;;;;;;:::i;24482:83::-;24519:13;24552:5;24545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24482:83;:::o;25394:161::-;25469:4;25486:39;1004:10;25509:7;25518:6;25486:8;:39::i;:::-;-1:-1:-1;25543:4:0;25394:161;;;;;:::o;20857:186::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;;;;;;;;;20944:7:::1;20940:96;20961:6;:13;20957:1;:17;;;20940:96;;;21020:4;20996:10;:21;21007:6;21014:1;21007:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20996:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20996:21:0;:28;;-1:-1:-1;;20996:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20976:3;::::1;::::0;::::1;:::i;:::-;;;;20940:96;;;;20857:186:::0;:::o;41108:460::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;41399:2:::1;41379:16;;41365:11;;41327:16;;41312:12;;41294:15;;41281:10;;41263:15;;41249:11;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;:60;;;;:::i;:::-;:75;;;;:::i;:::-;:94;;;;:::i;:::-;:127;;;;:::i;:::-;:146;;;;:::i;:::-;:152;;41241:177;;;::::0;-1:-1:-1;;;41241:177:0;;8730:2:1;41241:177:0::1;::::0;::::1;8712:21:1::0;8769:2;8749:18;;;8742:30;-1:-1:-1;;;8788:18:1;;;8781:42;8840:18;;41241:177:0::1;8528:336:1::0;41241:177:0::1;41429:10;:19:::0;;;;41459:15:::1;:29:::0;;;;41499:11:::1;:21:::0;41531:15:::1;:29:::0;41108:460::o;25563:313::-;25661:4;25678:36;25688:6;25696:9;25707:6;25678:9;:36::i;:::-;25725:121;25734:6;1004:10;25756:89;25794:6;25756:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25756:19:0;;;;;;:11;:19;;;;;;;;1004:10;25756:33;;;;;;;;;;:37;:89::i;:::-;25725:8;:121::i;:::-;-1:-1:-1;25864:4:0;25563:313;;;;;:::o;28546:136::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28637:26:0;;;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;-1:-1:-1;;28637:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28546:136::o;27306:253::-;27372:7;27411;;27400;:18;;27392:73;;;;-1:-1:-1;;;27392:73:0;;9071:2:1;27392:73:0;;;9053:21:1;9110:2;9090:18;;;9083:30;9149:34;9129:18;;;9122:62;-1:-1:-1;;;9200:18:1;;;9193:40;9250:19;;27392:73:0;8869:406:1;27392:73:0;27476:19;27499:10;:8;:10::i;:::-;27476:33;-1:-1:-1;27527:24:0;:7;27476:33;27527:11;:24::i;:::-;27520:31;27306:253;-1:-1:-1;;;27306:253:0:o;27908:479::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27990:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27982:60;;;::::0;-1:-1:-1;;;27982:60:0;;9482:2:1;27982:60:0::1;::::0;::::1;9464:21:1::0;9521:2;9501:18;;;9494:30;9560:29;9540:18;;;9533:57;9607:18;;27982:60:0::1;9280:351:1::0;27982:60:0::1;28058:9;28053:327;28077:9;:16:::0;28073:20;::::1;28053:327;;;28135:7;-1:-1:-1::0;;;;;28119:23:0::1;:9;28129:1;28119:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28119:12:0::1;:23:::0;28115:254:::1;;28178:9;28188:16:::0;;:20:::1;::::0;28207:1:::1;::::0;28188:20:::1;:::i;:::-;28178:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28163:9:::1;:12:::0;;-1:-1:-1;;;;;28178:31:0;;::::1;::::0;28173:1;;28163:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28163:46:0::1;-1:-1:-1::0;;;;;28163:46:0;;::::1;;::::0;;28228:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28267:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28267:28:0::1;::::0;;28314:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28314:15:0;;;;;-1:-1:-1;;;;;;28314:15:0::1;::::0;;;;;20940:96:::1;20857:186:::0;:::o;28115:254::-:1;28095:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28053:327;;25884:218:::0;1004:10;25972:4;26021:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26021:34:0;;;;;;;;;;25972:4;;25989:83;;26012:7;;26021:50;;26060:10;26021:38;:50::i;29665:111::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29734:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29734:34:0::1;29764:4;29734:34;::::0;;29665:111::o;26860:438::-;26950:7;26989;;26978;:18;;26970:62;;;;-1:-1:-1;;;26970:62:0;;10243:2:1;26970:62:0;;;10225:21:1;10282:2;10262:18;;;10255:30;10321:33;10301:18;;;10294:61;10372:18;;26970:62:0;10041:355:1;26970:62:0;27048:17;27043:248;;27083:15;27108:19;27119:7;27108:10;:19::i;:::-;-1:-1:-1;27082:45:0;;-1:-1:-1;27142:14:0;;-1:-1:-1;;;;;;27142:14:0;27043:248;27191:23;27223:19;27234:7;27223:10;:19::i;:::-;-1:-1:-1;27189:53:0;;-1:-1:-1;27257:22:0;;-1:-1:-1;;;;;;27257:22:0;42782:210;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;42874:18:::1;::::0;::::1;;:27;42866:76;;;;-1:-1:-1::0;;;42866:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42953:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;42953:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42782:210::o;27567:333::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27650:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27649:21;27641:61;;;::::0;-1:-1:-1;;;27641:61:0;;9482:2:1;27641:61:0::1;::::0;::::1;9464:21:1::0;9521:2;9501:18;;;9494:30;9560:29;9540:18;;;9533:57;9607:18;;27641:61:0::1;9280:351:1::0;27641:61:0::1;-1:-1:-1::0;;;;;27716:16:0;::::1;27735:1;27716:16:::0;;;:7:::1;:16;::::0;;;;;:20;27713:108:::1;;-1:-1:-1::0;;;;;27792:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27772:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27753:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27713:108:::1;-1:-1:-1::0;;;;;27831:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27831:27:0::1;27854:4;27831:27:::0;;::::1;::::0;;;27869:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27869:23:0::1;::::0;;::::1;::::0;;27567:333::o;43391:120::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;43477:14:::1;:26:::0;;-1:-1:-1;;;;;;43477:26:0::1;-1:-1:-1::0;;;;;43477:26:0;;;::::1;::::0;;;::::1;::::0;;43391:120::o;42614:160::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;42681:18:::1;::::0;::::1;;:27;42673:57;;;::::0;-1:-1:-1;;;42673:57:0;;11008:2:1;42673:57:0::1;::::0;::::1;10990:21:1::0;11047:2;11027:18;;;11020:30;-1:-1:-1;;;11066:18:1;;;11059:47;11123:18;;42673:57:0::1;10806:341:1::0;42673:57:0::1;42741:18;:25:::0;;-1:-1:-1;;42741:25:0::1;42762:4;42741:25;::::0;;42614:160::o;41586:477::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;41880:2:::1;41860:16;;41846:11;;41808:16;;41793:12;;41775:15;;41762:10;;41744:15;;41730:11;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;:60;;;;:::i;:::-;:75;;;;:::i;:::-;:94;;;;:::i;:::-;:127;;;;:::i;:::-;:146;;;;:::i;:::-;:152;;41722:177;;;::::0;-1:-1:-1;;;41722:177:0;;8730:2:1;41722:177:0::1;::::0;::::1;8712:21:1::0;8769:2;8749:18;;;8742:30;-1:-1:-1;;;8788:18:1;;;8781:42;8840:18;;41722:177:0::1;8528:336:1::0;41722:177:0::1;41910:11;:20:::0;;;;41941:16:::1;:30:::0;;;;41982:12:::1;:22:::0;42015:16:::1;:30:::0;41586:477::o;24862:198::-;-1:-1:-1;;;;;24952:20:0;;24928:7;24952:20;;;:11;:20;;;;;;;;24948:49;;;-1:-1:-1;;;;;;24981:16:0;;;;;:7;:16;;;;;;;24862:198::o;24948:49::-;-1:-1:-1;;;;;25035:16:0;;;;;;:7;:16;;;;;;25015:37;;:19;:37::i;2514:148::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;2621:1:::1;2605:6:::0;;2584:40:::1;::::0;-1:-1:-1;;;;;2605:6:0;;::::1;::::0;2584:40:::1;::::0;2621:1;;2584:40:::1;2652:1;2635:19:::0;;-1:-1:-1;;;;;;2635:19:0::1;::::0;;2514:148::o;42074:185::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;42149:14:::1;:26:::0;;;42212:22:::1;42230:3;42212:13;24839:7:::0;;;24759:95;42212:13:::1;:17:::0;::::1;:22::i;:::-;42194:14;;:40;;42186:66;;;::::0;-1:-1:-1;;;42186:66:0;;11354:2:1;42186:66:0::1;::::0;::::1;11336:21:1::0;11393:2;11373:18;;;11366:30;-1:-1:-1;;;11412:18:1;;;11405:43;11465:18;;42186:66:0::1;11152:337:1::0;42186:66:0::1;42074:185:::0;:::o;24573:87::-;24612:13;24645:7;24638:14;;;;;:::i;26110:269::-;26203:4;26220:129;1004:10;26243:7;26252:96;26291:15;26252:96;;;;;;;;;;;;;;;;;1004:10;26252:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26252:34:0;;;;;;;;;;;;:38;:96::i;43000:383::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;43118:18:::1;::::0;::::1;;:27;43110:76;;;;-1:-1:-1::0;;;43110:76:0::1;;;;;;;:::i;:::-;43201:9;43197:113;43216:19:::0;;::::1;43197:113;;;43287:11;43257:14;:27;43272:8;;43281:1;43272:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43257:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43257:27:0;:41;;-1:-1:-1;;43257:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43237:3;::::1;::::0;::::1;:::i;:::-;;;;43197:113;;;;43327:48;43353:8;;43363:11;43327:48;;;;;;;;:::i;:::-;;;;;;;;43000:383:::0;;;:::o;43519:120::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;43605:14:::1;:26:::0;;-1:-1:-1;;;;;;43605:26:0::1;-1:-1:-1::0;;;;;43605:26:0;;;::::1;::::0;;;::::1;::::0;;43519:120::o;25068:167::-;25146:4;25163:42;1004:10;25187:9;25198:6;25163:9;:42::i;43647:114::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;43726:18:::1;:27:::0;43647:114::o;42465:141::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;42532:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;42532:22:0;;::::1;;::::0;;42570:28:::1;::::0;::::1;::::0;::::1;::::0;42546:8;1259:14:1;1252:22;1234:41;;1222:2;1207:18;;1094:187;42570:28:0::1;;;;;;;;42465:141:::0;:::o;28395:143::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28487:32:0;;;::::1;;::::0;;;:26:::1;:32;::::0;;;;:43;;-1:-1:-1;;28487:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28395:143::o;29919:110::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29986:27:0::1;30016:5;29986:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29986:35:0::1;::::0;;29919:110::o;42271:186::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;42348:12:::1;:26:::0;;;42409:22:::1;42427:3;42409:13;24839:7:::0;;;24759:95;42409:22:::1;42393:12;;:38;;42385:64;;;::::0;-1:-1:-1;;;42385:64:0;;11354:2:1;42385:64:0::1;::::0;::::1;11336:21:1::0;11393:2;11373:18;;;11366:30;-1:-1:-1;;;11412:18:1;;;11405:43;11465:18;;42385:64:0::1;11152:337:1::0;2817:244:0;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2906:22:0;::::1;2898:73;;;::::0;-1:-1:-1;;;2898:73:0;;12495:2:1;2898:73:0::1;::::0;::::1;12477:21:1::0;12534:2;12514:18;;;12507:30;12573:34;12553:18;;;12546:62;-1:-1:-1;;;12624:18:1;;;12617:36;12670:19;;2898:73:0::1;12293:402:1::0;2898:73:0::1;3008:6;::::0;;2987:38:::1;::::0;-1:-1:-1;;;;;2987:38:0;;::::1;::::0;3008:6;::::1;::::0;2987:38:::1;::::0;::::1;3036:6;:17:::0;;-1:-1:-1;;;;;;3036:17:0::1;-1:-1:-1::0;;;;;3036:17:0;;;::::1;::::0;;;::::1;::::0;;2817:244::o;20777:72::-;2083:6;;-1:-1:-1;;;;;2083:6:0;1004:10;2083:22;2075:67;;;;-1:-1:-1;;;2075:67:0;;;;;;;:::i;:::-;20837:4:::1;20828:13:::0;;-1:-1:-1;;;;20828:13:0::1;-1:-1:-1::0;;;20828:13:0::1;::::0;;20777:72::o;26387:337::-;-1:-1:-1;;;;;26480:19:0;;26472:68;;;;-1:-1:-1;;;26472:68:0;;12902:2:1;26472:68:0;;;12884:21:1;12941:2;12921:18;;;12914:30;12980:34;12960:18;;;12953:62;-1:-1:-1;;;13031:18:1;;;13024:34;13075:19;;26472:68:0;12700:400:1;26472:68:0;-1:-1:-1;;;;;26559:21:0;;26551:68;;;;-1:-1:-1;;;26551:68:0;;13307:2:1;26551:68:0;;;13289:21:1;13346:2;13326:18;;;13319:30;13385:34;13365:18;;;13358:62;-1:-1:-1;;;13436:18:1;;;13429:32;13478:19;;26551:68:0;13105:398:1;26551:68:0;-1:-1:-1;;;;;26632:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26684:32;;3245:25:1;;;26684:32:0;;3218:18:1;26684:32:0;;;;;;;26387:337;;;:::o;34262:1921::-;20579:6;;34362:4;;34368:2;;-1:-1:-1;;;20579:6:0;;;;;:26;;-1:-1:-1;;;;;;20589:16:0;;;;;;:10;:16;;;;;;;;20579:26;:44;;;-1:-1:-1;;;;;;20609:14:0;;;;;;:10;:14;;;;;;;;20579:44;20571:65;;;;-1:-1:-1;;;20571:65:0;;13710:2:1;20571:65:0;;;13692:21:1;13749:1;13729:18;;;13722:29;-1:-1:-1;;;13767:18:1;;;13760:38;13815:18;;20571:65:0;13508:331:1;20571:65:0;-1:-1:-1;;;;;34399:18:0;::::1;34391:68;;;::::0;-1:-1:-1;;;34391:68:0;;14046:2:1;34391:68:0::1;::::0;::::1;14028:21:1::0;14085:2;14065:18;;;14058:30;14124:34;14104:18;;;14097:62;-1:-1:-1;;;14175:18:1;;;14168:35;14220:19;;34391:68:0::1;13844:401:1::0;34391:68:0::1;-1:-1:-1::0;;;;;34478:16:0;::::1;34470:64;;;::::0;-1:-1:-1;;;34470:64:0;;14452:2:1;34470:64:0::1;::::0;::::1;14434:21:1::0;14491:2;14471:18;;;14464:30;14530:34;14510:18;;;14503:62;-1:-1:-1;;;14581:18:1;;;14574:33;14624:19;;34470:64:0::1;14250:399:1::0;34470:64:0::1;34562:1;34553:6;:10;34545:64;;;::::0;-1:-1:-1;;;34545:64:0;;14856:2:1;34545:64:0::1;::::0;::::1;14838:21:1::0;14895:2;14875:18;;;14868:30;14934:34;14914:18;;;14907:62;-1:-1:-1;;;14985:18:1;;;14978:39;15034:19;;34545:64:0::1;14654:405:1::0;34545:64:0::1;-1:-1:-1::0;;;;;34629:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;;34628:21;:44:::0;::::1;;;-1:-1:-1::0;;;;;;34654:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;;::::1;;34653:19;34628:44;34620:76;;;::::0;-1:-1:-1;;;34620:76:0;;15266:2:1;34620:76:0::1;::::0;::::1;15248:21:1::0;15305:2;15285:18;;;15278:30;-1:-1:-1;;;15324:18:1;;;15317:49;15383:18;;34620:76:0::1;15064:343:1::0;34620:76:0::1;-1:-1:-1::0;;;;;34731:24:0;::::1;34708:20;34731:24:::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;34759:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;34731:50;:84;;;-1:-1:-1::0;;;;;;34785:30:0;::::1;;::::0;;;:26:::1;:30;::::0;;;;;::::1;;34731:84;34708:107;;34846:13;-1:-1:-1::0;;;;;34840:19:0::1;:2;-1:-1:-1::0;;;;;34840:19:0::1;;;:39;;;;;34864:15;34863:16;34840:39;34836:237;;;34896:32;34931:13;34941:2;34931:9;:13::i;:::-;35006:14;::::0;34896:48;;-1:-1:-1;34969:33:0::1;34996:6:::0;34896:48;34969:33:::1;:::i;:::-;:51;;34961:100;;;::::0;-1:-1:-1;;;34961:100:0;;15614:2:1;34961:100:0::1;::::0;::::1;15596:21:1::0;15653:2;15633:18;;;15626:30;15692:34;15672:18;;;15665:62;-1:-1:-1;;;15743:18:1;;;15736:34;15787:19;;34961:100:0::1;15412:400:1::0;34961:100:0::1;34881:192;34836:237;35085:28;35116:24;35134:4;35116:9;:24::i;:::-;35210:18;::::0;35085:55;;-1:-1:-1;35186:42:0;::::1;::::0;::::1;::::0;;;35259:43:::1;;-1:-1:-1::0;35296:6:0::1;::::0;::::1;;35295:7;35259:43;:79;;;;;35325:13;-1:-1:-1::0;;;;;35319:19:0::1;:2;-1:-1:-1::0;;;;;35319:19:0::1;;35259:79;:107;;;;-1:-1:-1::0;35355:11:0::1;::::0;::::1;::::0;::::1;;;35259:107;35241:884;;;35416:18;;35393:41;;35496:15;35514:181;35678:16;;35660:15;;35641:16;;35579:15;;:78;;;;:::i;:::-;:96;;;;:::i;:::-;:115;;;;:::i;:::-;35514:60;35557:16;;35539:15;;:34;;;;:::i;:::-;35514:20:::0;;:24:::1;:60::i;:181::-;35496:199;;35710:16;35729:181;35893:16;;35875:15;;35856:16;;35794:15;;:78;;;;:::i;:::-;:96;;;;:::i;:::-;:115;;;;:::i;:::-;35729:60;35772:16;;35754:15;;:34;;;;:::i;:::-;35729:20:::0;;:24:::1;:60::i;:181::-;35942:14;::::0;35710:200;;-1:-1:-1;35925:41:0::1;::::0;-1:-1:-1;;;;;35942:14:0::1;35958:7:::0;35925:16:::1;:41::i;:::-;35987:12:::0;;35983:131:::1;;36073:14;::::0;36043:55:::1;::::0;36066:4:::1;::::0;-1:-1:-1;;;;;36073:14:0::1;36089:8:::0;36043:14:::1;:55::i;:::-;35378:747;;35241:884;36145:30;36160:4;36165:2;36168:6;36145:14;:30::i;:::-;34380:1803;;;34262:1921:::0;;;;;:::o;3941:192::-;4027:7;4063:12;4055:6;;;;4047:29;;;;-1:-1:-1;;;4047:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4087:9:0;4099:5;4103:1;4099;:5;:::i;:::-;4087:17;3941:192;-1:-1:-1;;;;;3941:192:0:o;31724:163::-;31765:7;31786:15;31803;31822:19;:17;:19::i;:::-;31785:56;;-1:-1:-1;31785:56:0;-1:-1:-1;31859:20:0;31785:56;;31859:11;:20::i;:::-;31852:27;;;;31724:163;:::o;4894:132::-;4952:7;4979:39;4983:1;4986;4979:39;;;;;;;;;;;;;;;;;:3;:39::i;3304:181::-;3362:7;;3394:5;3398:1;3394;:5;:::i;:::-;3382:17;;3423:1;3418;:6;;3410:46;;;;-1:-1:-1;;;3410:46:0;;16019:2:1;3410:46:0;;;16001:21:1;16058:2;16038:18;;;16031:30;16097:29;16077:18;;;16070:57;16144:18;;3410:46:0;15817:351:1;30196:487:0;30255:7;30264;30273;30282;30291;30300;30309;30330:23;30355:12;30369:28;30399:13;30416:20;30428:7;30416:11;:20::i;:::-;30329:107;;;;;;;;30448:15;30465:23;30490:12;30506:67;30518:7;30527:4;30533:20;30555:5;30562:10;:8;:10::i;:::-;30506:11;:67::i;:::-;30447:126;;-1:-1:-1;30447:126:0;-1:-1:-1;30447:126:0;-1:-1:-1;30624:15:0;;-1:-1:-1;30641:4:0;;-1:-1:-1;30647:20:0;;-1:-1:-1;30669:5:0;-1:-1:-1;;;;30196:487:0;;;;;;;;;:::o;4256:471::-;4314:7;4559:1;4564;4559:6;4555:47;;-1:-1:-1;4589:1:0;4582:8;;4555:47;4614:9;4626:5;4630:1;4626;:5;:::i;:::-;4614:17;-1:-1:-1;4659:1:0;4650:5;4654:1;4614:17;4650:5;:::i;:::-;:10;4642:56;;;;-1:-1:-1;;;4642:56:0;;16770:2:1;4642:56:0;;;16752:21:1;16809:2;16789:18;;;16782:30;16848:34;16828:18;;;16821:62;-1:-1:-1;;;16899:18:1;;;16892:31;16940:19;;4642:56:0;16568:397:1;36191:609:0;23497:6;:13;;-1:-1:-1;;23497:13:0;23506:4;23497:13;;;36368:16:::1;::::0;;36382:1:::1;36368:16:::0;;;;;::::1;::::0;;-1:-1:-1;;36368:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;36368:16:0::1;36344:40;;36413:4;36395;36400:1;36395:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;36395:23:0::1;;;-1:-1:-1::0;;;;;36395:23:0::1;;;::::0;::::1;36439:15;-1:-1:-1::0;;;;;36439:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36429:4;36434:1;36429:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;36429:32:0::1;;;-1:-1:-1::0;;;;;36429:32:0::1;;;::::0;::::1;36474:62;36491:4;36506:15;36524:11;36474:8;:62::i;:::-;36575:217;::::0;-1:-1:-1;;;36575:217:0;;-1:-1:-1;;;;;36575:15:0::1;:66;::::0;::::1;::::0;:217:::1;::::0;36656:11;;36682:1:::1;::::0;36726:4;;36745:6;;36766:15:::1;::::0;36575:217:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23533:6:0;:14;;-1:-1:-1;;23533:14:0;;;-1:-1:-1;;;;;36191:609:0:o;36888:1327::-;36999:13;-1:-1:-1;;;;;36988:24:0;:9;-1:-1:-1;;;;;36988:24:0;;36985:128;;37028:73;37039:11;;37052:16;;37070:12;;37084:16;;40963:7;:16;;;;40990:12;:26;;;;41027:8;:18;41056:12;:26;40849:241;37028:73;37138:13;-1:-1:-1;;;;;37128:23:0;:6;-1:-1:-1;;;;;37128:23:0;;37125:123;;37167:69;37178:10;;37190:15;;37207:11;;37220:15;;40963:7;:16;;;;40990:12;:26;;;;41027:8;:18;41056:12;:26;40849:241;37167:69;-1:-1:-1;;;;;37281:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;37311:29:0;;;;;;:18;:29;;;;;;;;37281:59;37278:275;;;37358:14;33949:1;33939:7;:11;;;33961:12;:16;;;33988:8;:12;;;34011;:16;33896:139;37358:14;37278:275;;;-1:-1:-1;;;;;37410:28:0;;;;;;:20;:28;;;;;;;;37405:137;;37472:12;;37462:6;:22;;37454:75;;;;-1:-1:-1;;;37454:75:0;;18413:2:1;37454:75:0;;;18395:21:1;18452:2;18432:18;;;18425:30;18491:34;18471:18;;;18464:62;-1:-1:-1;;;18542:18:1;;;18535:38;18590:19;;37454:75:0;18211:404:1;37454:75:0;-1:-1:-1;;;;;37587:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;37611:22:0;;;;;;:11;:22;;;;;;;;37610:23;37587:46;37583:597;;;37650:48;37672:6;37680:9;37691:6;37650:21;:48::i;:::-;37583:597;;;-1:-1:-1;;;;;37721:19:0;;;;;;:11;:19;;;;;;;;37720:20;:46;;;;-1:-1:-1;;;;;;37744:22:0;;;;;;:11;:22;;;;;;;;37720:46;37716:464;;;37783:46;37803:6;37811:9;37822:6;37783:19;:46::i;37716:464::-;-1:-1:-1;;;;;37852:19:0;;;;;;:11;:19;;;;;;;;37851:20;:47;;;;-1:-1:-1;;;;;;37876:22:0;;;;;;:11;:22;;;;;;;;37875:23;37851:47;37847:333;;;37915:44;37933:6;37941:9;37952:6;37915:17;:44::i;37847:333::-;-1:-1:-1;;;;;37981:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38004:22:0;;;;;;:11;:22;;;;;;;;37981:45;37977:203;;;38043:48;38065:6;38073:9;38084:6;38043:21;:48::i;37977:203::-;38124:44;38142:6;38150:9;38161:6;38124:17;:44::i;:::-;38192:15;34100;;34090:7;:25;34140:20;;34125:12;:35;34181:16;;34170:8;:27;34222:20;;34207:12;:35;34047:203;38192:15;36888:1327;;;:::o;31895:561::-;31992:7;;32028;;31945;;;;;32052:289;32076:9;:16;32072:20;;32052:289;;;32142:7;32118;:21;32126:9;32136:1;32126:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32126:12:0;32118:21;;;;;;;;;;;;;:31;;:66;;;32177:7;32153;:21;32161:9;32171:1;32161:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32161:12:0;32153:21;;;;;;;;;;;;;:31;32118:66;32114:97;;;32194:7;;32203;;32186:25;;;;;;;31895:561;;:::o;32114:97::-;32236:34;32248:7;:21;32256:9;32266:1;32256:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32256:12:0;32248:21;;;;;;;;;;;;;32236:7;;:11;:34::i;:::-;32226:44;;32295:34;32307:7;:21;32315:9;32325:1;32315:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32315:12:0;32307:21;;;;;;;;;;;;;32295:7;;:11;:34::i;:::-;32285:44;-1:-1:-1;32094:3:0;;;;:::i;:::-;;;;32052:289;;;-1:-1:-1;32377:7:0;;32365;;:20;;:11;:20::i;:::-;32355:7;:30;32351:61;;;32395:7;;32404;;32387:25;;;;;;31895:561;;:::o;32351:61::-;32431:7;;32440;;-1:-1:-1;31895:561:0;-1:-1:-1;31895:561:0:o;5221:278::-;5307:7;5342:12;5335:5;5327:28;;;;-1:-1:-1;;;5327:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5366:9:0;5378:5;5382:1;5378;:5;:::i;30691:473::-;30751:7;30760;30769;30778;30798:12;30813:24;30829:7;30813:15;:24::i;:::-;30798:39;;30848:28;30879:64;30913:29;30934:7;30913:20;:29::i;:::-;30879;30900:7;30879:20;:29::i;:::-;:33;;:64::i;:::-;30848:95;;30954:13;30970:25;30987:7;30970:16;:25::i;:::-;30954:41;-1:-1:-1;31006:23:0;31032:54;30954:41;31032:43;31054:20;31032:43;:7;31044:4;31032:11;:17::i;:::-;:21;;:43::i;:54::-;31006:80;31122:4;;-1:-1:-1;31128:20:0;;-1:-1:-1;31128:20:0;-1:-1:-1;30691:473:0;;-1:-1:-1;;;30691:473:0:o;31172:544::-;31312:7;;;;31368:24;:7;31380:11;31368;:24::i;:::-;31350:42;-1:-1:-1;31403:12:0;31418:21;:4;31427:11;31418:8;:21::i;:::-;31403:36;-1:-1:-1;31450:28:0;31481:37;:20;31506:11;31481:24;:37::i;:::-;31450:68;-1:-1:-1;31529:13:0;31545:22;:5;31555:11;31545:9;:22::i;:::-;31529:38;-1:-1:-1;31578:23:0;31604:54;31529:38;31604:43;31626:20;31604:43;:7;31616:4;31604:11;:17::i;:54::-;31677:7;;;;-1:-1:-1;31703:4:0;;-1:-1:-1;31172:544:0;;-1:-1:-1;;;;;;;;;31172:544:0:o;39963:878::-;40066:15;40083:23;40108:12;40122:23;40147:12;40161:28;40191:13;40208:19;40219:7;40208:10;:19::i;:::-;40065:162;;;;;;;;;;;;;;40256:28;40276:7;40256;:15;40264:6;-1:-1:-1;;;;;40256:15:0;-1:-1:-1;;;;;40256:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;40238:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40313:7;:15;;;;:28;;40333:7;40313:19;:28::i;:::-;-1:-1:-1;;;;;40295:15:0;;;;;;;:7;:15;;;;;;:46;;;;40373:18;;;;;;;:39;;40396:15;40373:22;:39::i;:::-;-1:-1:-1;;;;;40352:18:0;;;;;;:7;:18;;;;;:60;40429:12;;:16;;;:35;;;40463:1;40448:12;;:16;40429:35;40426:186;;;40481:46;40506:20;40481:24;:46::i;:::-;40547:53;;3245:25:1;;;40572:4:0;;-1:-1:-1;;;;;40547:53:0;;;;;3233:2:1;3218:18;40547:53:0;;;;;;;40426:186;40627:8;;:12;40624:116;;40656:16;40666:5;40656:9;:16::i;:::-;40709:11;-1:-1:-1;;;;;40692:36:0;40701:6;-1:-1:-1;;;;;40692:36:0;;40722:5;40692:36;;;;3245:25:1;;3233:2;3218:18;;3099:177;40692:36:0;;;;;;;;40624:116;40750:23;40762:4;40768;40750:11;:23::i;:::-;40806:9;-1:-1:-1;;;;;40789:44:0;40798:6;-1:-1:-1;;;;;40789:44:0;;40817:15;40789:44;;;;3245:25:1;;3233:2;3218:18;;3099:177;40789:44:0;;;;;;;;40054:787;;;;;;;39963:878;;;:::o;39058:897::-;39159:15;39176:23;39201:12;39215:23;39240:12;39254:28;39284:13;39301:19;39312:7;39301:10;:19::i;:::-;39158:162;;;;;;;;;;;;;;39349:28;39369:7;39349;:15;39357:6;-1:-1:-1;;;;;39349:15:0;-1:-1:-1;;;;;39349:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;39331:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39409:18;;;;;:7;:18;;;;;:39;;39432:15;39409:22;:39::i;:::-;-1:-1:-1;;;;;39388:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39480:7;:18;;;;:39;;39503:15;39480:22;:39::i;38223:827::-;38322:15;38339:23;38364:12;38378:23;38403:12;38417:28;38447:13;38464:19;38475:7;38464:10;:19::i;:::-;38321:162;;;;;;;;;;;;;;38512:28;38532:7;38512;:15;38520:6;-1:-1:-1;;;;;38512:15:0;-1:-1:-1;;;;;38512:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;28694:955::-;28797:15;28814:23;28839:12;28853:23;28878:12;28892:28;28922:13;28939:19;28950:7;28939:10;:19::i;:::-;28796:162;;;;;;;;;;;;;;28987:28;29007:7;28987;:15;28995:6;-1:-1:-1;;;;;28987:15:0;-1:-1:-1;;;;;28987:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;28969:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29044:7;:15;;;;:28;;29064:7;3635:136;3693:7;3720:43;3724:1;3727;3720:43;;;;;;;;;;;;;;;;;:3;:43::i;33218:154::-;33282:7;33309:55;33348:5;33309:20;33321:7;;33309;:11;;:20;;;;:::i;33716:164::-;33785:7;33812:60;33856:5;33812:25;33824:12;;33812:7;:11;;:25;;;;:::i;33380:164::-;33449:7;33476:60;33520:5;33476:25;33488:12;;33476:7;:11;;:25;;;;:::i;33552:156::-;33617:7;33644:56;33684:5;33644:21;33656:8;;33644:7;:11;;:21;;;;:::i;32468:415::-;32551:19;32574:10;:8;:10::i;:::-;32551:33;-1:-1:-1;32595:28:0;32626:37;:20;32551:33;32626:24;:37::i;:::-;32715:4;32699:22;;;;:7;:22;;;;;;32595:68;;-1:-1:-1;32699:48:0;;32595:68;32699:26;:48::i;:::-;32690:4;32674:22;;;;:7;:22;;;;;;;;:73;;;;32761:11;:26;;;;;;32758:117;;;32843:4;32827:22;;;;:7;:22;;;;;;:48;;32854:20;32827:26;:48::i;:::-;32818:4;32802:22;;;;:7;:22;;;;;:73;32540:343;;32468:415;:::o;32891:315::-;32944:19;32967:10;:8;:10::i;:::-;32944:33;-1:-1:-1;32988:13:0;33004:22;:5;32944:33;33004:9;:22::i;:::-;-1:-1:-1;;;;;33068:11:0;33060:20;;;;;:7;:20;;;;;;32988:38;;-1:-1:-1;33060:31:0;;32988:38;33060:24;:31::i;:::-;-1:-1:-1;;;;;33045:11:0;33037:20;;;;;:7;:20;;;;;;;;:54;;;;33105:11;:24;;;;;;33102:96;;;-1:-1:-1;;;;;33175:11:0;33167:20;;;;;:7;:20;;;;;;:31;;33192:5;33167:24;:31::i;:::-;-1:-1:-1;;;;;33152:11:0;33144:20;;;;;:7;:20;;;;;:54;32933:273;;32891:315;:::o;30041:147::-;30119:7;;:17;;30131:4;30119:11;:17::i;:::-;30109:7;:27;30160:10;;:20;;30175:4;30160:14;:20::i;:::-;30147:10;:33;-1:-1:-1;;30041:147:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:247::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;1009:9;996:23;1028:31;1053:5;1028:31;:::i;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;1606:127::-;1667:10;1662:3;1658:20;1655:1;1648:31;1698:4;1695:1;1688:15;1722:4;1719:1;1712:15;1738:1121;1822:6;1853:2;1896;1884:9;1875:7;1871:23;1867:32;1864:52;;;1912:1;1909;1902:12;1864:52;1952:9;1939:23;1981:18;2022:2;2014:6;2011:14;2008:34;;;2038:1;2035;2028:12;2008:34;2076:6;2065:9;2061:22;2051:32;;2121:7;2114:4;2110:2;2106:13;2102:27;2092:55;;2143:1;2140;2133:12;2092:55;2179:2;2166:16;2201:2;2197;2194:10;2191:36;;;2207:18;;:::i;:::-;2253:2;2250:1;2246:10;2285:2;2279:9;2348:2;2344:7;2339:2;2335;2331:11;2327:25;2319:6;2315:38;2403:6;2391:10;2388:22;2383:2;2371:10;2368:18;2365:46;2362:72;;;2414:18;;:::i;:::-;2450:2;2443:22;2500:18;;;2534:15;;;;-1:-1:-1;2576:11:1;;;2572:20;;;2604:19;;;2601:39;;;2636:1;2633;2626:12;2601:39;2660:11;;;;2680:148;2696:6;2691:3;2688:15;2680:148;;;2762:23;2781:3;2762:23;:::i;:::-;2750:36;;2713:12;;;;2806;;;;2680:148;;;2847:6;1738:1121;-1:-1:-1;;;;;;;;1738:1121:1:o;3281:385::-;3367:6;3375;3383;3391;3444:3;3432:9;3423:7;3419:23;3415:33;3412:53;;;3461:1;3458;3451:12;3412:53;-1:-1:-1;;3484:23:1;;;3554:2;3539:18;;3526:32;;-1:-1:-1;3605:2:1;3590:18;;3577:32;;3656:2;3641:18;3628:32;;-1:-1:-1;3281:385:1;-1:-1:-1;3281:385:1:o;3671:456::-;3748:6;3756;3764;3817:2;3805:9;3796:7;3792:23;3788:32;3785:52;;;3833:1;3830;3823:12;3785:52;3872:9;3859:23;3891:31;3916:5;3891:31;:::i;:::-;3941:5;-1:-1:-1;3998:2:1;3983:18;;3970:32;4011:33;3970:32;4011:33;:::i;:::-;3671:456;;4063:7;;-1:-1:-1;;;4117:2:1;4102:18;;;;4089:32;;3671:456::o;4132:160::-;4197:20;;4253:13;;4246:21;4236:32;;4226:60;;4282:1;4279;4272:12;4297:315;4362:6;4370;4423:2;4411:9;4402:7;4398:23;4394:32;4391:52;;;4439:1;4436;4429:12;4391:52;4478:9;4465:23;4497:31;4522:5;4497:31;:::i;:::-;4547:5;-1:-1:-1;4571:35:1;4602:2;4587:18;;4571:35;:::i;:::-;4561:45;;4297:315;;;;;:::o;4825:180::-;4884:6;4937:2;4925:9;4916:7;4912:23;4908:32;4905:52;;;4953:1;4950;4943:12;4905:52;-1:-1:-1;4976:23:1;;4825:180;-1:-1:-1;4825:180:1:o;5199:248::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5377:9;5364:23;5354:33;;5406:35;5437:2;5426:9;5422:18;5406:35;:::i;5936:689::-;6028:6;6036;6044;6097:2;6085:9;6076:7;6072:23;6068:32;6065:52;;;6113:1;6110;6103:12;6065:52;6153:9;6140:23;6182:18;6223:2;6215:6;6212:14;6209:34;;;6239:1;6236;6229:12;6209:34;6277:6;6266:9;6262:22;6252:32;;6322:7;6315:4;6311:2;6307:13;6303:27;6293:55;;6344:1;6341;6334:12;6293:55;6384:2;6371:16;6410:2;6402:6;6399:14;6396:34;;;6426:1;6423;6416:12;6396:34;6481:7;6474:4;6464:6;6461:1;6457:14;6453:2;6449:23;6445:34;6442:47;6439:67;;;6502:1;6499;6492:12;6439:67;6533:4;6525:13;;;;-1:-1:-1;6557:6:1;-1:-1:-1;6582:37:1;;6598:20;;;-1:-1:-1;6582:37:1;:::i;:::-;6572:47;;5936:689;;;;;:::o;6630:388::-;6698:6;6706;6759:2;6747:9;6738:7;6734:23;6730:32;6727:52;;;6775:1;6772;6765:12;6727:52;6814:9;6801:23;6833:31;6858:5;6833:31;:::i;:::-;6883:5;-1:-1:-1;6940:2:1;6925:18;;6912:32;6953:33;6912:32;6953:33;:::i;:::-;7005:7;6995:17;;;6630:388;;;;;:::o;7023:180::-;7079:6;7132:2;7120:9;7111:7;7107:23;7103:32;7100:52;;;7148:1;7145;7138:12;7100:52;7171:26;7187:9;7171:26;:::i;7208:380::-;7287:1;7283:12;;;;7330;;;7351:61;;7405:4;7397:6;7393:17;7383:27;;7351:61;7458:2;7450:6;7447:14;7427:18;7424:38;7421:161;;7504:10;7499:3;7495:20;7492:1;7485:31;7539:4;7536:1;7529:15;7567:4;7564:1;7557:15;7421:161;;7208:380;;;:::o;7593:356::-;7795:2;7777:21;;;7814:18;;;7807:30;7873:34;7868:2;7853:18;;7846:62;7940:2;7925:18;;7593:356::o;7954:127::-;8015:10;8010:3;8006:20;8003:1;7996:31;8046:4;8043:1;8036:15;8070:4;8067:1;8060:15;8086:127;8147:10;8142:3;8138:20;8135:1;8128:31;8178:4;8175:1;8168:15;8202:4;8199:1;8192:15;8218:175;8255:3;8299:4;8292:5;8288:16;8328:4;8319:7;8316:17;8313:43;;8336:18;;:::i;:::-;8385:1;8372:15;;8218:175;-1:-1:-1;;8218:175:1:o;8398:125::-;8463:9;;;8484:10;;;8481:36;;;8497:18;;:::i;9636:128::-;9703:9;;;9724:11;;;9721:37;;;9738:18;;:::i;9769:127::-;9830:10;9825:3;9821:20;9818:1;9811:31;9861:4;9858:1;9851:15;9885:4;9882:1;9875:15;9901:135;9940:3;9961:17;;;9958:43;;9981:18;;:::i;:::-;-1:-1:-1;10028:1:1;10017:13;;9901:135::o;10401:400::-;10603:2;10585:21;;;10642:2;10622:18;;;10615:30;10681:34;10676:2;10661:18;;10654:62;-1:-1:-1;;;10747:2:1;10732:18;;10725:34;10791:3;10776:19;;10401:400::o;11494:794::-;11716:2;11728:21;;;11701:18;;11784:22;;;11668:4;11863:6;11837:2;11822:18;;11668:4;11897:304;11911:6;11908:1;11905:13;11897:304;;;11986:6;11973:20;12006:31;12031:5;12006:31;:::i;:::-;-1:-1:-1;;;;;12062:31:1;12050:44;;12117:4;12176:15;;;;12141:12;;;;12090:1;11926:9;11897:304;;;11901:3;12218;12210:11;;;;12273:6;12266:14;12259:22;12252:4;12241:9;12237:20;12230:52;11494:794;;;;;;:::o;16173:168::-;16246:9;;;16277;;16294:15;;;16288:22;;16274:37;16264:71;;16315:18;;:::i;16346:217::-;16386:1;16412;16402:132;;16456:10;16451:3;16447:20;16444:1;16437:31;16491:4;16488:1;16481:15;16519:4;16516:1;16509:15;16402:132;-1:-1:-1;16548:9:1;;16346:217::o;16970:251::-;17040:6;17093:2;17081:9;17072:7;17068:23;17064:32;17061:52;;;17109:1;17106;17099:12;17061:52;17141:9;17135:16;17160:31;17185:5;17160:31;:::i;17226:980::-;17488:4;17536:3;17525:9;17521:19;17567:6;17556:9;17549:25;17593:2;17631:6;17626:2;17615:9;17611:18;17604:34;17674:3;17669:2;17658:9;17654:18;17647:31;17698:6;17733;17727:13;17764:6;17756;17749:22;17802:3;17791:9;17787:19;17780:26;;17841:2;17833:6;17829:15;17815:29;;17862:1;17872:195;17886:6;17883:1;17880:13;17872:195;;;17951:13;;-1:-1:-1;;;;;17947:39:1;17935:52;;18042:15;;;;18007:12;;;;17983:1;17901:9;17872:195;;;-1:-1:-1;;;;;;;18123:32:1;;;;18118:2;18103:18;;18096:60;-1:-1:-1;;;18187:3:1;18172:19;18165:35;18084:3;17226:980;-1:-1:-1;;;17226:980:1:o
Swarm Source
ipfs://2d173b2b4e0c8782d7aa22ff6397f6b057d1bbde3b2f0a17245295f743e42b52
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.