Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 587 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 16278364 | 622 days ago | IN | 0 ETH | 0.00097957 | ||||
Approve | 15932801 | 671 days ago | IN | 0 ETH | 0.00158985 | ||||
Approve | 15882347 | 678 days ago | IN | 0 ETH | 0.00050669 | ||||
Approve | 15701887 | 703 days ago | IN | 0 ETH | 0.00028263 | ||||
Approve | 15645595 | 711 days ago | IN | 0 ETH | 0.00046827 | ||||
Approve | 15639437 | 712 days ago | IN | 0 ETH | 0.00086736 | ||||
Approve | 15550377 | 724 days ago | IN | 0 ETH | 0.00024319 | ||||
Approve | 15519686 | 729 days ago | IN | 0 ETH | 0.00033063 | ||||
Approve | 15504684 | 731 days ago | IN | 0 ETH | 0.00072384 | ||||
Approve | 15503933 | 731 days ago | IN | 0 ETH | 0.00182355 | ||||
Approve | 15502543 | 732 days ago | IN | 0 ETH | 0.00086404 | ||||
Approve | 15497583 | 733 days ago | IN | 0 ETH | 0.00079681 | ||||
Approve | 15497478 | 733 days ago | IN | 0 ETH | 0.00190627 | ||||
Approve | 15496586 | 733 days ago | IN | 0 ETH | 0.00049732 | ||||
Approve | 15496268 | 733 days ago | IN | 0 ETH | 0.00043989 | ||||
Approve | 15496242 | 733 days ago | IN | 0 ETH | 0.00025822 | ||||
Approve | 15496197 | 733 days ago | IN | 0 ETH | 0.00042509 | ||||
Approve | 15496196 | 733 days ago | IN | 0 ETH | 0.00049343 | ||||
Approve | 15496183 | 733 days ago | IN | 0 ETH | 0.00051962 | ||||
Approve | 15496043 | 733 days ago | IN | 0 ETH | 0.00055106 | ||||
Approve | 15495910 | 733 days ago | IN | 0 ETH | 0.00035435 | ||||
Transfer | 15495888 | 733 days ago | IN | 0 ETH | 0.00044801 | ||||
Approve | 15495865 | 733 days ago | IN | 0 ETH | 0.00062385 | ||||
Approve | 15495845 | 733 days ago | IN | 0 ETH | 0.00085639 | ||||
Approve | 15495844 | 733 days ago | IN | 0 ETH | 0.00071928 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ShinSekai
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-08 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using this function * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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; } 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; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } 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; } contract ShinSekai is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxWalletToken = 1000000 * (10**9); uint256 public maxBuyTxAmount = 1000000 * (10**9); uint256 public maxSellTxAmount = 1000000 * (10**9); uint256 public swapTokensAtAmount = 800 * (10**9); uint256 public marketingFee = 20; address payable public marketingWallet = payable(0x3612E1A72f348cea8747Ca3aC5d908C76eeFda17); address public immutable USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; // record blacklisted addresses mapping(address => bool) public _isBlacklisted; event ExcludeFromFees(address indexed account, bool isExcluded); event SwapAndLiquifyEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("Shin Sekai", "SEKAI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createSupply(owner(), 3330330330 * (10**9)); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(from == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(amount <= maxBuyTxAmount, "amount must be less than or equal to maxBuyTxAmount"); } if(to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(amount <= maxSellTxAmount, "amount must be less than or equal to maxSellTxAmount"); } if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = swapTokensAtAmount; swapTokensForUSDC(contractTokenBalance, marketingWallet); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 fees; if(from==uniswapV2Pair || to==uniswapV2Pair) { fees = amount.mul(marketingFee).div(100); } amount = amount.sub(fees); if(fees > 0) { super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapTokensForUSDC(uint256 tokenAmount, address _to) private lockTheSwap{ address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, _to, block.timestamp ); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function blacklistAddress(address account, bool value) external onlyOwner{ _isBlacklisted[account] = value; } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function updateFee(uint256 _marketingFee) public onlyOwner { require(_marketingFee <= 20, "tax too high"); marketingFee = _marketingFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(200), "value too low"); } function setMarketingWallet(address payable _newAddress) external onlyOwner { marketingWallet = _newAddress; } function setMaxBuyTransaction(uint256 _maxBuyTx) external onlyOwner { maxBuyTxAmount = _maxBuyTx; require(maxBuyTxAmount >= totalSupply().div(300), "value too low"); } function setMaxSellTransaction(uint256 _maxSellTx) external onlyOwner { maxSellTxAmount = _maxSellTx; require(maxSellTxAmount >= totalSupply().div(300), "value too low"); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"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":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTx","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTx","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600660156101000a81548160ff02191690831515021790555066038d7ea4c6800060075566038d7ea4c6800060085566038d7ea4c6800060095564ba43b74000600a556014600b55733612e1a72f348cea8747ca3ac5d908c76eefda17600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff16815250348015620000f757600080fd5b506040518060400160405280600a81526020017f5368696e2053656b6169000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53454b41490000000000000000000000000000000000000000000000000000008152508160039081620001759190620009fb565b508060049081620001879190620009fb565b505050620001aa6200019e620003cd60201b60201c565b620003d560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000b4c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a0516040518363ffffffff1660e01b81526004016200027592919062000b8f565b6020604051808303816000875af115801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb919062000b4c565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000354620003466200049b60201b60201c565b6001620004c560201b60201c565b62000389600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004c560201b60201c565b6200039c306001620004c560201b60201c565b620003c5620003b06200049b60201b60201c565b672e37b5ca505c0400620005ff60201b60201c565b505062000da5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004d5620003cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004fb6200049b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054b9062000c1d565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620005f3919062000c5c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006689062000cc9565b60405180910390fd5b62000685600083836200077760201b60201c565b806002600082825462000699919062000d1a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006f0919062000d1a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000757919062000d88565b60405180910390a362000773600083836200077c60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200080357607f821691505b602082108103620008195762000818620007bb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000844565b6200088f868362000844565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008dc620008d6620008d084620008a7565b620008b1565b620008a7565b9050919050565b6000819050919050565b620008f883620008bb565b620009106200090782620008e3565b84845462000851565b825550505050565b600090565b6200092762000918565b62000934818484620008ed565b505050565b5b818110156200095c57620009506000826200091d565b6001810190506200093a565b5050565b601f821115620009ab5762000975816200081f565b620009808462000834565b8101602085101562000990578190505b620009a86200099f8562000834565b83018262000939565b50505b505050565b600082821c905092915050565b6000620009d060001984600802620009b0565b1980831691505092915050565b6000620009eb8383620009bd565b9150826002028217905092915050565b62000a068262000781565b67ffffffffffffffff81111562000a225762000a216200078c565b5b62000a2e8254620007ea565b62000a3b82828562000960565b600060209050601f83116001811462000a73576000841562000a5e578287015190505b62000a6a8582620009dd565b86555062000ada565b601f19841662000a83866200081f565b60005b8281101562000aad5784890151825560018201915060208501945060208101905062000a86565b8683101562000acd578489015162000ac9601f891682620009bd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b148262000ae7565b9050919050565b62000b268162000b07565b811462000b3257600080fd5b50565b60008151905062000b468162000b1b565b92915050565b60006020828403121562000b655762000b6462000ae2565b5b600062000b758482850162000b35565b91505092915050565b62000b898162000b07565b82525050565b600060408201905062000ba6600083018562000b7e565b62000bb5602083018462000b7e565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c0560208362000bbc565b915062000c128262000bcd565b602082019050919050565b6000602082019050818103600083015262000c388162000bf6565b9050919050565b60008115159050919050565b62000c568162000c3f565b82525050565b600060208201905062000c73600083018462000c4b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cb1601f8362000bbc565b915062000cbe8262000c79565b602082019050919050565b6000602082019050818103600083015262000ce48162000ca2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d2782620008a7565b915062000d3483620008a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d6c5762000d6b62000ceb565b5b828201905092915050565b62000d8281620008a7565b82525050565b600060208201905062000d9f600083018462000d77565b92915050565b60805160a05161381262000dfc60003960008181610faa01526125f2015260008181610bf501528181611b5e01528181611ca401528181611dea01528181611f81015281816120cb015261212001526138126000f3fe6080604052600436106102085760003560e01c8063750c11b611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b80639012c4a8116100e75780639012c4a8146105eb57806391d55f411461061457806395d89b411461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063750c11b61461054157806375f0a8741461056a57806389a30271146105955780638da5cb5b146105c05761020f565b8063455a43961161019b5780635c38ffe21161016a5780635c38ffe2146104705780635d098b38146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b8063455a4396146103b457806349bd5a5e146103dd5780634a74bb02146104085780634fbee193146104335761020f565b80631cdd3be3116101d75780631cdd3be3146102d257806323b872dd1461030f578063313ce5671461034c57806339509351146103775761020f565b806306fdde0314610214578063095ea7b31461023f5780631694505e1461027c57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612811565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128cc565b610901565b6040516102739190612927565b60405180910390f35b34801561028857600080fd5b5061029161091f565b60405161029e91906129a1565b60405180910390f35b3480156102b357600080fd5b506102bc610945565b6040516102c991906129cb565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906129e6565b61094f565b6040516103069190612927565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612a13565b61096f565b6040516103439190612927565b60405180910390f35b34801561035857600080fd5b50610361610a67565b60405161036e9190612a82565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906128cc565b610a70565b6040516103ab9190612927565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612ac9565b610b1c565b005b3480156103e957600080fd5b506103f2610bf3565b6040516103ff9190612b18565b60405180910390f35b34801561041457600080fd5b5061041d610c17565b60405161042a9190612927565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906129e6565b610c2a565b6040516104679190612927565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b33565b610c80565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9e565b610d66565b005b3480156104ce57600080fd5b506104d7610e26565b6040516104e491906129cb565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906129e6565b610e2c565b60405161052191906129cb565b60405180910390f35b34801561053657600080fd5b5061053f610e74565b005b34801561054d57600080fd5b5061056860048036038101906105639190612b33565b610efc565b005b34801561057657600080fd5b5061057f610f82565b60405161058c9190612bda565b60405180910390f35b3480156105a157600080fd5b506105aa610fa8565b6040516105b79190612b18565b60405180910390f35b3480156105cc57600080fd5b506105d5610fcc565b6040516105e29190612b18565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612b33565b610ff6565b005b34801561062057600080fd5b5061063b60048036038101906106369190612b33565b6110c0565b005b34801561064957600080fd5b506106526111a5565b60405161065f9190612811565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906128cc565b611237565b60405161069c9190612927565b60405180910390f35b3480156106b157600080fd5b506106ba611322565b6040516106c791906129cb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906128cc565b611328565b6040516107049190612927565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612b33565b611346565b005b34801561074257600080fd5b5061075d60048036038101906107589190612ac9565b61142c565b005b34801561076b57600080fd5b5061078660048036038101906107819190612bf5565b611551565b005b34801561079457600080fd5b5061079d611621565b6040516107aa91906129cb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612c22565b611627565b6040516107e791906129cb565b60405180910390f35b3480156107fc57600080fd5b506108056116ae565b60405161081291906129cb565b60405180910390f35b34801561082757600080fd5b506108306116b4565b60405161083d91906129cb565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906129e6565b6116ba565b005b60606003805461087e90612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612c91565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117b1565b84846117b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b600061097c848484611982565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c76117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90612d34565b60405180910390fd5b610a5b85610a536117b1565b8584036117b9565b60019150509392505050565b60006009905090565b6000610b12610a7d6117b1565b848460016000610a8b6117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0d9190612d83565b6117b9565b6001905092915050565b610b246117b1565b73ffffffffffffffffffffffffffffffffffffffff16610b42610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612e25565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c886117b1565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e25565b60405180910390fd5b80600981905550610d1f61012c610d11610945565b6121dd90919063ffffffff16565b6009541015610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90612e91565b60405180910390fd5b50565b610d6e6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612e25565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e7c6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612e25565b60405180910390fd5b610efa60006121f3565b565b610f046117b1565b73ffffffffffffffffffffffffffffffffffffffff16610f22610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612e25565b60405180910390fd5b80600a8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612e25565b60405180910390fd5b60148111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612efd565b60405180910390fd5b80600b8190555050565b6110c86117b1565b73ffffffffffffffffffffffffffffffffffffffff166110e6610fcc565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390612e25565b60405180910390fd5b8060078190555061115e60c8611150610945565b6121dd90919063ffffffff16565b60075410156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990612e91565b60405180910390fd5b50565b6060600480546111b490612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090612c91565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b600080600160006112466117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612f8f565b60405180910390fd5b61131761130e6117b1565b858584036117b9565b600191505092915050565b60085481565b600061133c6113356117b1565b8484611982565b6001905092915050565b61134e6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661136c610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612e25565b60405180910390fd5b806008819055506113e561012c6113d7610945565b6121dd90919063ffffffff16565b6008541015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e91565b60405180910390fd5b50565b6114346117b1565b73ffffffffffffffffffffffffffffffffffffffff16611452610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612e25565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115459190612927565b60405180910390a25050565b6115596117b1565b73ffffffffffffffffffffffffffffffffffffffff16611577610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490612e25565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116169190612927565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116c26117b1565b73ffffffffffffffffffffffffffffffffffffffff166116e0610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90612e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613021565b60405180910390fd5b6117ae816121f3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906130b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613145565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197591906129cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613269565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b045750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906132d5565b60405180910390fd5b60008103611b5c57611b57838360006122b9565b6121d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c015750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c575750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257600854811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613367565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d475750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de857600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906133f9565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e8d5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee35750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f47576000611ef383610e2c565b90506007548282611f049190612d83565b1115611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061348b565b60405180910390fd5b505b6000611f5230610e2c565b90506000600a548210159050808015611f785750600660149054906101000a900460ff16155b8015611fcf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611fe75750600660159054906101000a900460ff165b1561201e57600a54915061201d82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612538565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c25750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ca5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061216e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561219e5761219b606461218d600b548761274290919063ffffffff16565b6121dd90919063ffffffff16565b90505b6121b1818561275890919063ffffffff16565b935060008111156121c8576121c78630836122b9565b5b505b6121d58585856122b9565b50505b505050565b600081836121eb91906134da565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613269565b60405180910390fd5b6123a283838361276e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061357d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bb9190612d83565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906129cb565b60405180910390a3612532848484612773565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125705761256f61359d565b5b60405190808252806020026020018201604052801561259e5781602001602082028036833780820191505090505b50905030816000815181106125b6576125b56135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612625576126246135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061268c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856117b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b81526004016126f09594939291906136f4565b600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b50505050506000600660146101000a81548160ff0219169083151502179055505050565b60008183612750919061374e565b905092915050565b6000818361276691906137a8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b2578082015181840152602081019050612797565b838111156127c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006127e382612778565b6127ed8185612783565b93506127fd818560208601612794565b612806816127c7565b840191505092915050565b6000602082019050818103600083015261282b81846127d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286382612838565b9050919050565b61287381612858565b811461287e57600080fd5b50565b6000813590506128908161286a565b92915050565b6000819050919050565b6128a981612896565b81146128b457600080fd5b50565b6000813590506128c6816128a0565b92915050565b600080604083850312156128e3576128e2612833565b5b60006128f185828601612881565b9250506020612902858286016128b7565b9150509250929050565b60008115159050919050565b6129218161290c565b82525050565b600060208201905061293c6000830184612918565b92915050565b6000819050919050565b600061296761296261295d84612838565b612942565b612838565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b6129c581612896565b82525050565b60006020820190506129e060008301846129bc565b92915050565b6000602082840312156129fc576129fb612833565b5b6000612a0a84828501612881565b91505092915050565b600080600060608486031215612a2c57612a2b612833565b5b6000612a3a86828701612881565b9350506020612a4b86828701612881565b9250506040612a5c868287016128b7565b9150509250925092565b600060ff82169050919050565b612a7c81612a66565b82525050565b6000602082019050612a976000830184612a73565b92915050565b612aa68161290c565b8114612ab157600080fd5b50565b600081359050612ac381612a9d565b92915050565b60008060408385031215612ae057612adf612833565b5b6000612aee85828601612881565b9250506020612aff85828601612ab4565b9150509250929050565b612b1281612858565b82525050565b6000602082019050612b2d6000830184612b09565b92915050565b600060208284031215612b4957612b48612833565b5b6000612b57848285016128b7565b91505092915050565b6000612b6b82612838565b9050919050565b612b7b81612b60565b8114612b8657600080fd5b50565b600081359050612b9881612b72565b92915050565b600060208284031215612bb457612bb3612833565b5b6000612bc284828501612b89565b91505092915050565b612bd481612b60565b82525050565b6000602082019050612bef6000830184612bcb565b92915050565b600060208284031215612c0b57612c0a612833565b5b6000612c1984828501612ab4565b91505092915050565b60008060408385031215612c3957612c38612833565b5b6000612c4785828601612881565b9250506020612c5885828601612881565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca957607f821691505b602082108103612cbc57612cbb612c62565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d1e602883612783565b9150612d2982612cc2565b604082019050919050565b60006020820190508181036000830152612d4d81612d11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d8e82612896565b9150612d9983612896565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dce57612dcd612d54565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e0f602083612783565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612e7b600d83612783565b9150612e8682612e45565b602082019050919050565b60006020820190508181036000830152612eaa81612e6e565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ee7600c83612783565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f79602583612783565b9150612f8482612f1d565b604082019050919050565b60006020820190508181036000830152612fa881612f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061300b602683612783565b915061301682612faf565b604082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061309d602483612783565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061312f602283612783565b915061313a826130d3565b604082019050919050565b6000602082019050818103600083015261315e81613122565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c1602583612783565b91506131cc82613165565b604082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613253602383612783565b915061325e826131f7565b604082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006132bf601383612783565b91506132ca82613289565b602082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613351603383612783565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006133e3603483612783565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613475602483612783565b915061348082613419565b604082019050919050565b600060208201905081810360008301526134a481613468565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134e582612896565b91506134f083612896565b925082613500576134ff6134ab565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613567602683612783565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061362061361b613616846135fb565b612942565b612896565b9050919050565b61363081613605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61366b81612858565b82525050565b600061367d8383613662565b60208301905092915050565b6000602082019050919050565b60006136a182613636565b6136ab8185613641565b93506136b683613652565b8060005b838110156136e75781516136ce8882613671565b97506136d983613689565b9250506001810190506136ba565b5085935050505092915050565b600060a08201905061370960008301886129bc565b6137166020830187613627565b81810360408301526137288186613696565b90506137376060830185612b09565b61374460808301846129bc565b9695505050505050565b600061375982612896565b915061376483612896565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379d5761379c612d54565b5b828202905092915050565b60006137b382612896565b91506137be83612896565b9250828210156137d1576137d0612d54565b5b82820390509291505056fea26469706673582212202ca92e9e40ab67703b2e12b3b0197b5e5cfe15169b8e94b895f0956bebf2732064736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063750c11b611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b80639012c4a8116100e75780639012c4a8146105eb57806391d55f411461061457806395d89b411461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063750c11b61461054157806375f0a8741461056a57806389a30271146105955780638da5cb5b146105c05761020f565b8063455a43961161019b5780635c38ffe21161016a5780635c38ffe2146104705780635d098b38146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b8063455a4396146103b457806349bd5a5e146103dd5780634a74bb02146104085780634fbee193146104335761020f565b80631cdd3be3116101d75780631cdd3be3146102d257806323b872dd1461030f578063313ce5671461034c57806339509351146103775761020f565b806306fdde0314610214578063095ea7b31461023f5780631694505e1461027c57806318160ddd146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612811565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128cc565b610901565b6040516102739190612927565b60405180910390f35b34801561028857600080fd5b5061029161091f565b60405161029e91906129a1565b60405180910390f35b3480156102b357600080fd5b506102bc610945565b6040516102c991906129cb565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f491906129e6565b61094f565b6040516103069190612927565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190612a13565b61096f565b6040516103439190612927565b60405180910390f35b34801561035857600080fd5b50610361610a67565b60405161036e9190612a82565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906128cc565b610a70565b6040516103ab9190612927565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612ac9565b610b1c565b005b3480156103e957600080fd5b506103f2610bf3565b6040516103ff9190612b18565b60405180910390f35b34801561041457600080fd5b5061041d610c17565b60405161042a9190612927565b60405180910390f35b34801561043f57600080fd5b5061045a600480360381019061045591906129e6565b610c2a565b6040516104679190612927565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b33565b610c80565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9e565b610d66565b005b3480156104ce57600080fd5b506104d7610e26565b6040516104e491906129cb565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906129e6565b610e2c565b60405161052191906129cb565b60405180910390f35b34801561053657600080fd5b5061053f610e74565b005b34801561054d57600080fd5b5061056860048036038101906105639190612b33565b610efc565b005b34801561057657600080fd5b5061057f610f82565b60405161058c9190612bda565b60405180910390f35b3480156105a157600080fd5b506105aa610fa8565b6040516105b79190612b18565b60405180910390f35b3480156105cc57600080fd5b506105d5610fcc565b6040516105e29190612b18565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612b33565b610ff6565b005b34801561062057600080fd5b5061063b60048036038101906106369190612b33565b6110c0565b005b34801561064957600080fd5b506106526111a5565b60405161065f9190612811565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a91906128cc565b611237565b60405161069c9190612927565b60405180910390f35b3480156106b157600080fd5b506106ba611322565b6040516106c791906129cb565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906128cc565b611328565b6040516107049190612927565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612b33565b611346565b005b34801561074257600080fd5b5061075d60048036038101906107589190612ac9565b61142c565b005b34801561076b57600080fd5b5061078660048036038101906107819190612bf5565b611551565b005b34801561079457600080fd5b5061079d611621565b6040516107aa91906129cb565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612c22565b611627565b6040516107e791906129cb565b60405180910390f35b3480156107fc57600080fd5b506108056116ae565b60405161081291906129cb565b60405180910390f35b34801561082757600080fd5b506108306116b4565b60405161083d91906129cb565b60405180910390f35b34801561085257600080fd5b5061086d600480360381019061086891906129e6565b6116ba565b005b60606003805461087e90612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612c91565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117b1565b84846117b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b600061097c848484611982565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c76117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90612d34565b60405180910390fd5b610a5b85610a536117b1565b8584036117b9565b60019150509392505050565b60006009905090565b6000610b12610a7d6117b1565b848460016000610a8b6117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0d9190612d83565b6117b9565b6001905092915050565b610b246117b1565b73ffffffffffffffffffffffffffffffffffffffff16610b42610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612e25565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc81565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c886117b1565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e25565b60405180910390fd5b80600981905550610d1f61012c610d11610945565b6121dd90919063ffffffff16565b6009541015610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90612e91565b60405180910390fd5b50565b610d6e6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610d8c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990612e25565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e7c6117b1565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612e25565b60405180910390fd5b610efa60006121f3565b565b610f046117b1565b73ffffffffffffffffffffffffffffffffffffffff16610f22610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612e25565b60405180910390fd5b80600a8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612e25565b60405180910390fd5b60148111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90612efd565b60405180910390fd5b80600b8190555050565b6110c86117b1565b73ffffffffffffffffffffffffffffffffffffffff166110e6610fcc565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390612e25565b60405180910390fd5b8060078190555061115e60c8611150610945565b6121dd90919063ffffffff16565b60075410156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990612e91565b60405180910390fd5b50565b6060600480546111b490612c91565b80601f01602080910402602001604051908101604052809291908181526020018280546111e090612c91565b801561122d5780601f106112025761010080835404028352916020019161122d565b820191906000526020600020905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b600080600160006112466117b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612f8f565b60405180910390fd5b61131761130e6117b1565b858584036117b9565b600191505092915050565b60085481565b600061133c6113356117b1565b8484611982565b6001905092915050565b61134e6117b1565b73ffffffffffffffffffffffffffffffffffffffff1661136c610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990612e25565b60405180910390fd5b806008819055506113e561012c6113d7610945565b6121dd90919063ffffffff16565b6008541015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612e91565b60405180910390fd5b50565b6114346117b1565b73ffffffffffffffffffffffffffffffffffffffff16611452610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612e25565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115459190612927565b60405180910390a25050565b6115596117b1565b73ffffffffffffffffffffffffffffffffffffffff16611577610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490612e25565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116169190612927565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116c26117b1565b73ffffffffffffffffffffffffffffffffffffffff166116e0610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90612e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613021565b60405180910390fd5b6117ae816121f3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906130b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613145565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161197591906129cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e8906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613269565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b045750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906132d5565b60405180910390fd5b60008103611b5c57611b57838360006122b9565b6121d8565b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c015750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c575750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ca257600854811115611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613367565b60405180910390fd5b5b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d475750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9d5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611de857600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906133f9565b60405180910390fd5b5b7f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e8d5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee35750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f47576000611ef383610e2c565b90506007548282611f049190612d83565b1115611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061348b565b60405180910390fd5b505b6000611f5230610e2c565b90506000600a548210159050808015611f785750600660149054906101000a900460ff16155b8015611fcf57507f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611fe75750600660159054906101000a900460ff165b1561201e57600a54915061201d82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612538565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120c25750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ca5760007f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061216e57507f00000000000000000000000014fd9ab70a17e3c2fbd10090b6aa50f8d39eccfc73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561219e5761219b606461218d600b548761274290919063ffffffff16565b6121dd90919063ffffffff16565b90505b6121b1818561275890919063ffffffff16565b935060008111156121c8576121c78630836122b9565b5b505b6121d58585856122b9565b50505b505050565b600081836121eb91906134da565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906131d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90613269565b60405180910390fd5b6123a283838361276e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061357d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bb9190612d83565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906129cb565b60405180910390a3612532848484612773565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156125705761256f61359d565b5b60405190808252806020026020018201604052801561259e5781602001602082028036833780820191505090505b50905030816000815181106125b6576125b56135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110612625576126246135cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061268c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856117b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b81526004016126f09594939291906136f4565b600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b50505050506000600660146101000a81548160ff0219169083151502179055505050565b60008183612750919061374e565b905092915050565b6000818361276691906137a8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b2578082015181840152602081019050612797565b838111156127c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006127e382612778565b6127ed8185612783565b93506127fd818560208601612794565b612806816127c7565b840191505092915050565b6000602082019050818103600083015261282b81846127d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286382612838565b9050919050565b61287381612858565b811461287e57600080fd5b50565b6000813590506128908161286a565b92915050565b6000819050919050565b6128a981612896565b81146128b457600080fd5b50565b6000813590506128c6816128a0565b92915050565b600080604083850312156128e3576128e2612833565b5b60006128f185828601612881565b9250506020612902858286016128b7565b9150509250929050565b60008115159050919050565b6129218161290c565b82525050565b600060208201905061293c6000830184612918565b92915050565b6000819050919050565b600061296761296261295d84612838565b612942565b612838565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b6129c581612896565b82525050565b60006020820190506129e060008301846129bc565b92915050565b6000602082840312156129fc576129fb612833565b5b6000612a0a84828501612881565b91505092915050565b600080600060608486031215612a2c57612a2b612833565b5b6000612a3a86828701612881565b9350506020612a4b86828701612881565b9250506040612a5c868287016128b7565b9150509250925092565b600060ff82169050919050565b612a7c81612a66565b82525050565b6000602082019050612a976000830184612a73565b92915050565b612aa68161290c565b8114612ab157600080fd5b50565b600081359050612ac381612a9d565b92915050565b60008060408385031215612ae057612adf612833565b5b6000612aee85828601612881565b9250506020612aff85828601612ab4565b9150509250929050565b612b1281612858565b82525050565b6000602082019050612b2d6000830184612b09565b92915050565b600060208284031215612b4957612b48612833565b5b6000612b57848285016128b7565b91505092915050565b6000612b6b82612838565b9050919050565b612b7b81612b60565b8114612b8657600080fd5b50565b600081359050612b9881612b72565b92915050565b600060208284031215612bb457612bb3612833565b5b6000612bc284828501612b89565b91505092915050565b612bd481612b60565b82525050565b6000602082019050612bef6000830184612bcb565b92915050565b600060208284031215612c0b57612c0a612833565b5b6000612c1984828501612ab4565b91505092915050565b60008060408385031215612c3957612c38612833565b5b6000612c4785828601612881565b9250506020612c5885828601612881565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca957607f821691505b602082108103612cbc57612cbb612c62565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612d1e602883612783565b9150612d2982612cc2565b604082019050919050565b60006020820190508181036000830152612d4d81612d11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d8e82612896565b9150612d9983612896565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dce57612dcd612d54565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e0f602083612783565b9150612e1a82612dd9565b602082019050919050565b60006020820190508181036000830152612e3e81612e02565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612e7b600d83612783565b9150612e8682612e45565b602082019050919050565b60006020820190508181036000830152612eaa81612e6e565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ee7600c83612783565b9150612ef282612eb1565b602082019050919050565b60006020820190508181036000830152612f1681612eda565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f79602583612783565b9150612f8482612f1d565b604082019050919050565b60006020820190508181036000830152612fa881612f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061300b602683612783565b915061301682612faf565b604082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061309d602483612783565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061312f602283612783565b915061313a826130d3565b604082019050919050565b6000602082019050818103600083015261315e81613122565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131c1602583612783565b91506131cc82613165565b604082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613253602383612783565b915061325e826131f7565b604082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006132bf601383612783565b91506132ca82613289565b602082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613351603383612783565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006133e3603483612783565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613475602483612783565b915061348082613419565b604082019050919050565b600060208201905081810360008301526134a481613468565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134e582612896565b91506134f083612896565b925082613500576134ff6134ab565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613567602683612783565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061362061361b613616846135fb565b612942565b612896565b9050919050565b61363081613605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61366b81612858565b82525050565b600061367d8383613662565b60208301905092915050565b6000602082019050919050565b60006136a182613636565b6136ab8185613641565b93506136b683613652565b8060005b838110156136e75781516136ce8882613671565b97506136d983613689565b9250506001810190506136ba565b5085935050505092915050565b600060a08201905061370960008301886129bc565b6137166020830187613627565b81810360408301526137288186613696565b90506137376060830185612b09565b61374460808301846129bc565b9695505050505050565b600061375982612896565b915061376483612896565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379d5761379c612d54565b5b828202905092915050565b60006137b382612896565b91506137be83612896565b9250828210156137d1576137d0612d54565b5b82820390509291505056fea26469706673582212202ca92e9e40ab67703b2e12b3b0197b5e5cfe15169b8e94b895f0956bebf2732064736f6c634300080f0033
Deployed Bytecode Sourcemap
42171:6397:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7747:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42250:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6700:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43036:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8398:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6543:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9299:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47356:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42298:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42381:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47041:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48315:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47977:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42657:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17110:94;;;;;;;;;;;;;:::i;:::-;;47487:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42698:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42797:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16459:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47614:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47783:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5800:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10017:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42486:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7211:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48110:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46845:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47177:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42542:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7449:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42599:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42430;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17359:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5581:100;5635:13;5668:5;5661:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:100;:::o;7747:169::-;7830:4;7847:39;7856:12;:10;:12::i;:::-;7870:7;7879:6;7847:8;:39::i;:::-;7904:4;7897:11;;7747:169;;;;:::o;42250:41::-;;;;;;;;;;;;;:::o;6700:108::-;6761:7;6788:12;;6781:19;;6700:108;:::o;43036:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8398:492::-;8538:4;8555:36;8565:6;8573:9;8584:6;8555:9;:36::i;:::-;8604:24;8631:11;:19;8643:6;8631:19;;;;;;;;;;;;;;;:33;8651:12;:10;:12::i;:::-;8631:33;;;;;;;;;;;;;;;;8604:60;;8703:6;8683:16;:26;;8675:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8790:57;8799:6;8807:12;:10;:12::i;:::-;8840:6;8821:16;:25;8790:8;:57::i;:::-;8878:4;8871:11;;;8398:492;;;;;:::o;6543:92::-;6601:5;6626:1;6619:8;;6543:92;:::o;9299:215::-;9387:4;9404:80;9413:12;:10;:12::i;:::-;9427:7;9473:10;9436:11;:25;9448:12;:10;:12::i;:::-;9436:25;;;;;;;;;;;;;;;:34;9462:7;9436:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9404:8;:80::i;:::-;9502:4;9495:11;;9299:215;;;;:::o;47356:123::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47466:5:::1;47440:14;:23;47455:7;47440:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;47356:123:::0;;:::o;42298:38::-;;;:::o;42381:40::-;;;;;;;;;;;;;:::o;47041:125::-;47106:4;47130:19;:28;47150:7;47130:28;;;;;;;;;;;;;;;;;;;;;;;;;47123:35;;47041:125;;;:::o;48315:200::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48420:10:::1;48402:15;:28;;;;48468:22;48486:3;48468:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48449:15;;:41;;48441:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48315:200:::0;:::o;47977:123::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48082:11:::1;48064:15;;:29;;;;;;;;;;;;;;;;;;47977:123:::0;:::o;42657:32::-;;;;:::o;6871:127::-;6945:7;6972:9;:18;6982:7;6972:18;;;;;;;;;;;;;;;;6965:25;;6871:127;;;:::o;17110:94::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17175:21:::1;17193:1;17175:9;:21::i;:::-;17110:94::o:0;47487:119::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47588:10:::1;47567:18;:31;;;;47487:119:::0;:::o;42698:92::-;;;;;;;;;;;;;:::o;42797:74::-;;;:::o;16459:87::-;16505:7;16532:6;;;;;;;;;;;16525:13;;16459:87;:::o;47614:161::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:2:::1;47692:13;:19;;47684:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47754:13;47739:12;:28;;;;47614:161:::0;:::o;47783:186::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47876:9:::1;47859:14;:26;;;;47922:22;47940:3;47922:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47904:14;;:40;;47896:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47783:186:::0;:::o;5800:104::-;5856:13;5889:7;5882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:104;:::o;10017:413::-;10110:4;10127:24;10154:11;:25;10166:12;:10;:12::i;:::-;10154:25;;;;;;;;;;;;;;;:34;10180:7;10154:34;;;;;;;;;;;;;;;;10127:61;;10227:15;10207:16;:35;;10199:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10320:67;10329:12;:10;:12::i;:::-;10343:7;10371:15;10352:16;:34;10320:8;:67::i;:::-;10418:4;10411:11;;;10017:413;;;;:::o;42486:49::-;;;;:::o;7211:175::-;7297:4;7314:42;7324:12;:10;:12::i;:::-;7338:9;7349:6;7314:9;:42::i;:::-;7374:4;7367:11;;7211:175;;;;:::o;48110:197::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48214:9:::1;48197:14;:26;;;;48260:22;48278:3;48260:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48242:14;;:40;;48234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48110:197:::0;:::o;46845:184::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46961:8:::1;46930:19;:28;46950:7;46930:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;47003:7;46987:34;;;47012:8;46987:34;;;;;;:::i;:::-;;;;;;;;46845:184:::0;;:::o;47177:171::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47278:8:::1;47254:21;;:32;;;;;;;;;;;;;;;;;;47302:38;47331:8;47302:38;;;;;;:::i;:::-;;;;;;;;47177:171:::0;:::o;42542:50::-;;;;:::o;7449:151::-;7538:7;7565:11;:18;7577:5;7565:18;;;;;;;;;;;;;;;:27;7584:7;7565:27;;;;;;;;;;;;;;;;7558:34;;7449:151;;;;:::o;42599:49::-;;;;:::o;42430:::-;;;;:::o;17359:192::-;16690:12;:10;:12::i;:::-;16679:23;;:7;:5;:7::i;:::-;:23;;;16671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17468:1:::1;17448:22;;:8;:22;;::::0;17440:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17524:19;17534:8;17524:9;:19::i;:::-;17359:192:::0;:::o;3395:98::-;3448:7;3475:10;3468:17;;3395:98;:::o;13709:380::-;13862:1;13845:19;;:5;:19;;;13837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13943:1;13924:21;;:7;:21;;;13916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14027:6;13997:11;:18;14009:5;13997:18;;;;;;;;;;;;;;;:27;14016:7;13997:27;;;;;;;;;;;;;;;:36;;;;14065:7;14049:32;;14058:5;14049:32;;;14074:6;14049:32;;;;;;:::i;:::-;;;;;;;;13709:380;;;:::o;44112:2220::-;44260:1;44244:18;;:4;:18;;;44236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44337:1;44323:16;;:2;:16;;;44315:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44399:14;:20;44414:4;44399:20;;;;;;;;;;;;;;;;;;;;;;;;;44398:21;:44;;;;;44424:14;:18;44439:2;44424:18;;;;;;;;;;;;;;;;;;;;;;;;;44423:19;44398:44;44390:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44492:1;44482:6;:11;44479:92;;44510:28;44526:4;44532:2;44536:1;44510:15;:28::i;:::-;44553:7;;44479:92;44594:13;44586:21;;:4;:21;;;:51;;;;;44612:19;:25;44632:4;44612:25;;;;;;;;;;;;;;;;;;;;;;;;;44611:26;44586:51;:79;;;;;44642:19;:23;44662:2;44642:23;;;;;;;;;;;;;;;;;;;;;;;;;44641:24;44586:79;44583:209;;;44710:14;;44700:6;:24;;44692:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;44583:209;44814:13;44808:19;;:2;:19;;;:49;;;;;44832:19;:25;44852:4;44832:25;;;;;;;;;;;;;;;;;;;;;;;;;44831:26;44808:49;:77;;;;;44862:19;:23;44882:2;44862:23;;;;;;;;;;;;;;;;;;;;;;;;;44861:24;44808:77;44805:210;;;44931:15;;44921:6;:25;;44913:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44805:210;45036:13;45030:19;;:4;:19;;;:49;;;;;45054:19;:25;45074:4;45054:25;;;;;;;;;;;;;;;;;;;;;;;;;45053:26;45030:49;:77;;;;;45084:19;:23;45104:2;45084:23;;;;;;;;;;;;;;;;;;;;;;;;;45083:24;45030:77;45027:281;;;45133:32;45168:13;45178:2;45168:9;:13::i;:::-;45133:48;;45241:14;;45231:6;45204:24;:33;;;;:::i;:::-;:51;;45196:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:190;45027:281;45317:28;45348:24;45366:4;45348:9;:24::i;:::-;45317:55;;45393:24;45444:18;;45420:20;:42;;45393:69;;45499:19;:53;;;;;45536:16;;;;;;;;;;;45535:17;45499:53;:87;;;;;45573:13;45569:17;;:2;:17;;;45499:87;:126;;;;;45604:21;;;;;;;;;;;45499:126;45482:294;;;45675:18;;45652:41;;45708:56;45726:20;45748:15;;;;;;;;;;;45708:17;:56::i;:::-;45482:294;45878:19;:25;45898:4;45878:25;;;;;;;;;;;;;;;;;;;;;;;;;45877:26;:54;;;;;45908:19;:23;45928:2;45908:23;;;;;;;;;;;;;;;;;;;;;;;;;45907:24;45877:54;45874:403;;;45948:12;45994:13;45988:19;;:4;:19;;;:40;;;;46015:13;46011:17;;:2;:17;;;45988:40;45985:120;;;46056:33;46085:3;46056:24;46067:12;;46056:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46049:40;;45985:120;46127:16;46138:4;46127:6;:10;;:16;;;;:::i;:::-;46118:25;;46170:1;46163:4;:8;46160:91;;;46192:42;46208:4;46222;46229;46192:15;:42::i;:::-;46160:91;45933:344;45874:403;46289:33;46305:4;46311:2;46315:6;46289:15;:33::i;:::-;44225:2107;;44112:2220;;;;:::o;28750:98::-;28808:7;28839:1;28835;:5;;;;:::i;:::-;28828:12;;28750:98;;;;:::o;17559:173::-;17615:16;17634:6;;;;;;;;;;;17615:25;;17660:8;17651:6;;:17;;;;;;;;;;;;;;;;;;17715:8;17684:40;;17705:8;17684:40;;;;;;;;;;;;17604:128;17559:173;:::o;10920:733::-;11078:1;11060:20;;:6;:20;;;11052:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11162:1;11141:23;;:9;:23;;;11133:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11217:47;11238:6;11246:9;11257:6;11217:20;:47::i;:::-;11277:21;11301:9;:17;11311:6;11301:17;;;;;;;;;;;;;;;;11277:41;;11354:6;11337:13;:23;;11329:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11475:6;11459:13;:22;11439:9;:17;11449:6;11439:17;;;;;;;;;;;;;;;:42;;;;11527:6;11503:9;:20;11513:9;11503:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11568:9;11551:35;;11560:6;11551:35;;;11579:6;11551:35;;;;;;:::i;:::-;;;;;;;;11599:46;11619:6;11627:9;11638:6;11599:19;:46::i;:::-;11041:612;10920:733;;;:::o;46340:497::-;43269:4;43250:16;;:23;;;;;;;;;;;;;;;;;;46431:21:::1;46469:1;46455:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46431:40;;46500:4;46482;46487:1;46482:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;46526:4;46516;46521:1;46516:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;46541:62;46558:4;46573:15;;;;;;;;;;;46591:11;46541:8;:62::i;:::-;46640:15;;;;;;;;;;;:69;;;46724:11;46750:1;46766:4;46785:3;46803:15;46640:189;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46420:417;43315:5:::0;43296:16;;:24;;;;;;;;;;;;;;;;;;46340:497;;:::o;28351:98::-;28409:7;28440:1;28436;:5;;;;:::i;:::-;28429:12;;28351:98;;;;:::o;27994:::-;28052:7;28083:1;28079;:5;;;;:::i;:::-;28072:12;;27994:98;;;;:::o;14689:125::-;;;;:::o;15418:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:116::-;6284:21;6299:5;6284:21;:::i;:::-;6277:5;6274:32;6264:60;;6320:1;6317;6310:12;6264:60;6214:116;:::o;6336:133::-;6379:5;6417:6;6404:20;6395:29;;6433:30;6457:5;6433:30;:::i;:::-;6336:133;;;;:::o;6475:468::-;6540:6;6548;6597:2;6585:9;6576:7;6572:23;6568:32;6565:119;;;6603:79;;:::i;:::-;6565:119;6723:1;6748:53;6793:7;6784:6;6773:9;6769:22;6748:53;:::i;:::-;6738:63;;6694:117;6850:2;6876:50;6918:7;6909:6;6898:9;6894:22;6876:50;:::i;:::-;6866:60;;6821:115;6475:468;;;;;:::o;6949:118::-;7036:24;7054:5;7036:24;:::i;:::-;7031:3;7024:37;6949:118;;:::o;7073:222::-;7166:4;7204:2;7193:9;7189:18;7181:26;;7217:71;7285:1;7274:9;7270:17;7261:6;7217:71;:::i;:::-;7073:222;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:104::-;7681:7;7710:24;7728:5;7710:24;:::i;:::-;7699:35;;7636:104;;;:::o;7746:138::-;7827:32;7853:5;7827:32;:::i;:::-;7820:5;7817:43;7807:71;;7874:1;7871;7864:12;7807:71;7746:138;:::o;7890:155::-;7944:5;7982:6;7969:20;7960:29;;7998:41;8033:5;7998:41;:::i;:::-;7890:155;;;;:::o;8051:345::-;8118:6;8167:2;8155:9;8146:7;8142:23;8138:32;8135:119;;;8173:79;;:::i;:::-;8135:119;8293:1;8318:61;8371:7;8362:6;8351:9;8347:22;8318:61;:::i;:::-;8308:71;;8264:125;8051:345;;;;:::o;8402:142::-;8505:32;8531:5;8505:32;:::i;:::-;8500:3;8493:45;8402:142;;:::o;8550:254::-;8659:4;8697:2;8686:9;8682:18;8674:26;;8710:87;8794:1;8783:9;8779:17;8770:6;8710:87;:::i;:::-;8550:254;;;;:::o;8810:323::-;8866:6;8915:2;8903:9;8894:7;8890:23;8886:32;8883:119;;;8921:79;;:::i;:::-;8883:119;9041:1;9066:50;9108:7;9099:6;9088:9;9084:22;9066:50;:::i;:::-;9056:60;;9012:114;8810:323;;;;:::o;9139:474::-;9207:6;9215;9264:2;9252:9;9243:7;9239:23;9235:32;9232:119;;;9270:79;;:::i;:::-;9232:119;9390:1;9415:53;9460:7;9451:6;9440:9;9436:22;9415:53;:::i;:::-;9405:63;;9361:117;9517:2;9543:53;9588:7;9579:6;9568:9;9564:22;9543:53;:::i;:::-;9533:63;;9488:118;9139:474;;;;;:::o;9619:180::-;9667:77;9664:1;9657:88;9764:4;9761:1;9754:15;9788:4;9785:1;9778:15;9805:320;9849:6;9886:1;9880:4;9876:12;9866:22;;9933:1;9927:4;9923:12;9954:18;9944:81;;10010:4;10002:6;9998:17;9988:27;;9944:81;10072:2;10064:6;10061:14;10041:18;10038:38;10035:84;;10091:18;;:::i;:::-;10035:84;9856:269;9805:320;;;:::o;10131:227::-;10271:34;10267:1;10259:6;10255:14;10248:58;10340:10;10335:2;10327:6;10323:15;10316:35;10131:227;:::o;10364:366::-;10506:3;10527:67;10591:2;10586:3;10527:67;:::i;:::-;10520:74;;10603:93;10692:3;10603:93;:::i;:::-;10721:2;10716:3;10712:12;10705:19;;10364:366;;;:::o;10736:419::-;10902:4;10940:2;10929:9;10925:18;10917:26;;10989:9;10983:4;10979:20;10975:1;10964:9;10960:17;10953:47;11017:131;11143:4;11017:131;:::i;:::-;11009:139;;10736:419;;;:::o;11161:180::-;11209:77;11206:1;11199:88;11306:4;11303:1;11296:15;11330:4;11327:1;11320:15;11347:305;11387:3;11406:20;11424:1;11406:20;:::i;:::-;11401:25;;11440:20;11458:1;11440:20;:::i;:::-;11435:25;;11594:1;11526:66;11522:74;11519:1;11516:81;11513:107;;;11600:18;;:::i;:::-;11513:107;11644:1;11641;11637:9;11630:16;;11347:305;;;;:::o;11658:182::-;11798:34;11794:1;11786:6;11782:14;11775:58;11658:182;:::o;11846:366::-;11988:3;12009:67;12073:2;12068:3;12009:67;:::i;:::-;12002:74;;12085:93;12174:3;12085:93;:::i;:::-;12203:2;12198:3;12194:12;12187:19;;11846:366;;;:::o;12218:419::-;12384:4;12422:2;12411:9;12407:18;12399:26;;12471:9;12465:4;12461:20;12457:1;12446:9;12442:17;12435:47;12499:131;12625:4;12499:131;:::i;:::-;12491:139;;12218:419;;;:::o;12643:163::-;12783:15;12779:1;12771:6;12767:14;12760:39;12643:163;:::o;12812:366::-;12954:3;12975:67;13039:2;13034:3;12975:67;:::i;:::-;12968:74;;13051:93;13140:3;13051:93;:::i;:::-;13169:2;13164:3;13160:12;13153:19;;12812:366;;;:::o;13184:419::-;13350:4;13388:2;13377:9;13373:18;13365:26;;13437:9;13431:4;13427:20;13423:1;13412:9;13408:17;13401:47;13465:131;13591:4;13465:131;:::i;:::-;13457:139;;13184:419;;;:::o;13609:162::-;13749:14;13745:1;13737:6;13733:14;13726:38;13609:162;:::o;13777:366::-;13919:3;13940:67;14004:2;13999:3;13940:67;:::i;:::-;13933:74;;14016:93;14105:3;14016:93;:::i;:::-;14134:2;14129:3;14125:12;14118:19;;13777:366;;;:::o;14149:419::-;14315:4;14353:2;14342:9;14338:18;14330:26;;14402:9;14396:4;14392:20;14388:1;14377:9;14373:17;14366:47;14430:131;14556:4;14430:131;:::i;:::-;14422:139;;14149:419;;;:::o;14574:224::-;14714:34;14710:1;14702:6;14698:14;14691:58;14783:7;14778:2;14770:6;14766:15;14759:32;14574:224;:::o;14804:366::-;14946:3;14967:67;15031:2;15026:3;14967:67;:::i;:::-;14960:74;;15043:93;15132:3;15043:93;:::i;:::-;15161:2;15156:3;15152:12;15145:19;;14804:366;;;:::o;15176:419::-;15342:4;15380:2;15369:9;15365:18;15357:26;;15429:9;15423:4;15419:20;15415:1;15404:9;15400:17;15393:47;15457:131;15583:4;15457:131;:::i;:::-;15449:139;;15176:419;;;:::o;15601:225::-;15741:34;15737:1;15729:6;15725:14;15718:58;15810:8;15805:2;15797:6;15793:15;15786:33;15601:225;:::o;15832:366::-;15974:3;15995:67;16059:2;16054:3;15995:67;:::i;:::-;15988:74;;16071:93;16160:3;16071:93;:::i;:::-;16189:2;16184:3;16180:12;16173:19;;15832:366;;;:::o;16204:419::-;16370:4;16408:2;16397:9;16393:18;16385:26;;16457:9;16451:4;16447:20;16443:1;16432:9;16428:17;16421:47;16485:131;16611:4;16485:131;:::i;:::-;16477:139;;16204:419;;;:::o;16629:223::-;16769:34;16765:1;16757:6;16753:14;16746:58;16838:6;16833:2;16825:6;16821:15;16814:31;16629:223;:::o;16858:366::-;17000:3;17021:67;17085:2;17080:3;17021:67;:::i;:::-;17014:74;;17097:93;17186:3;17097:93;:::i;:::-;17215:2;17210:3;17206:12;17199:19;;16858:366;;;:::o;17230:419::-;17396:4;17434:2;17423:9;17419:18;17411:26;;17483:9;17477:4;17473:20;17469:1;17458:9;17454:17;17447:47;17511:131;17637:4;17511:131;:::i;:::-;17503:139;;17230:419;;;:::o;17655:221::-;17795:34;17791:1;17783:6;17779:14;17772:58;17864:4;17859:2;17851:6;17847:15;17840:29;17655:221;:::o;17882:366::-;18024:3;18045:67;18109:2;18104:3;18045:67;:::i;:::-;18038:74;;18121:93;18210:3;18121:93;:::i;:::-;18239:2;18234:3;18230:12;18223:19;;17882:366;;;:::o;18254:419::-;18420:4;18458:2;18447:9;18443:18;18435:26;;18507:9;18501:4;18497:20;18493:1;18482:9;18478:17;18471:47;18535:131;18661:4;18535:131;:::i;:::-;18527:139;;18254:419;;;:::o;18679:224::-;18819:34;18815:1;18807:6;18803:14;18796:58;18888:7;18883:2;18875:6;18871:15;18864:32;18679:224;:::o;18909:366::-;19051:3;19072:67;19136:2;19131:3;19072:67;:::i;:::-;19065:74;;19148:93;19237:3;19148:93;:::i;:::-;19266:2;19261:3;19257:12;19250:19;;18909:366;;;:::o;19281:419::-;19447:4;19485:2;19474:9;19470:18;19462:26;;19534:9;19528:4;19524:20;19520:1;19509:9;19505:17;19498:47;19562:131;19688:4;19562:131;:::i;:::-;19554:139;;19281:419;;;:::o;19706:222::-;19846:34;19842:1;19834:6;19830:14;19823:58;19915:5;19910:2;19902:6;19898:15;19891:30;19706:222;:::o;19934:366::-;20076:3;20097:67;20161:2;20156:3;20097:67;:::i;:::-;20090:74;;20173:93;20262:3;20173:93;:::i;:::-;20291:2;20286:3;20282:12;20275:19;;19934:366;;;:::o;20306:419::-;20472:4;20510:2;20499:9;20495:18;20487:26;;20559:9;20553:4;20549:20;20545:1;20534:9;20530:17;20523:47;20587:131;20713:4;20587:131;:::i;:::-;20579:139;;20306:419;;;:::o;20731:169::-;20871:21;20867:1;20859:6;20855:14;20848:45;20731:169;:::o;20906:366::-;21048:3;21069:67;21133:2;21128:3;21069:67;:::i;:::-;21062:74;;21145:93;21234:3;21145:93;:::i;:::-;21263:2;21258:3;21254:12;21247:19;;20906:366;;;:::o;21278:419::-;21444:4;21482:2;21471:9;21467:18;21459:26;;21531:9;21525:4;21521:20;21517:1;21506:9;21502:17;21495:47;21559:131;21685:4;21559:131;:::i;:::-;21551:139;;21278:419;;;:::o;21703:238::-;21843:34;21839:1;21831:6;21827:14;21820:58;21912:21;21907:2;21899:6;21895:15;21888:46;21703:238;:::o;21947:366::-;22089:3;22110:67;22174:2;22169:3;22110:67;:::i;:::-;22103:74;;22186:93;22275:3;22186:93;:::i;:::-;22304:2;22299:3;22295:12;22288:19;;21947:366;;;:::o;22319:419::-;22485:4;22523:2;22512:9;22508:18;22500:26;;22572:9;22566:4;22562:20;22558:1;22547:9;22543:17;22536:47;22600:131;22726:4;22600:131;:::i;:::-;22592:139;;22319:419;;;:::o;22744:239::-;22884:34;22880:1;22872:6;22868:14;22861:58;22953:22;22948:2;22940:6;22936:15;22929:47;22744:239;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:223::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:6;23990:2;23982:6;23978:15;23971:31;23786:223;:::o;24015:366::-;24157:3;24178:67;24242:2;24237:3;24178:67;:::i;:::-;24171:74;;24254:93;24343:3;24254:93;:::i;:::-;24372:2;24367:3;24363:12;24356:19;;24015:366;;;:::o;24387:419::-;24553:4;24591:2;24580:9;24576:18;24568:26;;24640:9;24634:4;24630:20;24626:1;24615:9;24611:17;24604:47;24668:131;24794:4;24668:131;:::i;:::-;24660:139;;24387:419;;;:::o;24812:180::-;24860:77;24857:1;24850:88;24957:4;24954:1;24947:15;24981:4;24978:1;24971:15;24998:185;25038:1;25055:20;25073:1;25055:20;:::i;:::-;25050:25;;25089:20;25107:1;25089:20;:::i;:::-;25084:25;;25128:1;25118:35;;25133:18;;:::i;:::-;25118:35;25175:1;25172;25168:9;25163:14;;24998:185;;;;:::o;25189:225::-;25329:34;25325:1;25317:6;25313:14;25306:58;25398:8;25393:2;25385:6;25381:15;25374:33;25189:225;:::o;25420:366::-;25562:3;25583:67;25647:2;25642:3;25583:67;:::i;:::-;25576:74;;25659:93;25748:3;25659:93;:::i;:::-;25777:2;25772:3;25768:12;25761:19;;25420:366;;;:::o;25792:419::-;25958:4;25996:2;25985:9;25981:18;25973:26;;26045:9;26039:4;26035:20;26031:1;26020:9;26016:17;26009:47;26073:131;26199:4;26073:131;:::i;:::-;26065:139;;25792:419;;;:::o;26217:180::-;26265:77;26262:1;26255:88;26362:4;26359:1;26352:15;26386:4;26383:1;26376:15;26403:180;26451:77;26448:1;26441:88;26548:4;26545:1;26538:15;26572:4;26569:1;26562:15;26589:85;26634:7;26663:5;26652:16;;26589:85;;;:::o;26680:158::-;26738:9;26771:61;26789:42;26798:32;26824:5;26798:32;:::i;:::-;26789:42;:::i;:::-;26771:61;:::i;:::-;26758:74;;26680:158;;;:::o;26844:147::-;26939:45;26978:5;26939:45;:::i;:::-;26934:3;26927:58;26844:147;;:::o;26997:114::-;27064:6;27098:5;27092:12;27082:22;;26997:114;;;:::o;27117:184::-;27216:11;27250:6;27245:3;27238:19;27290:4;27285:3;27281:14;27266:29;;27117:184;;;;:::o;27307:132::-;27374:4;27397:3;27389:11;;27427:4;27422:3;27418:14;27410:22;;27307:132;;;:::o;27445:108::-;27522:24;27540:5;27522:24;:::i;:::-;27517:3;27510:37;27445:108;;:::o;27559:179::-;27628:10;27649:46;27691:3;27683:6;27649:46;:::i;:::-;27727:4;27722:3;27718:14;27704:28;;27559:179;;;;:::o;27744:113::-;27814:4;27846;27841:3;27837:14;27829:22;;27744:113;;;:::o;27893:732::-;28012:3;28041:54;28089:5;28041:54;:::i;:::-;28111:86;28190:6;28185:3;28111:86;:::i;:::-;28104:93;;28221:56;28271:5;28221:56;:::i;:::-;28300:7;28331:1;28316:284;28341:6;28338:1;28335:13;28316:284;;;28417:6;28411:13;28444:63;28503:3;28488:13;28444:63;:::i;:::-;28437:70;;28530:60;28583:6;28530:60;:::i;:::-;28520:70;;28376:224;28363:1;28360;28356:9;28351:14;;28316:284;;;28320:14;28616:3;28609:10;;28017:608;;;27893:732;;;;:::o;28631:831::-;28894:4;28932:3;28921:9;28917:19;28909:27;;28946:71;29014:1;29003:9;28999:17;28990:6;28946:71;:::i;:::-;29027:80;29103:2;29092:9;29088:18;29079:6;29027:80;:::i;:::-;29154:9;29148:4;29144:20;29139:2;29128:9;29124:18;29117:48;29182:108;29285:4;29276:6;29182:108;:::i;:::-;29174:116;;29300:72;29368:2;29357:9;29353:18;29344:6;29300:72;:::i;:::-;29382:73;29450:3;29439:9;29435:19;29426:6;29382:73;:::i;:::-;28631:831;;;;;;;;:::o;29468:348::-;29508:7;29531:20;29549:1;29531:20;:::i;:::-;29526:25;;29565:20;29583:1;29565:20;:::i;:::-;29560:25;;29753:1;29685:66;29681:74;29678:1;29675:81;29670:1;29663:9;29656:17;29652:105;29649:131;;;29760:18;;:::i;:::-;29649:131;29808:1;29805;29801:9;29790:20;;29468:348;;;;:::o;29822:191::-;29862:4;29882:20;29900:1;29882:20;:::i;:::-;29877:25;;29916:20;29934:1;29916:20;:::i;:::-;29911:25;;29955:1;29952;29949:8;29946:34;;;29960:18;;:::i;:::-;29946:34;30005:1;30002;29998:9;29990:17;;29822:191;;;;:::o
Swarm Source
ipfs://2ca92e9e40ab67703b2e12b3b0197b5e5cfe15169b8e94b895f0956bebf27320
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,347.99 | 0.08 | $187.84 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.