Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
14,426.116952444994911508 SET
Holders
53
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2.882630495545556698 SETValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SmartElevate
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal virtual view returns (address payable) { return msg.sender; } function _msgData() internal virtual view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * Smart contract library of mathematical functions operating with signed * 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is * basically a simple fraction whose numerator is signed 128-bit integer and * denominator is 2^64. As long as denominator is always the same, there is no * need to store it, thus in Solidity signed 64.64-bit fixed point numbers are * represented by int128 type holding only the numerator. */ library ABDKMath64x64 { /** * Minimum value signed 64.64-bit fixed point number may have. */ int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; /** * Maximum value signed 64.64-bit fixed point number may have. */ int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Calculate x + y. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function add (int128 x, int128 y) internal pure returns (int128) { int256 result = int256(x) + y; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x * y rounding down, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64 fixed point number * @param y unsigned 256-bit integer number * @return unsigned 256-bit integer number */ function mulu (int128 x, uint256 y) internal pure returns (uint256) { if (y == 0) return 0; require (x >= 0); uint256 lo = (uint256 (x) * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) >> 64; uint256 hi = uint256 (x) * (y >> 128); require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); hi <<= 64; require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - lo); return hi + lo; } /** * Calculate x^y assuming 0^0 is 1, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y uint256 value * @return signed 64.64-bit fixed point number */ function pow (int128 x, uint256 y) internal pure returns (int128) { uint256 absoluteResult; bool negativeResult = false; if (x >= 0) { absoluteResult = powu (uint256 (x) << 63, y); } else { // We rely on overflow behavior here absoluteResult = powu (uint256 (uint128 (-x)) << 63, y); negativeResult = y & 1 > 0; } absoluteResult >>= 63; if (negativeResult) { require (absoluteResult <= 0x80000000000000000000000000000000); return -int128 (absoluteResult); // We rely on overflow behavior here } else { require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return int128 (absoluteResult); // We rely on overflow behavior here } } function fromUInt (uint256 x) internal pure returns (int128) { require (x <= 0x7FFFFFFFFFFFFFFF); return int128 (x << 64); } function toUInt (int128 x) internal pure returns (uint64) { require (x >= 0); return uint64 (x >> 64); } /** * Calculate x^y assuming 0^0 is 1, where x is unsigned 129.127 fixed point * number and y is unsigned 256-bit integer number. Revert on overflow. * * @param x unsigned 129.127-bit fixed point number * @param y uint256 value * @return unsigned 129.127-bit fixed point number */ function powu (uint256 x, uint256 y) private pure returns (uint256) { if (y == 0) return 0x80000000000000000000000000000000; else if (x == 0) return 0; else { int256 msb = 0; uint256 xc = x; if (xc >= 0x100000000000000000000000000000000) { xc >>= 128; msb += 128; } if (xc >= 0x10000000000000000) { xc >>= 64; msb += 64; } if (xc >= 0x100000000) { xc >>= 32; msb += 32; } if (xc >= 0x10000) { xc >>= 16; msb += 16; } if (xc >= 0x100) { xc >>= 8; msb += 8; } if (xc >= 0x10) { xc >>= 4; msb += 4; } if (xc >= 0x4) { xc >>= 2; msb += 2; } if (xc >= 0x2) msb += 1; // No need to shift xc anymore int256 xe = msb - 127; if (xe > 0) x >>= xe; else x <<= -xe; uint256 result = 0x80000000000000000000000000000000; int256 re = 0; while (y > 0) { if (y & 1 > 0) { result = result * x; y -= 1; re += xe; if (result >= 0x8000000000000000000000000000000000000000000000000000000000000000) { result >>= 128; re += 1; } else result >>= 127; if (re < -127) return 0; // Underflow require (re < 128); // Overflow } else { x = x * x; y >>= 1; xe <<= 1; if (x >= 0x8000000000000000000000000000000000000000000000000000000000000000) { x >>= 128; xe += 1; } else x >>= 127; if (xe < -127) return 0; // Underflow require (xe < 128); // Overflow } } if (re > 0) result <<= re; else if (re < 0) result >>= -re; return result; } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * Available since v3.1. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * Available since v3.1. */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * Available since v3.1. */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * Available since v3.1. */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Pair { function sync() external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; } contract Balancer { constructor() public { } } contract SmartElevate is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name = "SmartElevate.network"; string private _symbol = "SET"; uint8 private _decimals = 18; mapping(address => uint256) internal _reflectionBalance; mapping(address => uint256) internal _tokenBalance; mapping(address => mapping(address => uint256)) internal _allowances; mapping(address => uint256) internal initial; uint256 public fastCount; uint256 public fastLimit = 8; uint256[15] public buys; uint256[15] public sells; uint256 movingAverageCount = 15; uint256 private constant MAX = ~uint256(0); uint256 internal _tokenTotal = 14500e18; uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal)); mapping(address => bool) isExcludedFromFee; mapping(address => bool) internal _isExcluded; address[] internal _excluded; uint256 public _feeDecimal = 2; uint256 public _taxFee = 200; uint256 public _deflationFee = 200; uint256 public maxFee = 400; uint256 public delayTime = 6 minutes; uint256 public _taxFeeTotal; uint256 public _burnFeeTotal; uint256 public _deflationFeeTotal; bool public tradingEnabled = false; bool public deflationEnabled = true; uint256 public liquidityAddedAt; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; event TradingEnabled(bool enabled); constructor() public { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; isExcludedFromFee[_msgSender()] = true; isExcludedFromFee[address(this)] = true; _isExcluded[uniswapV2Pair] = true; _excluded.push(uniswapV2Pair); _reflectionBalance[_msgSender()] = _reflectionTotal; emit Transfer(address(0), _msgSender(), _tokenTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public override view returns (uint256) { return _tokenTotal; } function balanceOf(address account) public override view returns (uint256) { if (_isExcluded[account]) return _tokenBalance[account]; return tokenFromReflection(_reflectionBalance[account]); } function transfer(address recipient, uint256 amount) public override virtual returns (bool) { _transfer(_msgSender(),recipient,amount); return true; } function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override virtual returns (bool) { _transfer(sender,recipient,amount); _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub( amount,"ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee) public view returns (uint256) { require(tokenAmount <= _tokenTotal, "Amount must be less than supply"); if (!deductTransferFee) { return tokenAmount.mul(_getReflectionRate()); } else { return tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(_getReflectionRate()); } } function tokenFromReflection(uint256 reflectionAmount) public view returns (uint256) { require( reflectionAmount <= _reflectionTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getReflectionRate(); return reflectionAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require( account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, "SET: Uniswap router cannot be excluded." ); require(account != address(this), 'SET: The contract it self cannot be excluded'); require(!_isExcluded[account], "SET: Account is already excluded"); if (_reflectionBalance[account] > 0) {_tokenBalance[account] = tokenFromReflection(_reflectionBalance[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "SET: Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tokenBalance[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || sender == owner() || recipient == owner() || isExcludedFromFee[sender] || isExcludedFromFee[recipient], "Trading is locked before presale."); if (fastCount < fastLimit && uniswapV2Pair == sender && sender != owner()) { fastCount++; initial[recipient] = block.timestamp; } if (uniswapV2Pair == recipient && initial[sender] + delayTime > block.timestamp) { revert(); } if (liquidityAddedAt > 0) { uint256 minute = block.timestamp.sub(liquidityAddedAt).div(60) % movingAverageCount; if (uniswapV2Pair == sender) { buys[minute] += 1; } else if (uniswapV2Pair == recipient) { sells[minute] += 1; } } uint256 ratio = getMovingRatio(); if (ratio >= 0x100000FF) { _deflationFee = 0; } else { _deflationFee = ratio.mul(2) % maxFee; } _taxFee = maxFee - _deflationFee; uint256 transferAmount = amount; uint256 rate = _getReflectionRate(); if(!isExcludedFromFee[sender] && !isExcludedFromFee[recipient]){ transferAmount = collectFee(amount,rate); } _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate)); _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate)); //@dev If any account belongs to the excludedAccount transfer token if (_isExcluded[sender]) { _tokenBalance[sender] = _tokenBalance[sender].sub(amount); } if (_isExcluded[recipient]) { _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount); } emit Transfer(sender, recipient, transferAmount); } function getMovingRatio() public view returns(uint256) { uint256 buySum = 0; uint256 sellSum = 0; for (uint256 i = 0; i < movingAverageCount; i++) { buySum += buys[i]; sellSum += sells[i]; } if (buySum == 0) { return 0x100000FF; } uint256 ratio = sellSum.mul(5).div(buySum); int128 sharpe = ABDKMath64x64.pow(0x10000000000000000, movingAverageCount); ratio = ratio.add(ABDKMath64x64.toUInt(sharpe)); return ratio % 0x100000FF; } function collectFee(uint256 amount, uint256 rate) private returns (uint256) { uint256 transferAmount = amount; //@dev Tax fee if(_taxFee != 0){ uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(taxFee); _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate)); _taxFeeTotal = _taxFeeTotal.add(taxFee); } if(_deflationFee != 0 && deflationEnabled){ uint256 defFee = amount.mul(_deflationFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(defFee); _deflationFeeTotal = _deflationFeeTotal.add(defFee); burnFee(defFee); } return transferAmount; } function _getReflectionRate() private view returns (uint256) { uint256 reflectionSupply = _reflectionTotal; uint256 tokenSupply = _tokenTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _reflectionBalance[_excluded[i]] > reflectionSupply || _tokenBalance[_excluded[i]] > tokenSupply ) return _reflectionTotal.div(_tokenTotal); reflectionSupply = reflectionSupply.sub( _reflectionBalance[_excluded[i]] ); tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]); } if (reflectionSupply < _reflectionTotal.div(_tokenTotal)) return _reflectionTotal.div(_tokenTotal); return reflectionSupply.div(tokenSupply); } function burnFee(uint256 fee) private { uint256 rate = _getReflectionRate(); _reflectionTotal = _reflectionTotal.sub(fee.mul(rate)); _tokenTotal = _tokenTotal.sub(fee); } function setExcludedFromFee(address account, bool excluded) public onlyOwner { isExcludedFromFee[account] = excluded; } function setTaxFee(uint256 fee) public onlyOwner { _taxFee = fee; } function setDeflationFee(uint256 fee) public onlyOwner { _deflationFee = fee; } function multiTransfer(address[] memory addresses, uint256 amount) public { for (uint256 i = 0; i < addresses.length; i++) { transfer(addresses[i], amount); } } function enableTrading() external onlyOwner() { tradingEnabled = true; TradingEnabled(true); liquidityAddedAt = now; } function setDeflationEnabled(bool val) external onlyOwner() { deflationEnabled = val; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deflationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deflationFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deflationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMovingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setDeflationEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setDeflationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280601481526020017f536d617274456c65766174652e6e6574776f726b000000000000000000000000815250600190805190602001906200005192919062000723565b506040518060400160405280600381526020017f5345540000000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062000723565b506012600360006101000a81548160ff021916908360ff1602179055506008600955600f6028556903120bec57b51c10000060295560295460001981620000e257fe5b0660001903602a556002602e5560c8602f5560c86030556101906031556101686032556000603660006101000a81548160ff0219169083151502179055506001603660016101000a81548160ff0219169083151502179055503480156200014857600080fd5b5060006200015b6200071b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d60208110156200028557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f957600080fd5b505afa1580156200030e573d6000803e3d6000fd5b505050506040513d60208110156200032557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003cc57600080fd5b505af1158015620003e1573d6000803e3d6000fd5b505050506040513d6020811015620003f857600080fd5b8101908080519060200190929190505050603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602b6000620004a06200071b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602c6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550602d603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602a54600460006200065f6200071b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620006ad6200071b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6029546040518082815260200191505060405180910390a350620007d2565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200076657805160ff191683800117855562000797565b8280016001018555821562000797579182015b828111156200079657825182559160200191906001019062000779565b5b509050620007a69190620007aa565b5090565b620007cf91905b80821115620007cb576000816000905550600101620007b1565b5090565b90565b6142d080620007e26000396000f3fe6080604052600436106102605760003560e01c80636612e66f11610144578063a9059cbb116100b6578063d6106b3e1161007a578063d6106b3e14610d45578063dd62ed3e14610d94578063f2c4be0a14610e19578063f2cc0c1814610e56578063f2fde38b14610ea7578063f84354f114610ef857610267565b8063a9059cbb14610bb0578063bb2d713e14610c23578063c1f8257114610c72578063c4081a4c14610ca1578063cba0e99614610cdc57610267565b80638a8c523c116101085780638a8c523c146109355780638da5cb5b1461094c57806395d89b41146109a35780639cadf10414610a33578063a16a317914610a6e578063a457c2d714610b3d57610267565b80636612e66f1461080657806370a0823114610863578063715018a6146108c85780637e2eee53146108df57806384c5a2ec1461090a57610267565b806323b872dd116101dd57806339509351116101a1578063395093511461065c5780633b124fe7146106cf5780634549b039146106fa578063496786e81461075557806349bd5a5e146107805780634ada218b146107d757610267565b806323b872dd146104f357806327b94e1e146105865780632d838119146105b1578063313ce56714610600578063355bc60b1461063157610267565b80630d9a5219116102245780630d9a5219146103f0578063112b24c91461041b5780631694505e1461044657806318160ddd1461049d57806319db457d146104c857610267565b806301f59d161461026c57806304b645271461029757806306fdde03146102c2578063095ea7b3146103525780630c8001f6146103c557610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610f49565b6040518082815260200191505060405180910390f35b3480156102a357600080fd5b506102ac610f4f565b6040518082815260200191505060405180910390f35b3480156102ce57600080fd5b506102d7610f55565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103175780820151818401526020810190506102fc565b50505050905090810190601f1680156103445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035e57600080fd5b506103ab6004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff7565b604051808215151515815260200191505060405180910390f35b3480156103d157600080fd5b506103da611015565b6040518082815260200191505060405180910390f35b3480156103fc57600080fd5b5061040561101b565b6040518082815260200191505060405180910390f35b34801561042757600080fd5b50610430611021565b6040518082815260200191505060405180910390f35b34801561045257600080fd5b5061045b611027565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a957600080fd5b506104b261104d565b6040518082815260200191505060405180910390f35b3480156104d457600080fd5b506104dd611057565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b5061056c6004803603606081101561051657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105d565b604051808215151515815260200191505060405180910390f35b34801561059257600080fd5b5061059b611136565b6040518082815260200191505060405180910390f35b3480156105bd57600080fd5b506105ea600480360360208110156105d457600080fd5b810190808035906020019092919050505061113c565b6040518082815260200191505060405180910390f35b34801561060c57600080fd5b506106156111c0565b604051808260ff1660ff16815260200191505060405180910390f35b34801561063d57600080fd5b506106466111d7565b6040518082815260200191505060405180910390f35b34801561066857600080fd5b506106b56004803603604081101561067f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111dd565b604051808215151515815260200191505060405180910390f35b3480156106db57600080fd5b506106e4611290565b6040518082815260200191505060405180910390f35b34801561070657600080fd5b5061073f6004803603604081101561071d57600080fd5b8101908080359060200190929190803515159060200190929190505050611296565b6040518082815260200191505060405180910390f35b34801561076157600080fd5b5061076a611399565b6040518082815260200191505060405180910390f35b34801561078c57600080fd5b50610795611482565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107e357600080fd5b506107ec6114a8565b604051808215151515815260200191505060405180910390f35b34801561081257600080fd5b506108616004803603604081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114bb565b005b34801561086f57600080fd5b506108b26004803603602081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115df565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd6116ca565b005b3480156108eb57600080fd5b506108f4611852565b6040518082815260200191505060405180910390f35b34801561091657600080fd5b5061091f611858565b6040518082815260200191505060405180910390f35b34801561094157600080fd5b5061094a61185e565b005b34801561095857600080fd5b50610961611987565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109af57600080fd5b506109b86119b0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109f85780820151818401526020810190506109dd565b50505050905090810190601f168015610a255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a3f57600080fd5b50610a6c60048036036020811015610a5657600080fd5b8101908080359060200190929190505050611a52565b005b348015610a7a57600080fd5b50610b3b60048036036040811015610a9157600080fd5b8101908080359060200190640100000000811115610aae57600080fd5b820183602082011115610ac057600080fd5b80359060200191846020830284011164010000000083111715610ae257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611b25565b005b348015610b4957600080fd5b50610b9660048036036040811015610b6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b64565b604051808215151515815260200191505060405180910390f35b348015610bbc57600080fd5b50610c0960048036036040811015610bd357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c31565b604051808215151515815260200191505060405180910390f35b348015610c2f57600080fd5b50610c5c60048036036020811015610c4657600080fd5b8101908080359060200190929190505050611c4f565b6040518082815260200191505060405180910390f35b348015610c7e57600080fd5b50610c87611c67565b604051808215151515815260200191505060405180910390f35b348015610cad57600080fd5b50610cda60048036036020811015610cc457600080fd5b8101908080359060200190929190505050611c7a565b005b348015610ce857600080fd5b50610d2b60048036036020811015610cff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d4d565b604051808215151515815260200191505060405180910390f35b348015610d5157600080fd5b50610d7e60048036036020811015610d6857600080fd5b8101908080359060200190929190505050611da3565b6040518082815260200191505060405180910390f35b348015610da057600080fd5b50610e0360048036036040811015610db757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbb565b6040518082815260200191505060405180910390f35b348015610e2557600080fd5b50610e5460048036036020811015610e3c57600080fd5b81019080803515159060200190929190505050611e42565b005b348015610e6257600080fd5b50610ea560048036036020811015610e7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f28565b005b348015610eb357600080fd5b50610ef660048036036020811015610eca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612361565b005b348015610f0457600080fd5b50610f4760048036036020811015610f1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061256e565b005b60315481565b60375481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fed5780601f10610fc257610100808354040283529160200191610fed565b820191906000526020600020905b815481529060010190602001808311610fd057829003601f168201915b5050505050905090565b600061100b6110046128fc565b8484612904565b6001905092915050565b60355481565b60345481565b60085481565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602954905090565b602e5481565b600061106a848484612afb565b61112b846110766128fc565b611126856040518060600160405280602881526020016141b560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110dc6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135659092919063ffffffff16565b612904565b600190509392505050565b60305481565b6000602a54821115611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140d5602a913960400191505060405180910390fd5b60006111a3613625565b90506111b881846138e390919063ffffffff16565b915050919050565b6000600360009054906101000a900460ff16905090565b60335481565b60006112866111ea6128fc565b8461128185600660006111fb6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b612904565b6001905092915050565b602f5481565b6000602954831115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816113365761132f611320613625565b846139b590919063ffffffff16565b9050611393565b611390611341613625565b6113826113736002602e54600a0a01611365602f54896139b590919063ffffffff16565b6138e390919063ffffffff16565b86613a3b90919063ffffffff16565b6139b590919063ffffffff16565b90505b92915050565b60008060009050600080905060008090505b6028548110156113e857600a81600f81106113c257fe5b015483019250601981600f81106113d557fe5b01548201915080806001019150506113ab565b5060008214156114005763100000ff9250505061147f565b60006114288361141a6005856139b590919063ffffffff16565b6138e390919063ffffffff16565b9050600061144168010000000000000000602854613a85565b905061146861144f82613b3f565b67ffffffffffffffff168361392d90919063ffffffff16565b915063100000ff828161147757fe5b069450505050505b90565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603660009054906101000a900460ff1681565b6114c36128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561167a57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506116c5565b6116c2600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c565b90505b919050565b6116d26128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60325481565b60095481565b6118666128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001603660006101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051808215151515815260200191505060405180910390a142603781905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b5050505050905090565b611a5a6128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060308190555050565b60008090505b8251811015611b5f57611b51838281518110611b4357fe5b602002602001015183611c31565b508080600101915050611b2b565b505050565b6000611c27611b716128fc565b84611c22856040518060600160405280602581526020016142766025913960066000611b9b6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135659092919063ffffffff16565b612904565b6001905092915050565b6000611c45611c3e6128fc565b8484612afb565b6001905092915050565b601981600f8110611c5c57fe5b016000915090505481565b603660019054906101000a900460ff1681565b611c826128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602f8190555050565b6000602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a81600f8110611db057fe5b016000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e4a6128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80603660016101000a81548160ff02191690831515021790555050565b611f306128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061424f6027913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614147602c913960400191505060405180910390fd5b602c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5345543a204163636f756e7420697320616c7265616479206578636c7564656481525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122a35761225f600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550602d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123696128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140ff6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125766128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5345543a204163636f756e7420697320616c726561647920696e636c7564656481525060200191505060405180910390fd5b60008090505b602d805490508110156128f8578173ffffffffffffffffffffffffffffffffffffffff16602d828154811061272d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128eb57602d6001602d80549050038154811061278957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d82815481106127c157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550602d8054806128b157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556128f8565b80806001019150506126fc565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061422b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141256022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806142066025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140b26023913960400191505060405180910390fd5b60008111612c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141dd6029913960400191505060405180910390fd5b603660009054906101000a900460ff1680612cad5750612c7e611987565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612cea5750612cbb611987565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612d3e5750602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612d925750602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141736021913960400191505060405180910390fd5b600954600854108015612e4757508273ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8015612e865750612e56611987565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612ee25760086000815480929190600101919050555042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015612f81575042603254600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b15612f8b57600080fd5b600060375411156130bc576000602854612fc3603c612fb560375442613a3b90919063ffffffff16565b6138e390919063ffffffff16565b81612fca57fe5b0690508373ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613045576001600a82600f811061303257fe5b01600082825401925050819055506130ba565b8273ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130b9576001601982600f81106130aa57fe5b01600082825401925050819055505b5b505b60006130c6611399565b905063100000ff81106130e0576000603081905550613106565b6031546130f76002836139b590919063ffffffff16565b816130fe57fe5b066030819055505b60305460315403602f8190555060008290506000613122613625565b9050602b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c85750602b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131da576131d78482613b60565b91505b61323e6131f082866139b590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a3b90919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e561329782846139b590919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613410576133cc84600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a3b90919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b602c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156134f8576134b482600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050565b6000838311158290613612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d75780820151818401526020810190506135bc565b50505050905090810190601f1680156136045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080602a5490506000602954905060008090505b602d80549050811015613889578260046000602d848154811061365957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061374057508160056000602d84815481106136d857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137665761375c602954602a546138e390919063ffffffff16565b93505050506138e0565b6137ef60046000602d848154811061377a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613a3b90919063ffffffff16565b925061387a60056000602d848154811061380557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613a3b90919063ffffffff16565b9150808060010191505061363a565b506138a1602954602a546138e390919063ffffffff16565b8210156138c8576138bf602954602a546138e390919063ffffffff16565b925050506138e0565b6138db81836138e390919063ffffffff16565b925050505b90565b600061392583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c9e565b905092915050565b6000808284019050838110156139ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156139c85760009050613a35565b60008284029050828482816139d957fe5b0414613a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141946021913960400191505060405180910390fd5b809150505b92915050565b6000613a7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613565565b905092915050565b6000806000809050600085600f0b12613ab057613aa9603f86600f0b901b85613d64565b9150613adf565b613ad3603f866000036fffffffffffffffffffffffffffffffff16901b85613d64565b91506000600185161190505b603f82901c91508015613b16576f80000000000000000000000000000000821115613b0957600080fd5b8160000392505050613b39565b6f7fffffffffffffffffffffffffffffff821115613b3357600080fd5b81925050505b92915050565b60008082600f0b1215613b5157600080fd5b604082600f0b901d9050919050565b6000808390506000602f5414613c02576000613ba16002602e5401600a0a613b93602f54886139b590919063ffffffff16565b6138e390919063ffffffff16565b9050613bb68183613a3b90919063ffffffff16565b9150613bdf613bce85836139b590919063ffffffff16565b602a54613a3b90919063ffffffff16565b602a81905550613bfa8160335461392d90919063ffffffff16565b603381905550505b600060305414158015613c215750603660019054906101000a900460ff165b15613c94576000613c576002602e5401600a0a613c49603054886139b590919063ffffffff16565b6138e390919063ffffffff16565b9050613c6c8183613a3b90919063ffffffff16565b9150613c838160355461392d90919063ffffffff16565b603581905550613c9281614059565b505b8091505092915050565b60008083118290613d4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d0f578082015181840152602081019050613cf4565b50505050905090810190601f168015613d3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d5657fe5b049050809150509392505050565b600080821415613d86576f800000000000000000000000000000009050614053565b6000831415613d985760009050614053565b600080905060008490507001000000000000000000000000000000008110613dc857608081901c90506080820191505b680100000000000000008110613de657604081901c90506040820191505b6401000000008110613e0057602081901c90506020820191505b620100008110613e1857601081901c90506010820191505b6101008110613e2f57600881901c90506008820191505b60108110613e4557600481901c90506004820191505b60048110613e5b57600281901c90506002820191505b60028110613e6a576001820191505b6000607f830390506000811315613e915780866000821215613e8857fe5b901c9550613ea6565b80600003866000821215613ea157fe5b901b95505b60006f80000000000000000000000000000000905060008090505b600087111561400c576000600188161115613f6f57878202915060018703965082810190507f80000000000000000000000000000000000000000000000000000000000000008210613f1f57608082901c9150600181019050613f27565b607f82901c91505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81811215613f5d57600095505050505050614053565b60808112613f6a57600080fd5b614007565b8788029750600187901c9650600183901b92507f80000000000000000000000000000000000000000000000000000000000000008810613fbb57608088901c9750600183019250613fc3565b607f88901c97505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81831215613ff957600095505050505050614053565b6080831261400657600080fd5b5b613ec1565b600081131561402b578082600082121561402257fe5b901b915061404a565b6000811215614049578060000382600082121561404457fe5b901c91505b5b81955050505050505b92915050565b6000614063613625565b905061408c61407b82846139b590919063ffffffff16565b602a54613a3b90919063ffffffff16565b602a819055506140a782602954613a3b90919063ffffffff16565b602981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735345543a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735345543a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bd648a8a669ba751faf3d42752a4b89ad9315122de9112fddc26b4090d79b1064736f6c634300060a0033
Deployed Bytecode
0x6080604052600436106102605760003560e01c80636612e66f11610144578063a9059cbb116100b6578063d6106b3e1161007a578063d6106b3e14610d45578063dd62ed3e14610d94578063f2c4be0a14610e19578063f2cc0c1814610e56578063f2fde38b14610ea7578063f84354f114610ef857610267565b8063a9059cbb14610bb0578063bb2d713e14610c23578063c1f8257114610c72578063c4081a4c14610ca1578063cba0e99614610cdc57610267565b80638a8c523c116101085780638a8c523c146109355780638da5cb5b1461094c57806395d89b41146109a35780639cadf10414610a33578063a16a317914610a6e578063a457c2d714610b3d57610267565b80636612e66f1461080657806370a0823114610863578063715018a6146108c85780637e2eee53146108df57806384c5a2ec1461090a57610267565b806323b872dd116101dd57806339509351116101a1578063395093511461065c5780633b124fe7146106cf5780634549b039146106fa578063496786e81461075557806349bd5a5e146107805780634ada218b146107d757610267565b806323b872dd146104f357806327b94e1e146105865780632d838119146105b1578063313ce56714610600578063355bc60b1461063157610267565b80630d9a5219116102245780630d9a5219146103f0578063112b24c91461041b5780631694505e1461044657806318160ddd1461049d57806319db457d146104c857610267565b806301f59d161461026c57806304b645271461029757806306fdde03146102c2578063095ea7b3146103525780630c8001f6146103c557610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610f49565b6040518082815260200191505060405180910390f35b3480156102a357600080fd5b506102ac610f4f565b6040518082815260200191505060405180910390f35b3480156102ce57600080fd5b506102d7610f55565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103175780820151818401526020810190506102fc565b50505050905090810190601f1680156103445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035e57600080fd5b506103ab6004803603604081101561037557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff7565b604051808215151515815260200191505060405180910390f35b3480156103d157600080fd5b506103da611015565b6040518082815260200191505060405180910390f35b3480156103fc57600080fd5b5061040561101b565b6040518082815260200191505060405180910390f35b34801561042757600080fd5b50610430611021565b6040518082815260200191505060405180910390f35b34801561045257600080fd5b5061045b611027565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a957600080fd5b506104b261104d565b6040518082815260200191505060405180910390f35b3480156104d457600080fd5b506104dd611057565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b5061056c6004803603606081101561051657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105d565b604051808215151515815260200191505060405180910390f35b34801561059257600080fd5b5061059b611136565b6040518082815260200191505060405180910390f35b3480156105bd57600080fd5b506105ea600480360360208110156105d457600080fd5b810190808035906020019092919050505061113c565b6040518082815260200191505060405180910390f35b34801561060c57600080fd5b506106156111c0565b604051808260ff1660ff16815260200191505060405180910390f35b34801561063d57600080fd5b506106466111d7565b6040518082815260200191505060405180910390f35b34801561066857600080fd5b506106b56004803603604081101561067f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111dd565b604051808215151515815260200191505060405180910390f35b3480156106db57600080fd5b506106e4611290565b6040518082815260200191505060405180910390f35b34801561070657600080fd5b5061073f6004803603604081101561071d57600080fd5b8101908080359060200190929190803515159060200190929190505050611296565b6040518082815260200191505060405180910390f35b34801561076157600080fd5b5061076a611399565b6040518082815260200191505060405180910390f35b34801561078c57600080fd5b50610795611482565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107e357600080fd5b506107ec6114a8565b604051808215151515815260200191505060405180910390f35b34801561081257600080fd5b506108616004803603604081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114bb565b005b34801561086f57600080fd5b506108b26004803603602081101561088657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115df565b6040518082815260200191505060405180910390f35b3480156108d457600080fd5b506108dd6116ca565b005b3480156108eb57600080fd5b506108f4611852565b6040518082815260200191505060405180910390f35b34801561091657600080fd5b5061091f611858565b6040518082815260200191505060405180910390f35b34801561094157600080fd5b5061094a61185e565b005b34801561095857600080fd5b50610961611987565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109af57600080fd5b506109b86119b0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109f85780820151818401526020810190506109dd565b50505050905090810190601f168015610a255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a3f57600080fd5b50610a6c60048036036020811015610a5657600080fd5b8101908080359060200190929190505050611a52565b005b348015610a7a57600080fd5b50610b3b60048036036040811015610a9157600080fd5b8101908080359060200190640100000000811115610aae57600080fd5b820183602082011115610ac057600080fd5b80359060200191846020830284011164010000000083111715610ae257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611b25565b005b348015610b4957600080fd5b50610b9660048036036040811015610b6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b64565b604051808215151515815260200191505060405180910390f35b348015610bbc57600080fd5b50610c0960048036036040811015610bd357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c31565b604051808215151515815260200191505060405180910390f35b348015610c2f57600080fd5b50610c5c60048036036020811015610c4657600080fd5b8101908080359060200190929190505050611c4f565b6040518082815260200191505060405180910390f35b348015610c7e57600080fd5b50610c87611c67565b604051808215151515815260200191505060405180910390f35b348015610cad57600080fd5b50610cda60048036036020811015610cc457600080fd5b8101908080359060200190929190505050611c7a565b005b348015610ce857600080fd5b50610d2b60048036036020811015610cff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d4d565b604051808215151515815260200191505060405180910390f35b348015610d5157600080fd5b50610d7e60048036036020811015610d6857600080fd5b8101908080359060200190929190505050611da3565b6040518082815260200191505060405180910390f35b348015610da057600080fd5b50610e0360048036036040811015610db757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbb565b6040518082815260200191505060405180910390f35b348015610e2557600080fd5b50610e5460048036036020811015610e3c57600080fd5b81019080803515159060200190929190505050611e42565b005b348015610e6257600080fd5b50610ea560048036036020811015610e7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f28565b005b348015610eb357600080fd5b50610ef660048036036020811015610eca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612361565b005b348015610f0457600080fd5b50610f4760048036036020811015610f1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061256e565b005b60315481565b60375481565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fed5780601f10610fc257610100808354040283529160200191610fed565b820191906000526020600020905b815481529060010190602001808311610fd057829003601f168201915b5050505050905090565b600061100b6110046128fc565b8484612904565b6001905092915050565b60355481565b60345481565b60085481565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602954905090565b602e5481565b600061106a848484612afb565b61112b846110766128fc565b611126856040518060600160405280602881526020016141b560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110dc6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135659092919063ffffffff16565b612904565b600190509392505050565b60305481565b6000602a54821115611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806140d5602a913960400191505060405180910390fd5b60006111a3613625565b90506111b881846138e390919063ffffffff16565b915050919050565b6000600360009054906101000a900460ff16905090565b60335481565b60006112866111ea6128fc565b8461128185600660006111fb6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b612904565b6001905092915050565b602f5481565b6000602954831115611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816113365761132f611320613625565b846139b590919063ffffffff16565b9050611393565b611390611341613625565b6113826113736002602e54600a0a01611365602f54896139b590919063ffffffff16565b6138e390919063ffffffff16565b86613a3b90919063ffffffff16565b6139b590919063ffffffff16565b90505b92915050565b60008060009050600080905060008090505b6028548110156113e857600a81600f81106113c257fe5b015483019250601981600f81106113d557fe5b01548201915080806001019150506113ab565b5060008214156114005763100000ff9250505061147f565b60006114288361141a6005856139b590919063ffffffff16565b6138e390919063ffffffff16565b9050600061144168010000000000000000602854613a85565b905061146861144f82613b3f565b67ffffffffffffffff168361392d90919063ffffffff16565b915063100000ff828161147757fe5b069450505050505b90565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603660009054906101000a900460ff1681565b6114c36128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561167a57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506116c5565b6116c2600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c565b90505b919050565b6116d26128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60325481565b60095481565b6118666128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001603660006101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051808215151515815260200191505060405180910390a142603781905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a485780601f10611a1d57610100808354040283529160200191611a48565b820191906000526020600020905b815481529060010190602001808311611a2b57829003601f168201915b5050505050905090565b611a5a6128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060308190555050565b60008090505b8251811015611b5f57611b51838281518110611b4357fe5b602002602001015183611c31565b508080600101915050611b2b565b505050565b6000611c27611b716128fc565b84611c22856040518060600160405280602581526020016142766025913960066000611b9b6128fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135659092919063ffffffff16565b612904565b6001905092915050565b6000611c45611c3e6128fc565b8484612afb565b6001905092915050565b601981600f8110611c5c57fe5b016000915090505481565b603660019054906101000a900460ff1681565b611c826128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602f8190555050565b6000602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a81600f8110611db057fe5b016000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e4a6128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80603660016101000a81548160ff02191690831515021790555050565b611f306128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061424f6027913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614147602c913960400191505060405180910390fd5b602c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5345543a204163636f756e7420697320616c7265616479206578636c7564656481525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122a35761225f600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001602c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550602d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123696128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806140ff6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125766128fc565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5345543a204163636f756e7420697320616c726561647920696e636c7564656481525060200191505060405180910390fd5b60008090505b602d805490508110156128f8578173ffffffffffffffffffffffffffffffffffffffff16602d828154811061272d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128eb57602d6001602d80549050038154811061278957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602d82815481106127c157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550602d8054806128b157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556128f8565b80806001019150506126fc565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061422b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141256022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806142066025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140b26023913960400191505060405180910390fd5b60008111612c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141dd6029913960400191505060405180910390fd5b603660009054906101000a900460ff1680612cad5750612c7e611987565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612cea5750612cbb611987565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612d3e5750602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612d925750602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141736021913960400191505060405180910390fd5b600954600854108015612e4757508273ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8015612e865750612e56611987565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612ee25760086000815480929190600101919050555042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015612f81575042603254600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401115b15612f8b57600080fd5b600060375411156130bc576000602854612fc3603c612fb560375442613a3b90919063ffffffff16565b6138e390919063ffffffff16565b81612fca57fe5b0690508373ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613045576001600a82600f811061303257fe5b01600082825401925050819055506130ba565b8273ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130b9576001601982600f81106130aa57fe5b01600082825401925050819055505b5b505b60006130c6611399565b905063100000ff81106130e0576000603081905550613106565b6031546130f76002836139b590919063ffffffff16565b816130fe57fe5b066030819055505b60305460315403602f8190555060008290506000613122613625565b9050602b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131c85750602b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131da576131d78482613b60565b91505b61323e6131f082866139b590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a3b90919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e561329782846139b590919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613410576133cc84600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a3b90919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b602c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156134f8576134b482600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461392d90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050565b6000838311158290613612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d75780820151818401526020810190506135bc565b50505050905090810190601f1680156136045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080602a5490506000602954905060008090505b602d80549050811015613889578260046000602d848154811061365957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061374057508160056000602d84815481106136d857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137665761375c602954602a546138e390919063ffffffff16565b93505050506138e0565b6137ef60046000602d848154811061377a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613a3b90919063ffffffff16565b925061387a60056000602d848154811061380557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613a3b90919063ffffffff16565b9150808060010191505061363a565b506138a1602954602a546138e390919063ffffffff16565b8210156138c8576138bf602954602a546138e390919063ffffffff16565b925050506138e0565b6138db81836138e390919063ffffffff16565b925050505b90565b600061392583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c9e565b905092915050565b6000808284019050838110156139ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156139c85760009050613a35565b60008284029050828482816139d957fe5b0414613a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141946021913960400191505060405180910390fd5b809150505b92915050565b6000613a7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613565565b905092915050565b6000806000809050600085600f0b12613ab057613aa9603f86600f0b901b85613d64565b9150613adf565b613ad3603f866000036fffffffffffffffffffffffffffffffff16901b85613d64565b91506000600185161190505b603f82901c91508015613b16576f80000000000000000000000000000000821115613b0957600080fd5b8160000392505050613b39565b6f7fffffffffffffffffffffffffffffff821115613b3357600080fd5b81925050505b92915050565b60008082600f0b1215613b5157600080fd5b604082600f0b901d9050919050565b6000808390506000602f5414613c02576000613ba16002602e5401600a0a613b93602f54886139b590919063ffffffff16565b6138e390919063ffffffff16565b9050613bb68183613a3b90919063ffffffff16565b9150613bdf613bce85836139b590919063ffffffff16565b602a54613a3b90919063ffffffff16565b602a81905550613bfa8160335461392d90919063ffffffff16565b603381905550505b600060305414158015613c215750603660019054906101000a900460ff165b15613c94576000613c576002602e5401600a0a613c49603054886139b590919063ffffffff16565b6138e390919063ffffffff16565b9050613c6c8183613a3b90919063ffffffff16565b9150613c838160355461392d90919063ffffffff16565b603581905550613c9281614059565b505b8091505092915050565b60008083118290613d4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d0f578082015181840152602081019050613cf4565b50505050905090810190601f168015613d3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d5657fe5b049050809150509392505050565b600080821415613d86576f800000000000000000000000000000009050614053565b6000831415613d985760009050614053565b600080905060008490507001000000000000000000000000000000008110613dc857608081901c90506080820191505b680100000000000000008110613de657604081901c90506040820191505b6401000000008110613e0057602081901c90506020820191505b620100008110613e1857601081901c90506010820191505b6101008110613e2f57600881901c90506008820191505b60108110613e4557600481901c90506004820191505b60048110613e5b57600281901c90506002820191505b60028110613e6a576001820191505b6000607f830390506000811315613e915780866000821215613e8857fe5b901c9550613ea6565b80600003866000821215613ea157fe5b901b95505b60006f80000000000000000000000000000000905060008090505b600087111561400c576000600188161115613f6f57878202915060018703965082810190507f80000000000000000000000000000000000000000000000000000000000000008210613f1f57608082901c9150600181019050613f27565b607f82901c91505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81811215613f5d57600095505050505050614053565b60808112613f6a57600080fd5b614007565b8788029750600187901c9650600183901b92507f80000000000000000000000000000000000000000000000000000000000000008810613fbb57608088901c9750600183019250613fc3565b607f88901c97505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81831215613ff957600095505050505050614053565b6080831261400657600080fd5b5b613ec1565b600081131561402b578082600082121561402257fe5b901b915061404a565b6000811215614049578060000382600082121561404457fe5b901c91505b5b81955050505050505b92915050565b6000614063613625565b905061408c61407b82846139b590919063ffffffff16565b602a54613a3b90919063ffffffff16565b602a819055506140a782602954613a3b90919063ffffffff16565b602981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735345543a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735345543a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201bd648a8a669ba751faf3d42752a4b89ad9315122de9112fddc26b4090d79b1064736f6c634300060a0033
Deployed Bytecode Sourcemap
25333:12530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26423:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26708:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27559:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28579:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26579:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26544:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25830:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26748:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27836:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26310:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28780:368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26382:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30376:368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27745:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26510:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29156:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26347:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29888:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34535:612;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26797:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26621:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37009:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27943:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22835:148;;;;;;;;;;;;;:::i;:::-;;26457:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25861:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37556:150;;;;;;;;;;;;;:::i;:::-;;22193:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27650:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37247:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37348:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29464:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28166:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25928:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26662:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37154:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29770:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25898:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28387:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37718:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30752:597;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23138:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31357:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26423:27;;;;:::o;26708:31::-;;;;:::o;27559:83::-;27596:13;27629:5;27622:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27559:83;:::o;28579:193::-;28681:4;28703:39;28712:12;:10;:12::i;:::-;28726:7;28735:6;28703:8;:39::i;:::-;28760:4;28753:11;;28579:193;;;;:::o;26579:33::-;;;;:::o;26544:28::-;;;;:::o;25830:24::-;;;;:::o;26748:42::-;;;;;;;;;;;;;:::o;27836:99::-;27889:7;27916:11;;27909:18;;27836:99;:::o;26310:30::-;;;;:::o;28780:368::-;28920:4;28937:34;28947:6;28954:9;28964:6;28937:9;:34::i;:::-;28999:119;29008:6;29015:12;:10;:12::i;:::-;29028:89;29067:6;29028:89;;;;;;;;;;;;;;;;;:11;:19;29040:6;29028:19;;;;;;;;;;;;;;;:33;29048:12;:10;:12::i;:::-;29028:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28999:8;:119::i;:::-;29136:4;29129:11;;28780:368;;;;;:::o;26382:34::-;;;;:::o;30376:368::-;30479:7;30546:16;;30526;:36;;30504:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30643:19;30665:20;:18;:20::i;:::-;30643:42;;30703:33;30724:11;30703:16;:20;;:33;;;;:::i;:::-;30696:40;;;30376:368;;;:::o;27745:83::-;27786:5;27811:9;;;;;;;;;;;27804:16;;27745:83;:::o;26510:27::-;;;;:::o;29156:300::-;29271:4;29293:133;29316:12;:10;:12::i;:::-;29343:7;29365:50;29404:10;29365:11;:25;29377:12;:10;:12::i;:::-;29365:25;;;;;;;;;;;;;;;:34;29391:7;29365:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29293:8;:133::i;:::-;29444:4;29437:11;;29156:300;;;;:::o;26347:28::-;;;;:::o;29888:480::-;30010:7;30058:11;;30043;:26;;30035:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30121:17;30116:245;;30162:37;30178:20;:18;:20::i;:::-;30162:11;:15;;:37;;;;:::i;:::-;30155:44;;;;30116:245;30256:93;30328:20;:18;:20::i;:::-;30256:67;30272:50;30320:1;30306:11;;30301:2;:16;:20;30272:24;30288:7;;30272:11;:15;;:24;;;;:::i;:::-;:28;;:50;;;;:::i;:::-;30256:11;:15;;:67;;;;:::i;:::-;:71;;:93;;;;:::i;:::-;30232:117;;29888:480;;;;;:::o;34535:612::-;34581:7;34601:14;34618:1;34601:18;;34630:15;34648:1;34630:19;;34675:9;34687:1;34675:13;;34670:127;34694:18;;34690:1;:22;34670:127;;;34744:4;34749:1;34744:7;;;;;;;;;34734:17;;;;34777:5;34783:1;34777:8;;;;;;;;;34766:19;;;;34714:3;;;;;;;34670:127;;;;34831:1;34821:6;:11;34817:61;;;34856:10;34849:17;;;;;;34817:61;34898:13;34914:26;34933:6;34914:14;34926:1;34914:7;:11;;:14;;;;:::i;:::-;:18;;:26;;;;:::i;:::-;34898:42;;34951:13;34967:58;34985:19;35006:18;;34967:17;:58::i;:::-;34951:74;;35044:39;35054:28;35075:6;35054:20;:28::i;:::-;35044:39;;:5;:9;;:39;;;;:::i;:::-;35036:47;;35129:10;35121:5;:18;;;;;;35114:25;;;;;;34535:612;;:::o;26797:28::-;;;;;;;;;;;;;:::o;26621:34::-;;;;;;;;;;;;;:::o;37009:133::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37126:8:::1;37097:17;:26;37115:7;37097:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;37009:133:::0;;:::o;27943:215::-;28009:7;28033:11;:20;28045:7;28033:20;;;;;;;;;;;;;;;;;;;;;;;;;28029:55;;;28062:13;:22;28076:7;28062:22;;;;;;;;;;;;;;;;28055:29;;;;28029:55;28102:48;28122:18;:27;28141:7;28122:27;;;;;;;;;;;;;;;;28102:19;:48::i;:::-;28095:55;;27943:215;;;;:::o;22835:148::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22942:1:::1;22905:40;;22926:6;::::0;::::1;;;;;;;;;22905:40;;;;;;;;;;;;22973:1;22956:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;22835:148::o:0;26457:36::-;;;;:::o;25861:28::-;;;;:::o;37556:150::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37630:4:::1;37613:14;;:21;;;;;;;;;;;;;;;;;;37645:20;37660:4;37645:20;;;;;;;;;;;;;;;;;;;;;;37695:3;37676:16;:22;;;;37556:150::o:0;22193:79::-;22231:7;22258:6;;;;;;;;;;;22251:13;;22193:79;:::o;27650:87::-;27689:13;27722:7;27715:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27650:87;:::o;37247:93::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37329:3:::1;37313:13;:19;;;;37247:93:::0;:::o;37348:196::-;37438:9;37450:1;37438:13;;37433:104;37457:9;:16;37453:1;:20;37433:104;;;37495:30;37504:9;37514:1;37504:12;;;;;;;;;;;;;;37518:6;37495:8;:30::i;:::-;;37475:3;;;;;;;37433:104;;;;37348:196;;:::o;29464:298::-;29584:4;29606:126;29615:12;:10;:12::i;:::-;29628:7;29636:95;29675:15;29636:95;;;;;;;;;;;;;;;;;:11;:25;29648:12;:10;:12::i;:::-;29636:25;;;;;;;;;;;;;;;:34;29662:7;29636:34;;;;;;;;;;;;;;;;:38;;:95;;;;;:::i;:::-;29606:8;:126::i;:::-;29750:4;29743:11;;29464:298;;;;:::o;28166:213::-;28288:4;28309:40;28319:12;:10;:12::i;:::-;28332:9;28342:6;28309:9;:40::i;:::-;28367:4;28360:11;;28166:213;;;;:::o;25928:24::-;;;;;;;;;;;;;;;;;;:::o;26662:35::-;;;;;;;;;;;;;:::o;37154:81::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37224:3:::1;37214:7;:13;;;;37154:81:::0;:::o;29770:110::-;29828:4;29852:11;:20;29864:7;29852:20;;;;;;;;;;;;;;;;;;;;;;;;;29845:27;;29770:110;;;:::o;25898:23::-;;;;;;;;;;;;;;;;;;:::o;28387:184::-;28504:7;28536:11;:18;28548:5;28536:18;;;;;;;;;;;;;;;:27;28555:7;28536:27;;;;;;;;;;;;;;;;28529:34;;28387:184;;;;:::o;37718:101::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37808:3:::1;37789:16;;:22;;;;;;;;;;;;;;;;;;37718:101:::0;:::o;30752:597::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30858:42:::1;30847:53;;:7;:53;;;;30825:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31005:4;30986:24;;:7;:24;;;;30978:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31079:11;:20;31091:7;31079:20;;;;;;;;;;;;;;;;;;;;;;;;;31078:21;31070:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31181:1;31151:18;:27;31170:7;31151:27;;;;;;;;;;;;;;;;:31;31147:123;;;31210:48;31230:18;:27;31249:7;31230:27;;;;;;;;;;;;;;;;31210:19;:48::i;:::-;31185:13;:22;31199:7;31185:22;;;;;;;;;;;;;;;:73;;;;31147:123;31303:4;31280:11;:20;31292:7;31280:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31318:9;31333:7;31318:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30752:597:::0;:::o;23138:281::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23261:1:::1;23241:22;;:8;:22;;;;23219:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23374:8;23345:38;;23366:6;::::0;::::1;;;;;;;;;23345:38;;;;;;;;;;;;23403:8;23394:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;23138:281:::0;:::o;31357:489::-;22415:12;:10;:12::i;:::-;22405:22;;:6;;;;;;;;;;;:22;;;22397:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31438:11:::1;:20;31450:7;31438:20;;;;;;;;;;;;;;;;;;;;;;;;;31430:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31511:9;31523:1:::0;31511:13:::1;;31506:333;31530:9;:16;;;;31526:1;:20;31506:333;;;31588:7;31572:23;;:9;31582:1;31572:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31568:260;;;31631:9;31660:1;31641:9;:16;;;;:20;31631:31;;;;;;;;;;;;;;;;;;;;;;;;;31616:9;31626:1;31616:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31706:1;31681:13;:22;31695:7;31681:22;;;;;;;;;;;;;;;:26;;;;31749:5;31726:11;:20;31738:7;31726:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31773:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31807:5;;31568:260;31548:3;;;;;;;31506:333;;;;31357:489:::0;:::o;605:106::-;658:15;693:10;686:17;;605:106;:::o;31854:371::-;31998:1;31981:19;;:5;:19;;;;31973:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32079:1;32060:21;;:7;:21;;;;32052:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32163:6;32133:11;:18;32145:5;32133:18;;;;;;;;;;;;;;;:27;32152:7;32133:27;;;;;;;;;;;;;;;:36;;;;32201:7;32185:32;;32194:5;32185:32;;;32210:6;32185:32;;;;;;;;;;;;;;;;;;31854:371;;;:::o;32233:2290::-;32382:1;32364:20;;:6;:20;;;;32356:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32466:1;32445:23;;:9;:23;;;;32437:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32536:1;32527:6;:10;32519:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32602:14;;;;;;;;;;;:35;;;;32630:7;:5;:7::i;:::-;32620:17;;:6;:17;;;32602:35;:59;;;;32654:7;:5;:7::i;:::-;32641:20;;:9;:20;;;32602:59;:105;;;;32682:17;:25;32700:6;32682:25;;;;;;;;;;;;;;;;;;;;;;;;;32602:105;:137;;;;32711:17;:28;32729:9;32711:28;;;;;;;;;;;;;;;;;;;;;;;;;32602:137;32594:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32806:9;;32794;;:21;:48;;;;;32836:6;32819:23;;:13;;;;;;;;;;;:23;;;32794:48;:69;;;;;32856:7;:5;:7::i;:::-;32846:17;;:6;:17;;;;32794:69;32790:164;;;32880:9;;:11;;;;;;;;;;;;;32927:15;32906:7;:18;32914:9;32906:18;;;;;;;;;;;;;;;:36;;;;32790:164;32995:9;32978:26;;:13;;;;;;;;;;;:26;;;:75;;;;;33038:15;33026:9;;33008:7;:15;33016:6;33008:15;;;;;;;;;;;;;;;;:27;:45;32978:75;32974:116;;;33070:8;;;32974:116;33127:1;33108:16;;:20;33104:340;;;33145:14;33210:18;;33162:45;33204:2;33162:37;33182:16;;33162:15;:19;;:37;;;;:::i;:::-;:41;;:45;;;;:::i;:::-;:66;;;;;;33145:83;;33278:6;33261:23;;:13;;;;;;;;;;;:23;;;33257:172;;;33321:1;33305:4;33310:6;33305:12;;;;;;;;;:17;;;;;;;;;;;33257:172;;;33365:9;33348:26;;:13;;;;;;;;;;;:26;;;33344:85;;;33412:1;33395:5;33401:6;33395:13;;;;;;;;;:18;;;;;;;;;;;33344:85;33257:172;33104:340;;33464:13;33480:16;:14;:16::i;:::-;33464:32;;33520:10;33511:5;:19;33507:139;;33563:1;33547:13;:17;;;;33507:139;;;33628:6;;33613:12;33623:1;33613:5;:9;;:12;;;;:::i;:::-;:21;;;;;;33597:13;:37;;;;33507:139;33675:13;;33666:6;;:22;33656:7;:32;;;;33709:22;33734:6;33709:31;;33751:12;33766:20;:18;:20::i;:::-;33751:35;;33803:17;:25;33821:6;33803:25;;;;;;;;;;;;;;;;;;;;;;;;;33802:26;:59;;;;;33833:17;:28;33851:9;33833:28;;;;;;;;;;;;;;;;;;;;;;;;;33832:29;33802:59;33799:130;;;33894:23;33905:6;33912:4;33894:10;:23::i;:::-;33877:40;;33799:130;33970:48;34001:16;34012:4;34001:6;:10;;:16;;;;:::i;:::-;33970:18;:26;33989:6;33970:26;;;;;;;;;;;;;;;;:30;;:48;;;;:::i;:::-;33941:18;:26;33960:6;33941:26;;;;;;;;;;;;;;;:77;;;;34061:59;34095:24;34114:4;34095:14;:18;;:24;;;;:::i;:::-;34061:18;:29;34080:9;34061:29;;;;;;;;;;;;;;;;:33;;:59;;;;:::i;:::-;34029:18;:29;34048:9;34029:29;;;;;;;;;;;;;;;:91;;;;34214:11;:19;34226:6;34214:19;;;;;;;;;;;;;;;;;;;;;;;;;34210:109;;;34274:33;34300:6;34274:13;:21;34288:6;34274:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;34250:13;:21;34264:6;34250:21;;;;;;;;;;;;;;;:57;;;;34210:109;34333:11;:22;34345:9;34333:22;;;;;;;;;;;;;;;;;;;;;;;;;34329:126;;;34399:44;34428:14;34399:13;:24;34413:9;34399:24;;;;;;;;;;;;;;;;:28;;:44;;;;:::i;:::-;34372:13;:24;34386:9;34372:24;;;;;;;;;;;;;;;:71;;;;34329:126;34489:9;34472:43;;34481:6;34472:43;;;34500:14;34472:43;;;;;;;;;;;;;;;;;;32233:2290;;;;;;:::o;10905:226::-;11025:7;11058:1;11053;:6;;11061:12;11045:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11085:9;11101:1;11097;:5;11085:17;;11122:1;11115:8;;;10905:226;;;;;:::o;35973:808::-;36025:7;36045:24;36072:16;;36045:43;;36099:19;36121:11;;36099:33;;36148:9;36160:1;36148:13;;36143:458;36167:9;:16;;;;36163:1;:20;36143:458;;;36262:16;36227:18;:32;36246:9;36256:1;36246:12;;;;;;;;;;;;;;;;;;;;;;;;;36227:32;;;;;;;;;;;;;;;;:51;:113;;;;36329:11;36299:13;:27;36313:9;36323:1;36313:12;;;;;;;;;;;;;;;;;;;;;;;;;36299:27;;;;;;;;;;;;;;;;:41;36227:113;36205:191;;;36363:33;36384:11;;36363:16;;:20;;:33;;;;:::i;:::-;36356:40;;;;;;;36205:191;36430:86;36469:18;:32;36488:9;36498:1;36488:12;;;;;;;;;;;;;;;;;;;;;;;;;36469:32;;;;;;;;;;;;;;;;36430:16;:20;;:86;;;;:::i;:::-;36411:105;;36545:44;36561:13;:27;36575:9;36585:1;36575:12;;;;;;;;;;;;;;;;;;;;;;;;;36561:27;;;;;;;;;;;;;;;;36545:11;:15;;:44;;;;:::i;:::-;36531:58;;36185:3;;;;;;;36143:458;;;;36634:33;36655:11;;36634:16;;:20;;:33;;;;:::i;:::-;36615:16;:52;36611:111;;;36689:33;36710:11;;36689:16;;:20;;:33;;;;:::i;:::-;36682:40;;;;;;36611:111;36740:33;36761:11;36740:16;:20;;:33;;;;:::i;:::-;36733:40;;;;35973:808;;:::o;12337:132::-;12395:7;12422:39;12426:1;12429;12422:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12415:46;;12337:132;;;;:::o;10002:181::-;10060:7;10080:9;10096:1;10092;:5;10080:17;;10121:1;10116;:6;;10108:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10174:1;10167:8;;;10002:181;;;;:::o;11390:471::-;11448:7;11698:1;11693;:6;11689:47;;;11723:1;11716:8;;;;11689:47;11748:9;11764:1;11760;:5;11748:17;;11793:1;11788;11784;:5;;;;;;:10;11776:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11852:1;11845:8;;;11390:471;;;;;:::o;10466:136::-;10524:7;10551:43;10555:1;10558;10551:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10544:50;;10466:136;;;;:::o;3259:746::-;3317:6;3332:22;3361:19;3383:5;3361:27;;3404:1;3399;:6;;;3395:230;;3433:27;3454:2;3448:1;3439:11;;:17;;3458:1;3433:4;:27::i;:::-;3416:44;;3395:230;;;3544:38;3576:2;3569:1;3568:2;;3550:22;;:28;;3580:1;3544:4;:38::i;:::-;3527:55;;3616:1;3612;3608;:5;:9;3591:26;;3395:230;3652:2;3633:21;;;;;3667:14;3663:337;;;3719:34;3701:14;:52;;3692:62;;;;;;3779:14;3770:24;;3763:31;;;;;;3663:337;3881:34;3863:14;:52;;3854:62;;;;;;3940:14;3925:30;;;;3259:746;;;;;:::o;4158:117::-;4208:6;4237:1;4232;:6;;;;4223:16;;;;;;4266:2;4261:1;:7;;;;4246:23;;4158:117;;;:::o;35159:806::-;35226:7;35246:22;35271:6;35246:31;;35336:1;35325:7;;:12;35322:290;;35353:14;35370:46;35413:1;35399:11;;:15;35394:2;:21;35370:19;35381:7;;35370:6;:10;;:19;;;;:::i;:::-;:23;;:46;;;;:::i;:::-;35353:63;;35448:26;35467:6;35448:14;:18;;:26;;;;:::i;:::-;35431:43;;35508:38;35529:16;35540:4;35529:6;:10;;:16;;;;:::i;:::-;35508;;:20;;:38;;;;:::i;:::-;35489:16;:57;;;;35576:24;35593:6;35576:12;;:16;;:24;;;;:::i;:::-;35561:12;:39;;;;35322:290;;35644:1;35627:13;;:18;;:38;;;;;35649:16;;;;;;;;;;;35627:38;35624:292;;;35681:14;35698:52;35747:1;35733:11;;:15;35728:2;:21;35698:25;35709:13;;35698:6;:10;;:25;;;;:::i;:::-;:29;;:52;;;;:::i;:::-;35681:69;;35782:26;35801:6;35782:14;:18;;:26;;;;:::i;:::-;35765:43;;35844:30;35867:6;35844:18;;:22;;:30;;;;:::i;:::-;35823:18;:51;;;;35889:15;35897:6;35889:7;:15::i;:::-;35624:292;;35943:14;35936:21;;;35159:806;;;;:::o;12965:312::-;13085:7;13117:1;13113;:5;13120:12;13105:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13144:9;13160:1;13156;:5;;;;;;13144:17;;13268:1;13261:8;;;12965:312;;;;;:::o;4594:1737::-;4653:7;4678:1;4673;:6;4669:1657;;;4688:34;4681:41;;;;4669:1657;4743:1;4738;:6;4734:1592;;;4753:1;4746:8;;;;4734:1592;4775:10;4788:1;4775:14;;4798:10;4811:1;4798:14;;4831:35;4825:2;:41;4821:74;;4877:3;4870:10;;;;;4889:3;4882:10;;;;4821:74;4913:19;4907:2;:25;4903:56;;4943:2;4936:9;;;;;4954:2;4947:9;;;;4903:56;4977:11;4971:2;:17;4967:48;;4999:2;4992:9;;;;;5010:2;5003:9;;;;4967:48;5033:7;5027:2;:13;5023:44;;5051:2;5044:9;;;;;5062:2;5055:9;;;;5023:44;5085:5;5079:2;:11;5075:40;;5101:1;5094:8;;;;;5111:1;5104:8;;;;5075:40;5133:4;5127:2;:10;5123:39;;5148:1;5141:8;;;;;5158:1;5151:8;;;;5123:39;5180:3;5174:2;:9;5170:38;;5194:1;5187:8;;;;;5204:1;5197:8;;;;5170:38;5226:3;5220:2;:9;5216:23;;5238:1;5231:8;;;;5216:23;5282:9;5300:3;5294;:9;5282:21;;5321:1;5316:2;:6;5312:43;;;5330:2;5324:8;;;;;;;;;;;;;5312:43;;;5353:2;5352:3;;5346:9;;;;;;;;;;;;;5312:43;5366:14;5383:34;5366:51;;5426:9;5438:1;5426:13;;5450:769;5461:1;5457;:5;5450:769;;;5487:1;5483;5479;:5;:9;5475:735;;;5521:1;5512:6;:10;5503:19;;5540:1;5535:6;;;;5560:2;5554:8;;;;5602:66;5579:6;:89;5575:180;;5696:3;5685:14;;;;;5720:1;5714:7;;;;5575:180;;;5752:3;5741:14;;;;;5575:180;5777:4;5772:2;:9;5768:23;;;5790:1;5783:8;;;;;;;;;5768:23;5831:3;5826:2;:8;5817:18;;;;;;5475:735;;;5886:1;5882;:5;5878:9;;5906:1;5900:7;;;;;5927:1;5920:8;;;;;5963:66;5945:1;:84;5941:165;;6052:3;6046:9;;;;;6076:1;6070:7;;;;5941:165;;;6103:3;6097:9;;;;;5941:165;6128:4;6123:2;:9;6119:23;;;6141:1;6134:8;;;;;;;;;6119:23;6182:3;6177:2;:8;6168:18;;;;;;5475:735;5450:769;;;6238:1;6233:2;:6;6229:65;;;6252:2;6241:13;;;;;;;;;;;;;6229:65;;;6277:1;6272:2;:6;6268:26;;;6292:2;6291:3;;6280:14;;;;;;;;;;;;;6268:26;6229:65;6312:6;6305:13;;;;;;;4594:1737;;;;;:::o;36792:205::-;36841:12;36857:20;:18;:20::i;:::-;36841:36;;36909:35;36930:13;36938:4;36930:3;:7;;:13;;;;:::i;:::-;36909:16;;:20;;:35;;;;:::i;:::-;36890:16;:54;;;;36969:20;36985:3;36969:11;;:15;;:20;;;;:::i;:::-;36955:11;:34;;;;36792:205;;:::o
Swarm Source
ipfs://1bd648a8a669ba751faf3d42752a4b89ad9315122de9112fddc26b4090d79b10
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.