Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000 AMEN
Holders
24
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
148,702.425981535 AMENValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
AmenApp
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-17 */ /** *Submitted for verification at Etherscan.io on 2021-05-15 */ /* _ _ /_\ _ __ ___ ___ _ __ /_\ _ __ _ __ //_\\| '_ ` _ \ / _ \ '_ \ //_\\| '_ \| '_ \ / _ \ | | | | | __/ | | | / _ \ |_) | |_) | \_/ \_/_| |_| |_|\___|_| |_| \_/ \_/ .__/| .__/ |_| |_| 4% liquidity 4% Marketing */ //SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.6.12; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } 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; } } 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); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // Contract implementation contract AmenApp is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; // excluded from reward address[] private _excluded; mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'AMEN APP'; string private _symbol = 'AMEN'; uint8 private _decimals = 9; uint256 private _taxFee = 0; uint256 private _MarketingFee = 4; uint256 private _liquidityFee = 4; uint256 private _previousTaxFee = _taxFee; uint256 private _previousMarketingFee = _MarketingFee; uint256 private _previousLiquidityFee = _liquidityFee; address payable private _MarketingWalletAddress = payable(0x7379dbEB25E364697a96F367d10F101E3EDE4116); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify = false; bool public swapAndLiquifyEnabled = true; uint256 private _maxTxAmount = _tTotal; uint256 private _numTokensSellToAddToLiquidity = 10000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_MarketingWalletAddress] = true; _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true; _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)); _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true; _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)); _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true; _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)); _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true; _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679)); _isBlackListedBot[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true; _blackListedBots.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)); _isBlackListedBot[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true; _blackListedBots.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)); _isBlackListedBot[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true; _blackListedBots.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)); _isBlackListedBot[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true; _blackListedBots.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)); _isBlackListedBot[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true; _blackListedBots.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)); _isBlackListedBot[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true; _blackListedBots.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)); _isBlackListedBot[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true; _blackListedBots.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)); _isBlackListedBot[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true; _blackListedBots.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function addBotToBlackList(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.'); require(!_isBlackListedBot[account], "Account is already blacklisted"); _isBlackListedBot[account] = true; _blackListedBots.push(account); } function removeBotFromBlackList(address account) external onlyOwner() { require(_isBlackListedBot[account], "Account is not blacklisted"); for (uint256 i = 0; i < _blackListedBots.length; i++) { if (_blackListedBots[i] == account) { _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1]; _isBlackListedBot[account] = false; _blackListedBots.pop(); break; } } } function removeAllFee() private { if(_taxFee == 0 && _MarketingFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _MarketingFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _MarketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _MarketingFee = _previousMarketingFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address 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(!_isBlackListedBot[recipient], "You have no power here!"); require(!_isBlackListedBot[msg.sender], "You have no power here!"); if(sender != owner() && recipient != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity; if (!inSwapAndLiquify && swapAndLiquifyEnabled && overMinTokenBalance && sender != uniswapV2Pair) { contractTokenBalance = _numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //transfer amount, it will take tax and Marketing fee _tokenTransfer(sender, recipient, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 toMarketing = contractTokenBalance.mul(_MarketingFee).div(_MarketingFee.add(_liquidityFee)); uint256 toLiquify = contractTokenBalance.sub(toMarketing); // split the contract balance into halves uint256 half = toLiquify.div(2); uint256 otherHalf = toLiquify.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH uint256 toSwapForEth = half.add(toMarketing); swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 fromSwap = address(this).balance.sub(initialBalance); uint256 newBalance = fromSwap.mul(half).div(toSwapForEth); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); sendETHToMarketing(fromSwap.sub(newBalance)); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function sendETHToMarketing(uint256 amount) private { _MarketingWalletAddress.transfer(amount); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() public onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHToMarketing(contractETHBalance); } function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){ swapAndLiquifyEnabled = _swapAndLiquifyEnabled; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private { uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _MarketingFee.add(_liquidityFee)); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 MarketingLiquidityFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tMarketingLiquidityFee = tAmount.mul(MarketingLiquidityFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(MarketingLiquidityFee); return (tTransferAmount, tFee, tMarketingLiquidityFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getTaxFee() private view returns(uint256) { return _taxFee; } function _getMaxTxAmount() private view returns(uint256) { return _maxTxAmount; } function _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner() { require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49'); _taxFee = taxFee; } function _setMarketingFee(uint256 MarketingFee) external onlyOwner() { require(MarketingFee >= 1 && MarketingFee <= 49, 'MarketingFee should be in 1 - 11'); _MarketingFee = MarketingFee; } function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() { require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11'); _liquidityFee = liquidityFee; } function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() { require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9'); _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9'); _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052662386f26fc10000600b55600b54600019816200001d57fe5b0660001903600c556040518060400160405280600881526020017f414d454e20415050000000000000000000000000000000000000000000000000815250600e90805190602001906200007292919062001189565b506040518060400160405280600481526020017f414d454e00000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c092919062001189565b506009601060006101000a81548160ff021916908360ff160217905550600060115560046012556004601355601154601455601254601555601354601655737379dbeb25e364697a96f367d10f101e3ede4116601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760146101000a81548160ff0219169083151502179055506001601760156101000a81548160ff021916908315150217905550600b546018556509184e72a000601955348015620001a657600080fd5b506000620001b96200115860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200026e6200115860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030c57600080fd5b505afa15801562000321573d6000803e3d6000fd5b505050506040513d60208110156200033857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ac57600080fd5b505afa158015620003c1573d6000803e3d6000fd5b505050506040513d6020811015620003d857600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200045357600080fd5b505af115801562000468573d6000803e3d6000fd5b505050506040513d60208110156200047f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005136200116060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600073a1cec245c456dd1bd9f2815a6955fef44eb4191b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73a1cec245c456dd1bd9f2815a6955fef44eb4191b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf959080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073fe76f05dc59fec04184fa0245ad0c3cf9a57b96473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73fe76f05dc59fec04184fa0245ad0c3cf9a57b9649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007327f9adb26d532a41d97e00206114e429ad58c67973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7327f9adb26d532a41d97e00206114e429ad58c6799080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073fad95b6089c53a0d1d861eabfaadd8901b0f853373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73fad95b6089c53a0d1d861eabfaadd8901b0f85339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073fe9d99ef02e905127239e85a611c29ad32c31c2f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73fe9d99ef02e905127239e85a611c29ad32c31c2f9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073c496d84215d5018f6f53e7f6f12e45c9b5e8e8a973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73c496d84215d5018f6f53e7f6f12e45c9b5e8e8a99080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007359341bc6b4f3ace878574b05914f43309dd678c773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7359341bc6b4f3ace878574b05914f43309dd678c79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000734aeb32e16dcac00b092596adc6cd4955efdee29073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a734aeb32e16dcac00b092596adc6cd4955efdee2909080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073136f4b5b6a306091b280e3f251fa0e21b1280cd573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73136f4b5b6a306091b280e3f251fa0e21b1280cd59080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620010ea6200115860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3506200122f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620011cc57805160ff1916838001178555620011fd565b82800160010185558215620011fd579182015b82811115620011fc578251825591602001919060010190620011df565b5b5090506200120c919062001210565b5090565b5b808211156200122b57600081600090555060010162001211565b5090565b60805160601c60a05160601c615d166200127760003980611c445280613cd6525080610ee05280614116528061420252806142295280614d1b5280614d425250615d166000f3fe60806040526004361061023f5760003560e01c80635880b8731161012e578063a9059cbb116100ab578063dd4670641161006f578063dd46706414610cc1578063dd62ed3e14610cfc578063f2fde38b14610d81578063f429389014610dd2578063f815a84214610de957610246565b8063a9059cbb14610b50578063af9549e014610bc1578063b6c5232414610c1e578063bcd6d44614610c49578063c49b9a8014610c8457610246565b80638da5cb5b116100f25780638da5cb5b146109bc57806395d89b41146109fd578063a457c2d714610a8d578063a52fe9bb14610afe578063a69df4b514610b3957610246565b80635880b8731461084d57806370a0823114610888578063715018a6146108ed5780637ded4d6a1461090457806388f820201461095557610246565b80633685d419116101bc57806349bd5a5e1161018057806349bd5a5e146107105780634a74bb021461075157806351bc3c851461077e57806352390c02146107955780635342acb4146107e657610246565b80633685d4191461056757806339509351146105b85780633bd5d173146106295780634303443d146106645780634549b039146106b557610246565b80631bbae6e0116102035780631bbae6e0146103e35780631decaadc1461041e57806323b872dd146104595780632d838119146104ea578063313ce5671461053957610246565b806306fdde031461024b578063095ea7b3146102db57806313114a9d1461034c5780631694505e1461037757806318160ddd146103b857610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610e14565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e757600080fd5b50610334600480360360408110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eb6565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b50610361610ed4565b6040518082815260200191505060405180910390f35b34801561038357600080fd5b5061038c610ede565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c457600080fd5b506103cd610f02565b6040518082815260200191505060405180910390f35b3480156103ef57600080fd5b5061041c6004803603602081101561040657600080fd5b8101908080359060200190929190505050610f0c565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b810190808035906020019092919050505061103b565b005b34801561046557600080fd5b506104d26004803603606081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061116a565b60405180821515815260200191505060405180910390f35b3480156104f657600080fd5b506105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050611243565b6040518082815260200191505060405180910390f35b34801561054557600080fd5b5061054e6112c7565b604051808260ff16815260200191505060405180910390f35b34801561057357600080fd5b506105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112de565b005b3480156105c457600080fd5b50610611600480360360408110156105db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611668565b60405180821515815260200191505060405180910390f35b34801561063557600080fd5b506106626004803603602081101561064c57600080fd5b810190808035906020019092919050505061171b565b005b34801561067057600080fd5b506106b36004803603602081101561068757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ac565b005b3480156106c157600080fd5b506106fa600480360360408110156106d857600080fd5b8101908080359060200190929190803515159060200190929190505050611b8b565b6040518082815260200191505060405180910390f35b34801561071c57600080fd5b50610725611c42565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075d57600080fd5b50610766611c66565b60405180821515815260200191505060405180910390f35b34801561078a57600080fd5b50610793611c79565b005b3480156107a157600080fd5b506107e4600480360360208110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d5a565b005b3480156107f257600080fd5b506108356004803603602081101561080957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210d565b60405180821515815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050612163565b005b34801561089457600080fd5b506108d7600480360360208110156108ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122b9565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b506109026123a4565b005b34801561091057600080fd5b506109536004803603602081101561092757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b005b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286f565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d16128c5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a126128ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a52578082015181840152602081019050610a37565b50505050905090810190601f168015610a7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a9957600080fd5b50610ae660048036036040811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612990565b60405180821515815260200191505060405180910390f35b348015610b0a57600080fd5b50610b3760048036036020811015610b2157600080fd5b8101908080359060200190929190505050612a5d565b005b348015610b4557600080fd5b50610b4e612bb3565b005b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dd0565b60405180821515815260200191505060405180910390f35b348015610bcd57600080fd5b50610c1c60048036036040811015610be457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612dee565b005b348015610c2a57600080fd5b50610c33612f11565b6040518082815260200191505060405180910390f35b348015610c5557600080fd5b50610c8260048036036020811015610c6c57600080fd5b8101908080359060200190929190505050612f1b565b005b348015610c9057600080fd5b50610cbf60048036036020811015610ca757600080fd5b81019080803515159060200190929190505050613071565b005b348015610ccd57600080fd5b50610cfa60048036036020811015610ce457600080fd5b8101908080359060200190929190505050613156565b005b348015610d0857600080fd5b50610d6b60048036036040811015610d1f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613347565b6040518082815260200191505060405180910390f35b348015610d8d57600080fd5b50610dd060048036036020811015610da457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133ce565b005b348015610dde57600080fd5b50610de76135d9565b005b348015610df557600080fd5b50610dfe6136b2565b6040518082815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610eac5780601f10610e8157610100808354040283529160200191610eac565b820191906000526020600020905b815481529060010190602001808311610e8f57829003601f168201915b5050505050905090565b6000610eca610ec36136ba565b84846136c2565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b610f146136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b02602c913960400191505060405180910390fd5b8060188190555050565b6110436136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615c0d603e913960400191505060405180910390fd5b8060198190555050565b60006111778484846138b9565b611238846111836136ba565b61123385604051806060016040528060288152602001615b4f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e96136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfe9092919063ffffffff16565b6136c2565b600190509392505050565b6000600c548211156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a68602a913960400191505060405180910390fd5b60006112aa613ebe565b90506112bf8184613ee990919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6112e66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611664578173ffffffffffffffffffffffffffffffffffffffff166008828154811061149957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611657576008600160088054905003815481106114f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061152d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061161d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611664565b8080600101915050611468565b5050565b60006117116116756136ba565b8461170c85600560006116866136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b6136c2565b6001905092915050565b60006117256136ba565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615c6d602c913960400191505060405180910390fd5b60006117d583613fbb565b5050505050905061182e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188681600c5461403690919063ffffffff16565b600c819055506118a183600d54613f3390919063ffffffff16565b600d81905550505050565b6118b46136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615ba06024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611c25576000611c1584613fbb565b5050505050905080915050611c3c565b6000611c3084613fbb565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601760159054906101000a900460ff1681565b611c816136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d4c306122b9565b9050611d5781614080565b50565b611d626136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c4b6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561204f5761200b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611243565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61216b6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561223d575060318111155b6122af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060118190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561235457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061239f565b61239c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611243565b90505b919050565b6123ac6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6125326136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561286b578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106126e557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561285e57600a6001600a80549050038154811061274157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061277957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061282457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561286b565b80806001019150506126b4565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129865780601f1061295b57610100808354040283529160200191612986565b820191906000526020600020905b81548152906001019060200180831161296957829003601f168201915b5050505050905090565b6000612a5361299d6136ba565b84612a4e85604051806060016040528060258152602001615cbc60259139600560006129c76136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfe9092919063ffffffff16565b6136c2565b6001905092915050565b612a656136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612b37575060318111155b612ba9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060128190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615c996023913960400191505060405180910390fd5b6002544211612cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612de4612ddd6136ba565b84846138b9565b6001905092915050565b612df66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b612f236136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ff5575060318111155b613067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6130796136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760156101000a81548160ff02191690831515021790555050565b61315e6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6133d66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613496576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561351c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615a926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6135e16136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136af8161432e565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613748576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615be96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ab86022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561393f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615bc46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a456023913960400191505060405180910390fd5b60008111613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615b776029913960400191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b613ba66128c5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613c145750613be46128c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613c7557601854811115613c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615ada6028913960400191505060405180910390fd5b5b6000613c80306122b9565b90506018548110613c915760185490505b60006019548210159050601760149054906101000a900460ff16158015613cc45750601760159054906101000a900460ff165b8015613ccd5750805b8015613d2557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d39576019549150613d388261439a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613de05750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613dea57600090505b613df686868684614533565b505050505050565b6000838311158290613eab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e70578082015181840152602081019050613e55565b50505050905090810190601f168015613e9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ecb614844565b91509150613ee28183613ee990919063ffffffff16565b9250505090565b6000613f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614ad5565b905092915050565b600080828401905083811015613fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613fec8a601154613fe7601354601254613f3390919063ffffffff16565b614b9b565b9250925092506000613ffc613ebe565b9050600080600061400e8e8786614c31565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061407883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dfe565b905092915050565b6060600267ffffffffffffffff8111801561409a57600080fd5b506040519080825280602002602001820160405280156140c95781602001602082028036833780820191505090505b50905030816000815181106140da57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561417a57600080fd5b505afa15801561418e573d6000803e3d6000fd5b505050506040513d60208110156141a457600080fd5b8101908080519060200190929190505050816001815181106141c257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614227307f0000000000000000000000000000000000000000000000000000000000000000846136c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156142e95780820151818401526020810190506142ce565b505050509050019650505050505050600060405180830381600087803b15801561431257600080fd5b505af1158015614326573d6000803e3d6000fd5b505050505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614396573d6000803e3d6000fd5b5050565b6001601760146101000a81548160ff02191690831515021790555060006143f46143d1601354601254613f3390919063ffffffff16565b6143e660125485614c8f90919063ffffffff16565b613ee990919063ffffffff16565b9050600061440b828461403690919063ffffffff16565b90506000614423600283613ee990919063ffffffff16565b9050600061443a828461403690919063ffffffff16565b9050600047905060006144568685613f3390919063ffffffff16565b905061446181614080565b6000614476834761403690919063ffffffff16565b9050600061449f836144918885614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506144ab8582614d15565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a161450d614508828461403690919063ffffffff16565b61432e565b50505050505050506000601760146101000a81548160ff02191690831515021790555050565b8061454157614540614e66565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145e45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145f9576145f4848484614ec8565b614830565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561469c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156146b1576146ac848484615128565b61482f565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561476a57614765848484615388565b61482e565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561480c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148215761481c848484615553565b61482d565b61482c848484615388565b5b5b5b5b8061483e5761483d615848565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015614a985782600360006008848154811061487757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061495e57508160046000600884815481106148f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561497557600c54600b5494509450505050614ad1565b6149fe600360006008848154811061498957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461403690919063ffffffff16565b9250614a896004600060088481548110614a1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361403690919063ffffffff16565b91508080600101915050614858565b50614ab0600b54600c54613ee990919063ffffffff16565b821015614ac857600c54600b54935093505050614ad1565b81819350935050505b9091565b60008083118290614b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b46578082015181840152602081019050614b2b565b50505050905090810190601f168015614b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b8d57fe5b049050809150509392505050565b600080600080614bc76064614bb9888a614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506000614bf16064614be3888b614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506000614c1a87614c0c858c61403690919063ffffffff16565b61403690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614c4a8588614c8f90919063ffffffff16565b90506000614c618688614c8f90919063ffffffff16565b90506000614c78828461403690919063ffffffff16565b905082818395509550955050505093509350939050565b600080831415614ca25760009050614d0f565b6000828402905082848281614cb357fe5b0414614d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b2e6021913960400191505060405180910390fd5b809150505b92915050565b614d40307f0000000000000000000000000000000000000000000000000000000000000000846136c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614d8a6128c5565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614e0f57600080fd5b505af1158015614e23573d6000803e3d6000fd5b50505050506040513d6060811015614e3a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614e7a57506000601254145b8015614e8857506000601354145b15614e9257614ec6565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614eda87613fbb565b955095509550955095509550614f3887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fcd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061506285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150ae81615865565b6150b88483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061513a87613fbb565b95509550955095509550955061519886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061522d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152c285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530e81615865565b6153188483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061539a87613fbb565b9550955095509550955095506153f886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061548d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154d981615865565b6154e38483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061556587613fbb565b9550955095509550955095506155c387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061565886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156ed83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061578285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157ce81615865565b6157d88483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601454601181905550601554601281905550601654601381905550565b600061586f613ebe565b905060006158868284614c8f90919063ffffffff16565b90506158da81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615a05576159c183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615a1f82600c5461403690919063ffffffff16565b600c81905550615a3a81600d54613f3390919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b17819a30d22924f3b22b8657fe5f1fab1670aabf20c4fa8d90544856ca947464736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80635880b8731161012e578063a9059cbb116100ab578063dd4670641161006f578063dd46706414610cc1578063dd62ed3e14610cfc578063f2fde38b14610d81578063f429389014610dd2578063f815a84214610de957610246565b8063a9059cbb14610b50578063af9549e014610bc1578063b6c5232414610c1e578063bcd6d44614610c49578063c49b9a8014610c8457610246565b80638da5cb5b116100f25780638da5cb5b146109bc57806395d89b41146109fd578063a457c2d714610a8d578063a52fe9bb14610afe578063a69df4b514610b3957610246565b80635880b8731461084d57806370a0823114610888578063715018a6146108ed5780637ded4d6a1461090457806388f820201461095557610246565b80633685d419116101bc57806349bd5a5e1161018057806349bd5a5e146107105780634a74bb021461075157806351bc3c851461077e57806352390c02146107955780635342acb4146107e657610246565b80633685d4191461056757806339509351146105b85780633bd5d173146106295780634303443d146106645780634549b039146106b557610246565b80631bbae6e0116102035780631bbae6e0146103e35780631decaadc1461041e57806323b872dd146104595780632d838119146104ea578063313ce5671461053957610246565b806306fdde031461024b578063095ea7b3146102db57806313114a9d1461034c5780631694505e1461037757806318160ddd146103b857610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610e14565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e757600080fd5b50610334600480360360408110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eb6565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b50610361610ed4565b6040518082815260200191505060405180910390f35b34801561038357600080fd5b5061038c610ede565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c457600080fd5b506103cd610f02565b6040518082815260200191505060405180910390f35b3480156103ef57600080fd5b5061041c6004803603602081101561040657600080fd5b8101908080359060200190929190505050610f0c565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b810190808035906020019092919050505061103b565b005b34801561046557600080fd5b506104d26004803603606081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061116a565b60405180821515815260200191505060405180910390f35b3480156104f657600080fd5b506105236004803603602081101561050d57600080fd5b8101908080359060200190929190505050611243565b6040518082815260200191505060405180910390f35b34801561054557600080fd5b5061054e6112c7565b604051808260ff16815260200191505060405180910390f35b34801561057357600080fd5b506105b66004803603602081101561058a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112de565b005b3480156105c457600080fd5b50610611600480360360408110156105db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611668565b60405180821515815260200191505060405180910390f35b34801561063557600080fd5b506106626004803603602081101561064c57600080fd5b810190808035906020019092919050505061171b565b005b34801561067057600080fd5b506106b36004803603602081101561068757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118ac565b005b3480156106c157600080fd5b506106fa600480360360408110156106d857600080fd5b8101908080359060200190929190803515159060200190929190505050611b8b565b6040518082815260200191505060405180910390f35b34801561071c57600080fd5b50610725611c42565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075d57600080fd5b50610766611c66565b60405180821515815260200191505060405180910390f35b34801561078a57600080fd5b50610793611c79565b005b3480156107a157600080fd5b506107e4600480360360208110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d5a565b005b3480156107f257600080fd5b506108356004803603602081101561080957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210d565b60405180821515815260200191505060405180910390f35b34801561085957600080fd5b506108866004803603602081101561087057600080fd5b8101908080359060200190929190505050612163565b005b34801561089457600080fd5b506108d7600480360360208110156108ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122b9565b6040518082815260200191505060405180910390f35b3480156108f957600080fd5b506109026123a4565b005b34801561091057600080fd5b506109536004803603602081101561092757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b005b34801561096157600080fd5b506109a46004803603602081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286f565b60405180821515815260200191505060405180910390f35b3480156109c857600080fd5b506109d16128c5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0957600080fd5b50610a126128ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a52578082015181840152602081019050610a37565b50505050905090810190601f168015610a7f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a9957600080fd5b50610ae660048036036040811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612990565b60405180821515815260200191505060405180910390f35b348015610b0a57600080fd5b50610b3760048036036020811015610b2157600080fd5b8101908080359060200190929190505050612a5d565b005b348015610b4557600080fd5b50610b4e612bb3565b005b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dd0565b60405180821515815260200191505060405180910390f35b348015610bcd57600080fd5b50610c1c60048036036040811015610be457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612dee565b005b348015610c2a57600080fd5b50610c33612f11565b6040518082815260200191505060405180910390f35b348015610c5557600080fd5b50610c8260048036036020811015610c6c57600080fd5b8101908080359060200190929190505050612f1b565b005b348015610c9057600080fd5b50610cbf60048036036020811015610ca757600080fd5b81019080803515159060200190929190505050613071565b005b348015610ccd57600080fd5b50610cfa60048036036020811015610ce457600080fd5b8101908080359060200190929190505050613156565b005b348015610d0857600080fd5b50610d6b60048036036040811015610d1f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613347565b6040518082815260200191505060405180910390f35b348015610d8d57600080fd5b50610dd060048036036020811015610da457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133ce565b005b348015610dde57600080fd5b50610de76135d9565b005b348015610df557600080fd5b50610dfe6136b2565b6040518082815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610eac5780601f10610e8157610100808354040283529160200191610eac565b820191906000526020600020905b815481529060010190602001808311610e8f57829003601f168201915b5050505050905090565b6000610eca610ec36136ba565b84846136c2565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b610f146136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b02602c913960400191505060405180910390fd5b8060188190555050565b6110436136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615c0d603e913960400191505060405180910390fd5b8060198190555050565b60006111778484846138b9565b611238846111836136ba565b61123385604051806060016040528060288152602001615b4f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e96136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfe9092919063ffffffff16565b6136c2565b600190509392505050565b6000600c548211156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615a68602a913960400191505060405180910390fd5b60006112aa613ebe565b90506112bf8184613ee990919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b6112e66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611664578173ffffffffffffffffffffffffffffffffffffffff166008828154811061149957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611657576008600160088054905003815481106114f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061152d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061161d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611664565b8080600101915050611468565b5050565b60006117116116756136ba565b8461170c85600560006116866136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b6136c2565b6001905092915050565b60006117256136ba565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615c6d602c913960400191505060405180910390fd5b60006117d583613fbb565b5050505050905061182e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188681600c5461403690919063ffffffff16565b600c819055506118a183600d54613f3390919063ffffffff16565b600d81905550505050565b6118b46136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615ba06024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611c25576000611c1584613fbb565b5050505050905080915050611c3c565b6000611c3084613fbb565b50505050915050809150505b92915050565b7f000000000000000000000000b7da8215573dcfa58ee0fa2e5b83630818b2f20781565b601760159054906101000a900460ff1681565b611c816136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d4c306122b9565b9050611d5781614080565b50565b611d626136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c4b6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561204f5761200b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611243565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61216b6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561223d575060318111155b6122af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060118190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561235457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061239f565b61239c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611243565b90505b919050565b6123ac6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6125326136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561286b578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106126e557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561285e57600a6001600a80549050038154811061274157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061277957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061282457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561286b565b80806001019150506126b4565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129865780601f1061295b57610100808354040283529160200191612986565b820191906000526020600020905b81548152906001019060200180831161296957829003601f168201915b5050505050905090565b6000612a5361299d6136ba565b84612a4e85604051806060016040528060258152602001615cbc60259139600560006129c76136ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfe9092919063ffffffff16565b6136c2565b6001905092915050565b612a656136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612b37575060318111155b612ba9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060128190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615c996023913960400191505060405180910390fd5b6002544211612cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612de4612ddd6136ba565b84846138b9565b6001905092915050565b612df66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b612f236136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ff5575060318111155b613067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6130796136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760156101000a81548160ff02191690831515021790555050565b61315e6136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461321e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6133d66136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613496576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561351c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615a926026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6135e16136ba565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136af8161432e565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613748576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615be96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ab86022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561393f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615bc46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615a456023913960400191505060405180910390fd5b60008111613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615b776029913960400191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b613ba66128c5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613c145750613be46128c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613c7557601854811115613c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615ada6028913960400191505060405180910390fd5b5b6000613c80306122b9565b90506018548110613c915760185490505b60006019548210159050601760149054906101000a900460ff16158015613cc45750601760159054906101000a900460ff165b8015613ccd5750805b8015613d2557507f000000000000000000000000b7da8215573dcfa58ee0fa2e5b83630818b2f20773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613d39576019549150613d388261439a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613de05750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613dea57600090505b613df686868684614533565b505050505050565b6000838311158290613eab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e70578082015181840152602081019050613e55565b50505050905090810190601f168015613e9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ecb614844565b91509150613ee28183613ee990919063ffffffff16565b9250505090565b6000613f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614ad5565b905092915050565b600080828401905083811015613fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613fec8a601154613fe7601354601254613f3390919063ffffffff16565b614b9b565b9250925092506000613ffc613ebe565b9050600080600061400e8e8786614c31565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061407883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613dfe565b905092915050565b6060600267ffffffffffffffff8111801561409a57600080fd5b506040519080825280602002602001820160405280156140c95781602001602082028036833780820191505090505b50905030816000815181106140da57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561417a57600080fd5b505afa15801561418e573d6000803e3d6000fd5b505050506040513d60208110156141a457600080fd5b8101908080519060200190929190505050816001815181106141c257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614227307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846136c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156142e95780820151818401526020810190506142ce565b505050509050019650505050505050600060405180830381600087803b15801561431257600080fd5b505af1158015614326573d6000803e3d6000fd5b505050505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614396573d6000803e3d6000fd5b5050565b6001601760146101000a81548160ff02191690831515021790555060006143f46143d1601354601254613f3390919063ffffffff16565b6143e660125485614c8f90919063ffffffff16565b613ee990919063ffffffff16565b9050600061440b828461403690919063ffffffff16565b90506000614423600283613ee990919063ffffffff16565b9050600061443a828461403690919063ffffffff16565b9050600047905060006144568685613f3390919063ffffffff16565b905061446181614080565b6000614476834761403690919063ffffffff16565b9050600061449f836144918885614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506144ab8582614d15565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a161450d614508828461403690919063ffffffff16565b61432e565b50505050505050506000601760146101000a81548160ff02191690831515021790555050565b8061454157614540614e66565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145e45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145f9576145f4848484614ec8565b614830565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561469c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156146b1576146ac848484615128565b61482f565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561476a57614765848484615388565b61482e565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561480c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148215761481c848484615553565b61482d565b61482c848484615388565b5b5b5b5b8061483e5761483d615848565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015614a985782600360006008848154811061487757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061495e57508160046000600884815481106148f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561497557600c54600b5494509450505050614ad1565b6149fe600360006008848154811061498957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461403690919063ffffffff16565b9250614a896004600060088481548110614a1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361403690919063ffffffff16565b91508080600101915050614858565b50614ab0600b54600c54613ee990919063ffffffff16565b821015614ac857600c54600b54935093505050614ad1565b81819350935050505b9091565b60008083118290614b81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b46578082015181840152602081019050614b2b565b50505050905090810190601f168015614b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614b8d57fe5b049050809150509392505050565b600080600080614bc76064614bb9888a614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506000614bf16064614be3888b614c8f90919063ffffffff16565b613ee990919063ffffffff16565b90506000614c1a87614c0c858c61403690919063ffffffff16565b61403690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614c4a8588614c8f90919063ffffffff16565b90506000614c618688614c8f90919063ffffffff16565b90506000614c78828461403690919063ffffffff16565b905082818395509550955050505093509350939050565b600080831415614ca25760009050614d0f565b6000828402905082848281614cb357fe5b0414614d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b2e6021913960400191505060405180910390fd5b809150505b92915050565b614d40307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846136c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614d8a6128c5565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614e0f57600080fd5b505af1158015614e23573d6000803e3d6000fd5b50505050506040513d6060811015614e3a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614e7a57506000601254145b8015614e8857506000601354145b15614e9257614ec6565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614eda87613fbb565b955095509550955095509550614f3887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fcd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061506285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150ae81615865565b6150b88483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061513a87613fbb565b95509550955095509550955061519886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061522d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152c285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530e81615865565b6153188483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061539a87613fbb565b9550955095509550955095506153f886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061548d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154d981615865565b6154e38483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061556587613fbb565b9550955095509550955095506155c387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061565886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156ed83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061578285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157ce81615865565b6157d88483615a0a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601454601181905550601554601281905550601654601381905550565b600061586f613ebe565b905060006158868284614c8f90919063ffffffff16565b90506158da81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615a05576159c183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f3390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615a1f82600c5461403690919063ffffffff16565b600c81905550615a3a81600d54613f3390919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b17819a30d22924f3b22b8657fe5f1fab1670aabf20c4fa8d90544856ca947464736f6c634300060c0033
Deployed Bytecode Sourcemap
24656:23661:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29668:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30580:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31846:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25932:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29945:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48113:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47796:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30749:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32770:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29854:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33485:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31070:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31941:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33972:352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32326:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25990:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26073:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40433:156;;;;;;;;;;;;;:::i;:::-;;33031:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35361:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47179:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30048:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15402:148;;;;;;;;;;;;;:::i;:::-;;34332:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31573:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14768:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29759:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31296:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47356:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16405:293;;;;;;;;;;;;;:::i;:::-;;30254:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31701:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15954:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47575:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40764:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16119:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30429:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15702:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40597:159;;;;;;;;;;;;;:::i;:::-;;47061:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29668:83;29705:13;29738:5;29731:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29668:83;:::o;30580:161::-;30655:4;30672:39;30681:12;:10;:12::i;:::-;30695:7;30704:6;30672:8;:39::i;:::-;30729:4;30722:11;;30580:161;;;;:::o;31846:87::-;31888:7;31915:10;;31908:17;;31846:87;:::o;25932:51::-;;;:::o;29945:95::-;29998:7;30025;;30018:14;;29945:95;:::o;48113:201::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48214:5:::1;48199:11;:20;;48191:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48295:11;48280:12;:26;;;;48113:201:::0;:::o;47796:309::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47951:5:::1;47918:29;:38;;47910:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48068:29;48035:30;:62;;;;47796:309:::0;:::o;30749:313::-;30847:4;30864:36;30874:6;30882:9;30893:6;30864:9;:36::i;:::-;30911:121;30920:6;30928:12;:10;:12::i;:::-;30942:89;30980:6;30942:89;;;;;;;;;;;;;;;;;:11;:19;30954:6;30942:19;;;;;;;;;;;;;;;:33;30962:12;:10;:12::i;:::-;30942:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30911:8;:121::i;:::-;31050:4;31043:11;;30749:313;;;;;:::o;32770:253::-;32836:7;32875;;32864;:18;;32856:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32940:19;32963:10;:8;:10::i;:::-;32940:33;;32991:24;33003:11;32991:7;:11;;:24;;;;:::i;:::-;32984:31;;;32770:253;;;:::o;29854:83::-;29895:5;29920:9;;;;;;;;;;;29913:16;;29854:83;:::o;33485:479::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33567:11:::1;:20;33579:7;33567:20;;;;;;;;;;;;;;;;;;;;;;;;;33559:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33635:9;33630:327;33654:9;:16;;;;33650:1;:20;33630:327;;;33712:7;33696:23;;:9;33706:1;33696:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;33692:254;;;33755:9;33784:1;33765:9;:16;;;;:20;33755:31;;;;;;;;;;;;;;;;;;;;;;;;;33740:9;33750:1;33740:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33824:1;33805:7;:16;33813:7;33805:16;;;;;;;;;;;;;;;:20;;;;33867:5;33844:11;:20;33856:7;33844:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33891:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33925:5;;33692:254;33672:3;;;;;;;33630:327;;;;33485:479:::0;:::o;31070:218::-;31158:4;31175:83;31184:12;:10;:12::i;:::-;31198:7;31207:50;31246:10;31207:11;:25;31219:12;:10;:12::i;:::-;31207:25;;;;;;;;;;;;;;;:34;31233:7;31207:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31175:8;:83::i;:::-;31276:4;31269:11;;31070:218;;;;:::o;31941:377::-;31993:14;32010:12;:10;:12::i;:::-;31993:29;;32042:11;:19;32054:6;32042:19;;;;;;;;;;;;;;;;;;;;;;;;;32041:20;32033:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32122:15;32146:19;32157:7;32146:10;:19::i;:::-;32121:44;;;;;;;32194:28;32214:7;32194;:15;32202:6;32194:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32176:7;:15;32184:6;32176:15;;;;;;;;;;;;;;;:46;;;;32243:20;32255:7;32243;;:11;;:20;;;;:::i;:::-;32233:7;:30;;;;32287:23;32302:7;32287:10;;:14;;:23;;;;:::i;:::-;32274:10;:36;;;;31941:377;;;:::o;33972:352::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34067:42:::1;34056:53;;:7;:53;;;;34048:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34170:17;:26;34188:7;34170:26;;;;;;;;;;;;;;;;;;;;;;;;;34169:27;34161:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34271:4;34242:17;:26;34260:7;34242:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34286:16;34308:7;34286:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33972:352:::0;:::o;32326:436::-;32416:7;32455;;32444;:18;;32436:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32514:17;32509:246;;32549:15;32573:19;32584:7;32573:10;:19::i;:::-;32548:44;;;;;;;32614:7;32607:14;;;;;32509:246;32656:23;32687:19;32698:7;32687:10;:19::i;:::-;32654:52;;;;;;;32728:15;32721:22;;;32326:436;;;;;:::o;25990:38::-;;;:::o;26073:40::-;;;;;;;;;;;;;:::o;40433:156::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40487:23:::1;40513:24;40531:4;40513:9;:24::i;:::-;40487:50;;40548:33;40565:15;40548:16;:33::i;:::-;15048:1;40433:156::o:0;33031:446::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33126:42:::1;33115:53;;:7;:53;;;;33107:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33227:11;:20;33239:7;33227:20;;;;;;;;;;;;;;;;;;;;;;;;;33226:21;33218:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33312:1;33293:7;:16;33301:7;33293:16;;;;;;;;;;;;;;;;:20;33290:108;;;33349:37;33369:7;:16;33377:7;33369:16;;;;;;;;;;;;;;;;33349:19;:37::i;:::-;33330:7;:16;33338:7;33330:16;;;;;;;;;;;;;;;:56;;;;33290:108;33431:4;33408:11;:20;33420:7;33408:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33446:9;33461:7;33446:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33031:446:::0;:::o;35361:123::-;35425:4;35449:18;:27;35468:7;35449:27;;;;;;;;;;;;;;;;;;;;;;;;;35442:34;;35361:123;;;:::o;47179:169::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47265:1:::1;47255:6;:11;;:27;;;;;47280:2;47270:6;:12;;47255:27;47247:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;47334:6;47324:7;:16;;;;47179:169:::0;:::o;30048:198::-;30114:7;30138:11;:20;30150:7;30138:20;;;;;;;;;;;;;;;;;;;;;;;;;30134:49;;;30167:7;:16;30175:7;30167:16;;;;;;;;;;;;;;;;30160:23;;;;30134:49;30201:37;30221:7;:16;30229:7;30221:16;;;;;;;;;;;;;;;;30201:19;:37::i;:::-;30194:44;;30048:198;;;;:::o;15402:148::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15509:1:::1;15472:40;;15493:6;::::0;::::1;;;;;;;;15472:40;;;;;;;;;;;;15540:1;15523:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15402:148::o:0;34332:500::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34421:17:::1;:26;34439:7;34421:26;;;;;;;;;;;;;;;;;;;;;;;;;34413:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34494:9;34489:336;34513:16;:23;;;;34509:1;:27;34489:336;;;34585:7;34562:30;;:16;34579:1;34562:19;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;34558:256;;;34635:16;34678:1;34652:16;:23;;;;:27;34635:45;;;;;;;;;;;;;;;;;;;;;;;;;34613:16;34630:1;34613:19;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;34728:5;34699:17;:26;34717:7;34699:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34752:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34793:5;;34558:256;34538:3;;;;;;;34489:336;;;;34332:500:::0;:::o;31573:120::-;31641:4;31665:11;:20;31677:7;31665:20;;;;;;;;;;;;;;;;;;;;;;;;;31658:27;;31573:120;;;:::o;14768:79::-;14806:7;14833:6;;;;;;;;;;;14826:13;;14768:79;:::o;29759:87::-;29798:13;29831:7;29824:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29759:87;:::o;31296:269::-;31389:4;31406:129;31415:12;:10;:12::i;:::-;31429:7;31438:96;31477:15;31438:96;;;;;;;;;;;;;;;;;:11;:25;31450:12;:10;:12::i;:::-;31438:25;;;;;;;;;;;;;;;:34;31464:7;31438:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31406:8;:129::i;:::-;31553:4;31546:11;;31296:269;;;;:::o;47356:211::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47460:1:::1;47444:12;:17;;:39;;;;;47481:2;47465:12;:18;;47444:39;47436:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;47547:12;47531:13;:28;;;;47356:211:::0;:::o;16405:293::-;16475:10;16457:28;;:14;;;;;;;;;;;:28;;;16449:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:9;;16544:3;:15;16536:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16641:14;;;;;;;;;;;16612:44;;16633:6;;;;;;;;;;16612:44;;;;;;;;;;;;16676:14;;;;;;;;;;;16667:6;;:23;;;;;;;;;;;;;;;;;;16405:293::o;30254:167::-;30332:4;30349:42;30359:12;:10;:12::i;:::-;30373:9;30384:6;30349:9;:42::i;:::-;30409:4;30402:11;;30254:167;;;;:::o;31701:137::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31822:8:::1;31792:18;:27;31811:7;31792:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31701:137:::0;;:::o;15954:89::-;15999:7;16026:9;;16019:16;;15954:89;:::o;47575:211::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47679:1:::1;47663:12;:17;;:39;;;;;47700:2;47684:12;:18;;47663:39;47655:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;47766:12;47750:13;:28;;;;47575:211:::0;:::o;40764:148::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40882:22:::1;40858:21;;:46;;;;;;;;;;;;;;;;;;40764:148:::0;:::o;16119:214::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16200:6:::1;::::0;::::1;;;;;;;;16183:14;;:23;;;;;;;;;;;;;;;;;;16234:1;16217:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16265:4;16259:3;:10;16247:9;:22;;;;16322:1;16285:40;;16306:6;::::0;::::1;;;;;;;;16285:40;;;;;;;;;;;;16119:214:::0;:::o;30429:143::-;30510:7;30537:11;:18;30549:5;30537:18;;;;;;;;;;;;;;;:27;30556:7;30537:27;;;;;;;;;;;;;;;;30530:34;;30429:143;;;;:::o;15702:244::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15811:1:::1;15791:22;;:8;:22;;;;15783:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15901:8;15872:38;;15893:6;::::0;::::1;;;;;;;;15872:38;;;;;;;;;;;;15930:8;15921:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15702:244:::0;:::o;40597:159::-;14988:12;:10;:12::i;:::-;14978:22;;:6;;;;;;;;;;:22;;;14970:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40649:26:::1;40678:21;40649:50;;40710:38;40729:18;40710;:38::i;:::-;15048:1;40597:159::o:0;47061:110::-;47107:15;47142:21;47135:28;;47061:110;:::o;589:106::-;642:15;677:10;670:17;;589:106;:::o;35492:337::-;35602:1;35585:19;;:5;:19;;;;35577:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35683:1;35664:21;;:7;:21;;;;35656:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35767:6;35737:11;:18;35749:5;35737:18;;;;;;;;;;;;;;;:27;35756:7;35737:27;;;;;;;;;;;;;;;:36;;;;35805:7;35789:32;;35798:5;35789:32;;;35814:6;35789:32;;;;;;;;;;;;;;;;;;35492:337;;;:::o;35837:1880::-;35952:1;35934:20;;:6;:20;;;;35926:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36036:1;36015:23;;:9;:23;;;;36007:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36106:1;36097:6;:10;36089:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36173:17;:28;36191:9;36173:28;;;;;;;;;;;;;;;;;;;;;;;;;36172:29;36164:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36249:17;:29;36267:10;36249:29;;;;;;;;;;;;;;;;;;;;;;;;;36248:30;36240:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36332:7;:5;:7::i;:::-;36322:17;;:6;:17;;;;:41;;;;;36356:7;:5;:7::i;:::-;36343:20;;:9;:20;;;;36322:41;36319:134;;;36396:12;;36386:6;:22;;36378:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36319:134;36748:28;36779:24;36797:4;36779:9;:24::i;:::-;36748:55;;36843:12;;36819:20;:36;36816:112;;36904:12;;36881:35;;36816:112;36940:24;36991:30;;36967:20;:54;;36940:81;;37037:16;;;;;;;;;;;37036:17;:42;;;;;37057:21;;;;;;;;;;;37036:42;:65;;;;;37082:19;37036:65;:92;;;;;37115:13;37105:23;;:6;:23;;;;37036:92;37032:258;;;37168:30;;37145:53;;37242:36;37257:20;37242:14;:36::i;:::-;37032:258;37363:12;37378:4;37363:19;;37482:18;:26;37501:6;37482:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;37512:18;:29;37531:9;37512:29;;;;;;;;;;;;;;;;;;;;;;;;;37482:59;37479:105;;;37567:5;37557:15;;37479:105;37659:50;37674:6;37682:9;37693:6;37701:7;37659:14;:50::i;:::-;35837:1880;;;;;;:::o;4676:192::-;4762:7;4795:1;4790;:6;;4798:12;4782:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4822:9;4838:1;4834;:5;4822:17;;4859:1;4852:8;;;4676:192;;;;;:::o;46131:163::-;46172:7;46193:15;46210;46229:19;:17;:19::i;:::-;46192:56;;;;46266:20;46278:7;46266;:11;;:20;;;;:::i;:::-;46259:27;;;;46131:163;:::o;6054:132::-;6112:7;6139:39;6143:1;6146;6139:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6132:46;;6054:132;;;;:::o;3791:181::-;3849:7;3869:9;3885:1;3881;:5;3869:17;;3910:1;3905;:6;;3897:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:1;3956:8;;;3791:181;;;;:::o;44826:518::-;44885:7;44894;44903;44912;44921;44930;44951:23;44976:12;44990:30;45024:63;45036:7;45045;;45054:32;45072:13;;45054;;:17;;:32;;;;:::i;:::-;45024:11;:63::i;:::-;44950:137;;;;;;45098:19;45120:10;:8;:10::i;:::-;45098:32;;45142:15;45159:23;45184:12;45200:39;45212:7;45221:4;45227:11;45200;:39::i;:::-;45141:98;;;;;;45258:7;45267:15;45284:4;45290:15;45307:4;45313:22;45250:86;;;;;;;;;;;;;;;;;;;44826:518;;;;;;;:::o;4246:136::-;4304:7;4331:43;4335:1;4338;4331:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4324:50;;4246:136;;;;:::o;39054:589::-;39180:21;39218:1;39204:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39180:40;;39249:4;39231;39236:1;39231:7;;;;;;;;;;;;;:23;;;;;;;;;;;39275:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39265:4;39270:1;39265:7;;;;;;;;;;;;;:32;;;;;;;;;;;39310:62;39327:4;39342:15;39360:11;39310:8;:62::i;:::-;39411:15;:66;;;39492:11;39518:1;39562:4;39589;39609:15;39411:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39054:589;;:::o;40172:111::-;40235:23;;;;;;;;;;;:32;;:40;40268:6;40235:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40172:111;:::o;37725:1321::-;26547:4;26528:16;;:23;;;;;;;;;;;;;;;;;;37810:19:::1;37832:77;37876:32;37894:13;;37876;;:17;;:32;;;;:::i;:::-;37832:39;37857:13;;37832:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;37810:99;;37920:17;37940:37;37965:11;37940:20;:24;;:37;;;;:::i;:::-;37920:57;;38041:12;38056:16;38070:1;38056:9;:13;;:16;;;;:::i;:::-;38041:31;;38083:17;38103:19;38117:4;38103:9;:13;;:19;;;;:::i;:::-;38083:39;;38400:22;38425:21;38400:46;;38491:20;38514:21;38523:11;38514:4;:8;;:21;;;;:::i;:::-;38491:44;;38546:30;38563:12;38546:16;:30::i;:::-;38707:16;38726:41;38752:14;38726:21;:25;;:41;;;;:::i;:::-;38707:60;;38778:18;38799:36;38822:12;38799:18;38812:4;38799:8;:12;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;38778:57;;38885:35;38898:9;38909:10;38885:12;:35::i;:::-;38938:43;38953:4;38959:10;38971:9;38938:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38994:44;39013:24;39026:10;39013:8;:12;;:24;;;;:::i;:::-;38994:18;:44::i;:::-;26562:1;;;;;;;;26593:5:::0;26574:16;;:24;;;;;;;;;;;;;;;;;;37725:1321;:::o;40920:819::-;41032:7;41028:40;;41054:14;:12;:14::i;:::-;41028:40;41085:11;:19;41097:6;41085:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41109:11;:22;41121:9;41109:22;;;;;;;;;;;;;;;;;;;;;;;;;41108:23;41085:46;41081:597;;;41148:48;41170:6;41178:9;41189:6;41148:21;:48::i;:::-;41081:597;;;41219:11;:19;41231:6;41219:19;;;;;;;;;;;;;;;;;;;;;;;;;41218:20;:46;;;;;41242:11;:22;41254:9;41242:22;;;;;;;;;;;;;;;;;;;;;;;;;41218:46;41214:464;;;41281:46;41301:6;41309:9;41320:6;41281:19;:46::i;:::-;41214:464;;;41350:11;:19;41362:6;41350:19;;;;;;;;;;;;;;;;;;;;;;;;;41349:20;:47;;;;;41374:11;:22;41386:9;41374:22;;;;;;;;;;;;;;;;;;;;;;;;;41373:23;41349:47;41345:333;;;41413:44;41431:6;41439:9;41450:6;41413:17;:44::i;:::-;41345:333;;;41479:11;:19;41491:6;41479:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41502:11;:22;41514:9;41502:22;;;;;;;;;;;;;;;;;;;;;;;;;41479:45;41475:203;;;41541:48;41563:6;41571:9;41582:6;41541:21;:48::i;:::-;41475:203;;;41622:44;41640:6;41648:9;41659:6;41622:17;:44::i;:::-;41475:203;41345:333;41214:464;41081:597;41694:7;41690:41;;41716:15;:13;:15::i;:::-;41690:41;40920:819;;;;:::o;46302:555::-;46352:7;46361;46381:15;46399:7;;46381:25;;46417:15;46435:7;;46417:25;;46458:9;46453:289;46477:9;:16;;;;46473:1;:20;46453:289;;;46543:7;46519;:21;46527:9;46537:1;46527:12;;;;;;;;;;;;;;;;;;;;;;;;;46519:21;;;;;;;;;;;;;;;;:31;:66;;;;46578:7;46554;:21;46562:9;46572:1;46562:12;;;;;;;;;;;;;;;;;;;;;;;;;46554:21;;;;;;;;;;;;;;;;:31;46519:66;46515:97;;;46595:7;;46604;;46587:25;;;;;;;;;46515:97;46637:34;46649:7;:21;46657:9;46667:1;46657:12;;;;;;;;;;;;;;;;;;;;;;;;;46649:21;;;;;;;;;;;;;;;;46637:7;:11;;:34;;;;:::i;:::-;46627:44;;46696:34;46708:7;:21;46716:9;46726:1;46716:12;;;;;;;;;;;;;;;;;;;;;;;;;46708:21;;;;;;;;;;;;;;;;46696:7;:11;;:34;;;;:::i;:::-;46686:44;;46495:3;;;;;;;46453:289;;;;46766:20;46778:7;;46766;;:11;;:20;;;;:::i;:::-;46756:7;:30;46752:61;;;46796:7;;46805;;46788:25;;;;;;;;46752:61;46832:7;46841;46824:25;;;;;;46302:555;;;:::o;6671:278::-;6757:7;6789:1;6785;:5;6792:12;6777:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6816:9;6832:1;6828;:5;;;;;;6816:17;;6940:1;6933:8;;;6671:278;;;;;:::o;45352:429::-;45459:7;45468;45477;45497:12;45512:28;45536:3;45512:19;45524:6;45512:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;45497:43;;45551:30;45584:43;45623:3;45584:34;45596:21;45584:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;45551:76;;45638:23;45664:44;45686:21;45664:17;45676:4;45664:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;45638:70;;45727:15;45744:4;45750:22;45719:54;;;;;;;;;45352:429;;;;;;;:::o;45789:334::-;45884:7;45893;45902;45922:15;45940:24;45952:11;45940:7;:11;;:24;;;;:::i;:::-;45922:42;;45975:12;45990:21;45999:11;45990:4;:8;;:21;;;;:::i;:::-;45975:36;;46022:23;46048:17;46060:4;46048:7;:11;;:17;;;;:::i;:::-;46022:43;;46084:7;46093:15;46110:4;46076:39;;;;;;;;;45789:334;;;;;;;:::o;5118:471::-;5176:7;5426:1;5421;:6;5417:47;;;5451:1;5444:8;;;;5417:47;5476:9;5492:1;5488;:5;5476:17;;5521:1;5516;5512;:5;;;;;;:10;5504:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:1;5573:8;;;5118:471;;;;;:::o;39651:513::-;39799:62;39816:4;39831:15;39849:11;39799:8;:62::i;:::-;39904:15;:31;;;39943:9;39976:4;39996:11;40022:1;40065;40108:7;:5;:7::i;:::-;40130:15;39904:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39651:513;;:::o;34840:332::-;34897:1;34886:7;;:12;:34;;;;;34919:1;34902:13;;:18;34886:34;:56;;;;;34941:1;34924:13;;:18;34886:56;34883:68;;;34944:7;;34883:68;34981:7;;34963:15;:25;;;;35023:13;;34999:21;:37;;;;35071:13;;35047:21;:37;;;;35107:1;35097:7;:11;;;;35135:1;35119:13;:17;;;;35163:1;35147:13;:17;;;;34840:332;:::o;42894:590::-;42997:15;43014:23;43039:12;43053:23;43078:12;43092:27;43123:19;43134:7;43123:10;:19::i;:::-;42996:146;;;;;;;;;;;;43171:28;43191:7;43171;:15;43179:6;43171:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43153:7;:15;43161:6;43153:15;;;;;;;;;;;;;;;:46;;;;43228:28;43248:7;43228;:15;43236:6;43228:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43210:7;:15;43218:6;43210:15;;;;;;;;;;;;;;;:46;;;;43288:39;43311:15;43288:7;:18;43296:9;43288:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43267:7;:18;43275:9;43267:18;;;;;;;;;;;;;;;:60;;;;43338:44;43362:19;43338:23;:44::i;:::-;43393:23;43405:4;43411;43393:11;:23::i;:::-;43449:9;43432:44;;43441:6;43432:44;;;43460:15;43432:44;;;;;;;;;;;;;;;;;;42894:590;;;;;;;;;:::o;42284:602::-;42385:15;42402:23;42427:12;42441:23;42466:12;42480:27;42511:19;42522:7;42511:10;:19::i;:::-;42384:146;;;;;;;;;;;;42559:28;42579:7;42559;:15;42567:6;42559:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42541:7;:15;42549:6;42541:15;;;;;;;;;;;;;;;:46;;;;42619:39;42642:15;42619:7;:18;42627:9;42619:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42598:7;:18;42606:9;42598:18;;;;;;;;;;;;;;;:60;;;;42690:39;42713:15;42690:7;:18;42698:9;42690:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42669:7;:18;42677:9;42669:18;;;;;;;;;;;;;;;:60;;;;42740:44;42764:19;42740:23;:44::i;:::-;42795:23;42807:4;42813;42795:11;:23::i;:::-;42851:9;42834:44;;42843:6;42834:44;;;42862:15;42834:44;;;;;;;;;;;;;;;;;;42284:602;;;;;;;;;:::o;41747:529::-;41846:15;41863:23;41888:12;41902:23;41927:12;41941:27;41972:19;41983:7;41972:10;:19::i;:::-;41845:146;;;;;;;;;;;;42020:28;42040:7;42020;:15;42028:6;42020:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42002:7;:15;42010:6;42002:15;;;;;;;;;;;;;;;:46;;;;42080:39;42103:15;42080:7;:18;42088:9;42080:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42059:7;:18;42067:9;42059:18;;;;;;;;;;;;;;;:60;;;;42130:44;42154:19;42130:23;:44::i;:::-;42185:23;42197:4;42203;42185:11;:23::i;:::-;42241:9;42224:44;;42233:6;42224:44;;;42252:15;42224:44;;;;;;;;;;;;;;;;;;41747:529;;;;;;;;;:::o;43492:661::-;43595:15;43612:23;43637:12;43651:23;43676:12;43690:27;43721:19;43732:7;43721:10;:19::i;:::-;43594:146;;;;;;;;;;;;43769:28;43789:7;43769;:15;43777:6;43769:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43751:7;:15;43759:6;43751:15;;;;;;;;;;;;;;;:46;;;;43826:28;43846:7;43826;:15;43834:6;43826:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43808:7;:15;43816:6;43808:15;;;;;;;;;;;;;;;:46;;;;43886:39;43909:15;43886:7;:18;43894:9;43886:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43865:7;:18;43873:9;43865:18;;;;;;;;;;;;;;;:60;;;;43957:39;43980:15;43957:7;:18;43965:9;43957:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43936:7;:18;43944:9;43936:18;;;;;;;;;;;;;;;:60;;;;44007:44;44031:19;44007:23;:44::i;:::-;44062:23;44074:4;44080;44062:11;:23::i;:::-;44118:9;44101:44;;44110:6;44101:44;;;44129:15;44101:44;;;;;;;;;;;;;;;;;;43492:661;;;;;;;;;:::o;35180:173::-;35234:15;;35224:7;:25;;;;35276:21;;35260:13;:37;;;;35324:21;;35308:13;:37;;;;35180:173::o;44161:408::-;44242:19;44264:10;:8;:10::i;:::-;44242:32;;44285:27;44315:36;44339:11;44315:19;:23;;:36;;;;:::i;:::-;44285:66;;44387:47;44414:19;44387:7;:22;44403:4;44387:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;44362:7;:22;44378:4;44362:22;;;;;;;;;;;;;;;:72;;;;44448:11;:26;44468:4;44448:26;;;;;;;;;;;;;;;;;;;;;;;;;44445:116;;;44514:47;44541:19;44514:7;:22;44530:4;44514:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;44489:7;:22;44505:4;44489:22;;;;;;;;;;;;;;;:72;;;;44445:116;44161:408;;;:::o;44577:147::-;44655:17;44667:4;44655:7;;:11;;:17;;;;:::i;:::-;44645:7;:27;;;;44696:20;44711:4;44696:10;;:14;;:20;;;;:::i;:::-;44683:10;:33;;;;44577:147;;:::o
Swarm Source
ipfs://1b17819a30d22924f3b22b8657fe5f1fab1670aabf20c4fa8d90544856ca9474
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.