ERC-20
Overview
Max Total Supply
1,000,000 GENBU
Holders
12
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
20,977.534122172 GENBUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DejitaruGenbu
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-14 */ /** Genbu the mighty dragon is he to reunite with Tsuka */ // 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); } } contract DejitaruGenbu 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 liquidityFee = 1; uint256 public marketingFee = 4; address payable public marketingWallet = payable(0xB5968E916D15D4eb34c3688a2e1D33B57f132311); // 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); event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("Dejitaru Genbu", "GENBU") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); 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(), 1000000 * (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; swapAndLiquify(contractTokenBalance); } // 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(liquidityFee.add(marketingFee)).div(100); } amount = amount.sub(fees); if(fees > 0) { super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee)); // split the Liquidity token balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send to wallets swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), 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 setFees(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner { require(_liquidityFee.add(_marketingFee) <= 20, "tax too high"); liquidityFee = _liquidityFee; 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":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFees","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff02191690831515021790555066038d7ea4c6800060075566038d7ea4c6800060085566038d7ea4c6800060095564ba43b74000600a556001600b556004600c5573b5968e916d15d4eb34c3688a2e1d33b57f132311600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b557600080fd5b506040518060400160405280600e81526020017f44656a69746172752047656e62750000000000000000000000000000000000008152506040518060400160405280600581526020017f47454e4255000000000000000000000000000000000000000000000000000000815250816003908162000133919062000a27565b50806004908162000145919062000a27565b505050620001686200015c620003f960201b60201c565b6200040160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000b78565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000b78565b6040518363ffffffff1660e01b8152600401620002a292919062000bbb565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000b78565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200038162000373620004c760201b60201c565b6001620004f160201b60201c565b620003b6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004f160201b60201c565b620003c9306001620004f160201b60201c565b620003f1620003dd620004c760201b60201c565b66038d7ea4c680006200062b60201b60201c565b505062000dd1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000501620003f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000527620004c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005779062000c49565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200061f919062000c88565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006949062000cf5565b60405180910390fd5b620006b160008383620007a360201b60201c565b8060026000828254620006c5919062000d46565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200071c919062000d46565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000783919062000db4565b60405180910390a36200079f60008383620007a860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200082f57607f821691505b602082108103620008455762000844620007e7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000870565b620008bb868362000870565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200090862000902620008fc84620008d3565b620008dd565b620008d3565b9050919050565b6000819050919050565b6200092483620008e7565b6200093c62000933826200090f565b8484546200087d565b825550505050565b600090565b6200095362000944565b6200096081848462000919565b505050565b5b8181101562000988576200097c60008262000949565b60018101905062000966565b5050565b601f821115620009d757620009a1816200084b565b620009ac8462000860565b81016020851015620009bc578190505b620009d4620009cb8562000860565b83018262000965565b50505b505050565b600082821c905092915050565b6000620009fc60001984600802620009dc565b1980831691505092915050565b600062000a178383620009e9565b9150826002028217905092915050565b62000a3282620007ad565b67ffffffffffffffff81111562000a4e5762000a4d620007b8565b5b62000a5a825462000816565b62000a678282856200098c565b600060209050601f83116001811462000a9f576000841562000a8a578287015190505b62000a96858262000a09565b86555062000b06565b601f19841662000aaf866200084b565b60005b8281101562000ad95784890151825560018201915060208501945060208101905062000ab2565b8683101562000af9578489015162000af5601f891682620009e9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b408262000b13565b9050919050565b62000b528162000b33565b811462000b5e57600080fd5b50565b60008151905062000b728162000b47565b92915050565b60006020828403121562000b915762000b9062000b0e565b5b600062000ba18482850162000b61565b91505092915050565b62000bb58162000b33565b82525050565b600060408201905062000bd2600083018562000baa565b62000be1602083018462000baa565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c3160208362000be8565b915062000c3e8262000bf9565b602082019050919050565b6000602082019050818103600083015262000c648162000c22565b9050919050565b60008115159050919050565b62000c828162000c6b565b82525050565b600060208201905062000c9f600083018462000c77565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cdd601f8362000be8565b915062000cea8262000ca5565b602082019050919050565b6000602082019050818103600083015262000d108162000cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d5382620008d3565b915062000d6083620008d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d985762000d9762000d17565b5b828201905092915050565b62000dae81620008d3565b82525050565b600060208201905062000dcb600083018462000da3565b92915050565b608051613c4a62000e1760003960008181610cd901528181611b7001528181611cb601528181611dfc01528181611f93015281816120ba015261210f0152613c4a6000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220a9548a4ae586ea7462a361a8c0f72863fdbcb68ea5503460ba5546c022783dff64736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec881565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f0000000000000000000000002b060d105eeecb4b5b0010e7fd68c01635c22ec873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220a9548a4ae586ea7462a361a8c0f72863fdbcb68ea5503460ba5546c022783dff64736f6c634300080f0033
Deployed Bytecode Sourcemap
39789:8395:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5653:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7819:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47165:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39872:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6772:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40614:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8470:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6615:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9371:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46907:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39920:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40003:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46592:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47939:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47607:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40317:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6943:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17182:94;;;;;;;;;;;;;:::i;:::-;;47038:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40357:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16531:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47413:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5872:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40279:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10089:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40108:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7283:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47742:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46396:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46728:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40164:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7521:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40221:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40052;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17431:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5653:100;5707:13;5740:5;5733:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5653:100;:::o;7819:169::-;7902:4;7919:39;7928:12;:10;:12::i;:::-;7942:7;7951:6;7919:8;:39::i;:::-;7976:4;7969:11;;7819:169;;;;:::o;47165:240::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47300:2:::1;47264:32;47282:13;47264;:17;;:32;;;;:::i;:::-;:38;;47256:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47345:13;47330:12;:28;;;;47384:13;47369:12;:28;;;;47165:240:::0;;:::o;39872:41::-;;;;;;;;;;;;;:::o;6772:108::-;6833:7;6860:12;;6853:19;;6772:108;:::o;40614:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8470:492::-;8610:4;8627:36;8637:6;8645:9;8656:6;8627:9;:36::i;:::-;8676:24;8703:11;:19;8715:6;8703:19;;;;;;;;;;;;;;;:33;8723:12;:10;:12::i;:::-;8703:33;;;;;;;;;;;;;;;;8676:60;;8775:6;8755:16;:26;;8747:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8862:57;8871:6;8879:12;:10;:12::i;:::-;8912:6;8893:16;:25;8862:8;:57::i;:::-;8950:4;8943:11;;;8470:492;;;;;:::o;6615:92::-;6673:5;6698:1;6691:8;;6615:92;:::o;9371:215::-;9459:4;9476:80;9485:12;:10;:12::i;:::-;9499:7;9545:10;9508:11;:25;9520:12;:10;:12::i;:::-;9508:25;;;;;;;;;;;;;;;:34;9534:7;9508:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9476:8;:80::i;:::-;9574:4;9567:11;;9371:215;;;;:::o;46907:123::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47017:5:::1;46991:14;:23;47006:7;46991:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;46907:123:::0;;:::o;39920:38::-;;;:::o;40003:40::-;;;;;;;;;;;;;:::o;46592:125::-;46657:4;46681:19;:28;46701:7;46681:28;;;;;;;;;;;;;;;;;;;;;;;;;46674:35;;46592:125;;;:::o;47939:194::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48038:10:::1;48020:15;:28;;;;48086:22;48104:3;48086:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;48067:15;;:41;;48059:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47939:194:::0;:::o;47607:123::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47712:11:::1;47694:15;;:29;;;;;;;;;;;;;;;;;;47607:123:::0;:::o;40317:31::-;;;;:::o;6943:127::-;7017:7;7044:9;:18;7054:7;7044:18;;;;;;;;;;;;;;;;7037:25;;6943:127;;;:::o;17182:94::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17247:21:::1;17265:1;17247:9;:21::i;:::-;17182:94::o:0;47038:119::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47139:10:::1;47118:18;:31;;;;47038:119:::0;:::o;40357:92::-;;;;;;;;;;;;;:::o;16531:87::-;16577:7;16604:6;;;;;;;;;;;16597:13;;16531:87;:::o;47413:186::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47506:9:::1;47489:14;:26;;;;47552:22;47570:3;47552:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47534:14;;:40;;47526:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47413:186:::0;:::o;5872:104::-;5928:13;5961:7;5954:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5872:104;:::o;40279:31::-;;;;:::o;10089:413::-;10182:4;10199:24;10226:11;:25;10238:12;:10;:12::i;:::-;10226:25;;;;;;;;;;;;;;;:34;10252:7;10226:34;;;;;;;;;;;;;;;;10199:61;;10299:15;10279:16;:35;;10271:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10392:67;10401:12;:10;:12::i;:::-;10415:7;10443:15;10424:16;:34;10392:8;:67::i;:::-;10490:4;10483:11;;;10089:413;;;;:::o;40108:49::-;;;;:::o;7283:175::-;7369:4;7386:42;7396:12;:10;:12::i;:::-;7410:9;7421:6;7386:9;:42::i;:::-;7446:4;7439:11;;7283:175;;;;:::o;47742:189::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47838:9:::1;47821:14;:26;;;;47884:22;47902:3;47884:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47866:14;;:40;;47858:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47742:189:::0;:::o;46396:184::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46512:8:::1;46481:19;:28;46501:7;46481:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46554:7;46538:34;;;46563:8;46538:34;;;;;;:::i;:::-;;;;;;;;46396:184:::0;;:::o;46728:171::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46829:8:::1;46805:21;;:32;;;;;;;;;;;;;;;;;;46853:38;46882:8;46853:38;;;;;;:::i;:::-;;;;;;;;46728:171:::0;:::o;40164:50::-;;;;:::o;7521:151::-;7610:7;7637:11;:18;7649:5;7637:18;;;;;;;;;;;;;;;:27;7656:7;7637:27;;;;;;;;;;;;;;;;7630:34;;7521:151;;;;:::o;40221:49::-;;;;:::o;40052:::-;;;;:::o;17431:192::-;16762:12;:10;:12::i;:::-;16751:23;;:7;:5;:7::i;:::-;:23;;;16743:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17540:1:::1;17520:22;;:8;:22;;::::0;17512:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17596:19;17606:8;17596:9;:19::i;:::-;17431:192:::0;:::o;3467:98::-;3520:7;3547:10;3540:17;;3467:98;:::o;13781:380::-;13934:1;13917:19;;:5;:19;;;13909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14015:1;13996:21;;:7;:21;;;13988:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14099:6;14069:11;:18;14081:5;14069:18;;;;;;;;;;;;;;;:27;14088:7;14069:27;;;;;;;;;;;;;;;:36;;;;14137:7;14121:32;;14130:5;14121:32;;;14146:6;14121:32;;;;;;:::i;:::-;;;;;;;;13781:380;;;:::o;27685:98::-;27743:7;27774:1;27770;:5;;;;:::i;:::-;27763:12;;27685:98;;;;:::o;41850:2187::-;41998:1;41982:18;;:4;:18;;;41974:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42075:1;42061:16;;:2;:16;;;42053:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42137:14;:20;42152:4;42137:20;;;;;;;;;;;;;;;;;;;;;;;;;42136:21;:44;;;;;42162:14;:18;42177:2;42162:18;;;;;;;;;;;;;;;;;;;;;;;;;42161:19;42136:44;42128:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42230:1;42220:6;:11;42217:92;;42248:28;42264:4;42270:2;42274:1;42248:15;:28::i;:::-;42291:7;;42217:92;42332:13;42324:21;;:4;:21;;;:51;;;;;42350:19;:25;42370:4;42350:25;;;;;;;;;;;;;;;;;;;;;;;;;42349:26;42324:51;:79;;;;;42380:19;:23;42400:2;42380:23;;;;;;;;;;;;;;;;;;;;;;;;;42379:24;42324:79;42321:199;;;42438:14;;42428:6;:24;;42420:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;42321:199;42542:13;42536:19;;:2;:19;;;:49;;;;;42560:19;:25;42580:4;42560:25;;;;;;;;;;;;;;;;;;;;;;;;;42559:26;42536:49;:77;;;;;42590:19;:23;42610:2;42590:23;;;;;;;;;;;;;;;;;;;;;;;;;42589:24;42536:77;42533:199;;;42648:15;;42638:6;:25;;42630:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;42533:199;42753:13;42747:19;;:4;:19;;;:49;;;;;42771:19;:25;42791:4;42771:25;;;;;;;;;;;;;;;;;;;;;;;;;42770:26;42747:49;:77;;;;;42801:19;:23;42821:2;42801:23;;;;;;;;;;;;;;;;;;;;;;;;;42800:24;42747:77;42744:271;;;42840:32;42875:13;42885:2;42875:9;:13::i;:::-;42840:48;;42948:14;;42938:6;42911:24;:33;;;;:::i;:::-;:51;;42903:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42825:190;42744:271;43024:28;43055:24;43073:4;43055:9;:24::i;:::-;43024:55;;43100:24;43151:18;;43127:20;:42;;43100:69;;43206:19;:53;;;;;43243:16;;;;;;;;;;;43242:17;43206:53;:87;;;;;43280:13;43276:17;;:2;:17;;;43206:87;:126;;;;;43311:21;;;;;;;;;;;43206:126;43189:274;;;43382:18;;43359:41;;43415:36;43430:20;43415:14;:36::i;:::-;43189:274;43565:19;:25;43585:4;43565:25;;;;;;;;;;;;;;;;;;;;;;;;;43564:26;:54;;;;;43595:19;:23;43615:2;43595:23;;;;;;;;;;;;;;;;;;;;;;;;;43594:24;43564:54;43561:421;;;43635:12;43681:13;43675:19;;:4;:19;;;:40;;;;43702:13;43698:17;;:2;:17;;;43675:40;43672:138;;;43743:51;43790:3;43743:42;43754:30;43771:12;;43754;;:16;;:30;;;;:::i;:::-;43743:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;43736:58;;43672:138;43832:16;43843:4;43832:6;:10;;:16;;;;:::i;:::-;43823:25;;43875:1;43868:4;:8;43865:91;;;43897:42;43913:4;43927;43934;43897:15;:42::i;:::-;43865:91;43620:362;43561:421;43994:33;44010:4;44016:2;44020:6;43994:15;:33::i;:::-;41963:2074;;41850:2187;;;;:::o;28822:98::-;28880:7;28911:1;28907;:5;;;;:::i;:::-;28900:12;;28822:98;;;;:::o;17631:173::-;17687:16;17706:6;;;;;;;;;;;17687:25;;17732:8;17723:6;;:17;;;;;;;;;;;;;;;;;;17787:8;17756:40;;17777:8;17756:40;;;;;;;;;;;;17676:128;17631:173;:::o;10992:733::-;11150:1;11132:20;;:6;:20;;;11124:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11234:1;11213:23;;:9;:23;;;11205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11289:47;11310:6;11318:9;11329:6;11289:20;:47::i;:::-;11349:21;11373:9;:17;11383:6;11373:17;;;;;;;;;;;;;;;;11349:41;;11426:6;11409:13;:23;;11401:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11547:6;11531:13;:22;11511:9;:17;11521:6;11511:17;;;;;;;;;;;;;;;:42;;;;11599:6;11575:9;:20;11585:9;11575:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11640:9;11623:35;;11632:6;11623:35;;;11651:6;11623:35;;;;;;:::i;:::-;;;;;;;;11671:46;11691:6;11699:9;11710:6;11671:19;:46::i;:::-;11113:612;10992:733;;;:::o;44046:1253::-;40923:4;40904:16;;:23;;;;;;;;;;;;;;;;;;44131:26:::1;44160:74;44203:30;44220:12;;44203;;:16;;:30;;;;:::i;:::-;44160:38;44185:12;;44160:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44131:103;;44303:12;44318:25;44341:1;44318:18;:22;;:25;;;;:::i;:::-;44303:40;;44354:17;44374:28;44397:4;44374:18;:22;;:28;;;;:::i;:::-;44354:48;;44680:22;44705:21;44680:46;;44771:22;44788:4;44771:16;:22::i;:::-;44924:18;44945:41;44971:14;44945:21;:25;;:41;;;;:::i;:::-;44924:62;;45036:35;45049:9;45060:10;45036:12;:35::i;:::-;45121:62;45138:44;45163:18;45138:20;:24;;:44;;;;:::i;:::-;45121:16;:62::i;:::-;45194:15;;;;;;;;;;;:24;;:47;45219:21;45194:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45259:32;45274:4;45280:10;45259:32;;;;;;;:::i;:::-;;;;;;;;44120:1179;;;;;40969:5:::0;40950:16;;:24;;;;;;;;;;;;;;;;;;44046:1253;:::o;28423:98::-;28481:7;28512:1;28508;:5;;;;:::i;:::-;28501:12;;28423:98;;;;:::o;28066:::-;28124:7;28155:1;28151;:5;;;;:::i;:::-;28144:12;;28066:98;;;;:::o;14761:125::-;;;;:::o;15490:124::-;;;;:::o;45307:692::-;45433:21;45471:1;45457:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45433:40;;45502:4;45484;45489:1;45484:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45528:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45518:4;45523:1;45518:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45619:11;45566:50;45584:4;45599:15;;;;;;;;;;;45566:9;:50::i;:::-;:64;45563:156;;;45645:62;45662:4;45677:15;;;;;;;;;;;45704:1;45695:11;45645:8;:62::i;:::-;45563:156;45757:15;;;;;;;;;;;:66;;;45838:11;45864:1;45908:4;45935;45955:15;45757:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45362:637;45307:692;:::o;46007:381::-;46118:15;;;;;;;;;;;:31;;;46157:9;46190:4;46210:11;46236:1;46279;46322:7;:5;:7::i;:::-;46344:15;46118:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46007:381;;:::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:474::-;3562:6;3570;3619:2;3607:9;3598:7;3594:23;3590:32;3587:119;;;3625:79;;:::i;:::-;3587:119;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;3494:474;;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:116::-;6764:21;6779:5;6764:21;:::i;:::-;6757:5;6754:32;6744:60;;6800:1;6797;6790:12;6744:60;6694:116;:::o;6816:133::-;6859:5;6897:6;6884:20;6875:29;;6913:30;6937:5;6913:30;:::i;:::-;6816:133;;;;:::o;6955:468::-;7020:6;7028;7077:2;7065:9;7056:7;7052:23;7048:32;7045:119;;;7083:79;;:::i;:::-;7045:119;7203:1;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7174:117;7330:2;7356:50;7398:7;7389:6;7378:9;7374:22;7356:50;:::i;:::-;7346:60;;7301:115;6955:468;;;;;:::o;7429:118::-;7516:24;7534:5;7516:24;:::i;:::-;7511:3;7504:37;7429:118;;:::o;7553:222::-;7646:4;7684:2;7673:9;7669:18;7661:26;;7697:71;7765:1;7754:9;7750:17;7741:6;7697:71;:::i;:::-;7553:222;;;;:::o;7781:329::-;7840:6;7889:2;7877:9;7868:7;7864:23;7860:32;7857:119;;;7895:79;;:::i;:::-;7857:119;8015:1;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7986:117;7781:329;;;;:::o;8116:104::-;8161:7;8190:24;8208:5;8190:24;:::i;:::-;8179:35;;8116:104;;;:::o;8226:138::-;8307:32;8333:5;8307:32;:::i;:::-;8300:5;8297:43;8287:71;;8354:1;8351;8344:12;8287:71;8226:138;:::o;8370:155::-;8424:5;8462:6;8449:20;8440:29;;8478:41;8513:5;8478:41;:::i;:::-;8370:155;;;;:::o;8531:345::-;8598:6;8647:2;8635:9;8626:7;8622:23;8618:32;8615:119;;;8653:79;;:::i;:::-;8615:119;8773:1;8798:61;8851:7;8842:6;8831:9;8827:22;8798:61;:::i;:::-;8788:71;;8744:125;8531:345;;;;:::o;8882:142::-;8985:32;9011:5;8985:32;:::i;:::-;8980:3;8973:45;8882:142;;:::o;9030:254::-;9139:4;9177:2;9166:9;9162:18;9154:26;;9190:87;9274:1;9263:9;9259:17;9250:6;9190:87;:::i;:::-;9030:254;;;;:::o;9290:323::-;9346:6;9395:2;9383:9;9374:7;9370:23;9366:32;9363:119;;;9401:79;;:::i;:::-;9363:119;9521:1;9546:50;9588:7;9579:6;9568:9;9564:22;9546:50;:::i;:::-;9536:60;;9492:114;9290:323;;;;:::o;9619:474::-;9687:6;9695;9744:2;9732:9;9723:7;9719:23;9715:32;9712:119;;;9750:79;;:::i;:::-;9712:119;9870:1;9895:53;9940:7;9931:6;9920:9;9916:22;9895:53;:::i;:::-;9885:63;;9841:117;9997:2;10023:53;10068:7;10059:6;10048:9;10044:22;10023:53;:::i;:::-;10013:63;;9968:118;9619:474;;;;;:::o;10099:180::-;10147:77;10144:1;10137:88;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10285:320;10329:6;10366:1;10360:4;10356:12;10346:22;;10413:1;10407:4;10403:12;10434:18;10424:81;;10490:4;10482:6;10478:17;10468:27;;10424:81;10552:2;10544:6;10541:14;10521:18;10518:38;10515:84;;10571:18;;:::i;:::-;10515:84;10336:269;10285:320;;;:::o;10611:182::-;10751:34;10747:1;10739:6;10735:14;10728:58;10611:182;:::o;10799:366::-;10941:3;10962:67;11026:2;11021:3;10962:67;:::i;:::-;10955:74;;11038:93;11127:3;11038:93;:::i;:::-;11156:2;11151:3;11147:12;11140:19;;10799:366;;;:::o;11171:419::-;11337:4;11375:2;11364:9;11360:18;11352:26;;11424:9;11418:4;11414:20;11410:1;11399:9;11395:17;11388:47;11452:131;11578:4;11452:131;:::i;:::-;11444:139;;11171:419;;;:::o;11596:162::-;11736:14;11732:1;11724:6;11720:14;11713:38;11596:162;:::o;11764:366::-;11906:3;11927:67;11991:2;11986:3;11927:67;:::i;:::-;11920:74;;12003:93;12092:3;12003:93;:::i;:::-;12121:2;12116:3;12112:12;12105:19;;11764:366;;;:::o;12136:419::-;12302:4;12340:2;12329:9;12325:18;12317:26;;12389:9;12383:4;12379:20;12375:1;12364:9;12360:17;12353:47;12417:131;12543:4;12417:131;:::i;:::-;12409:139;;12136:419;;;:::o;12561:227::-;12701:34;12697:1;12689:6;12685:14;12678:58;12770:10;12765:2;12757:6;12753:15;12746:35;12561:227;:::o;12794:366::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:419::-;13332:4;13370:2;13359:9;13355:18;13347:26;;13419:9;13413:4;13409:20;13405:1;13394:9;13390:17;13383:47;13447:131;13573:4;13447:131;:::i;:::-;13439:139;;13166:419;;;:::o;13591:180::-;13639:77;13636:1;13629:88;13736:4;13733:1;13726:15;13760:4;13757:1;13750:15;13777:305;13817:3;13836:20;13854:1;13836:20;:::i;:::-;13831:25;;13870:20;13888:1;13870:20;:::i;:::-;13865:25;;14024:1;13956:66;13952:74;13949:1;13946:81;13943:107;;;14030:18;;:::i;:::-;13943:107;14074:1;14071;14067:9;14060:16;;13777:305;;;;:::o;14088:163::-;14228:15;14224:1;14216:6;14212:14;14205:39;14088:163;:::o;14257:366::-;14399:3;14420:67;14484:2;14479:3;14420:67;:::i;:::-;14413:74;;14496:93;14585:3;14496:93;:::i;:::-;14614:2;14609:3;14605:12;14598:19;;14257:366;;;:::o;14629:419::-;14795:4;14833:2;14822:9;14818:18;14810:26;;14882:9;14876:4;14872:20;14868:1;14857:9;14853:17;14846:47;14910:131;15036:4;14910:131;:::i;:::-;14902:139;;14629:419;;;:::o;15054:224::-;15194:34;15190:1;15182:6;15178:14;15171:58;15263:7;15258:2;15250:6;15246:15;15239:32;15054:224;:::o;15284:366::-;15426:3;15447:67;15511:2;15506:3;15447:67;:::i;:::-;15440:74;;15523:93;15612:3;15523:93;:::i;:::-;15641:2;15636:3;15632:12;15625:19;;15284:366;;;:::o;15656:419::-;15822:4;15860:2;15849:9;15845:18;15837:26;;15909:9;15903:4;15899:20;15895:1;15884:9;15880:17;15873:47;15937:131;16063:4;15937:131;:::i;:::-;15929:139;;15656:419;;;:::o;16081:225::-;16221:34;16217:1;16209:6;16205:14;16198:58;16290:8;16285:2;16277:6;16273:15;16266:33;16081:225;:::o;16312:366::-;16454:3;16475:67;16539:2;16534:3;16475:67;:::i;:::-;16468:74;;16551:93;16640:3;16551:93;:::i;:::-;16669:2;16664:3;16660:12;16653:19;;16312:366;;;:::o;16684:419::-;16850:4;16888:2;16877:9;16873:18;16865:26;;16937:9;16931:4;16927:20;16923:1;16912:9;16908:17;16901:47;16965:131;17091:4;16965:131;:::i;:::-;16957:139;;16684:419;;;:::o;17109:223::-;17249:34;17245:1;17237:6;17233:14;17226:58;17318:6;17313:2;17305:6;17301:15;17294:31;17109:223;:::o;17338:366::-;17480:3;17501:67;17565:2;17560:3;17501:67;:::i;:::-;17494:74;;17577:93;17666:3;17577:93;:::i;:::-;17695:2;17690:3;17686:12;17679:19;;17338:366;;;:::o;17710:419::-;17876:4;17914:2;17903:9;17899:18;17891:26;;17963:9;17957:4;17953:20;17949:1;17938:9;17934:17;17927:47;17991:131;18117:4;17991:131;:::i;:::-;17983:139;;17710:419;;;:::o;18135:221::-;18275:34;18271:1;18263:6;18259:14;18252:58;18344:4;18339:2;18331:6;18327:15;18320:29;18135:221;:::o;18362:366::-;18504:3;18525:67;18589:2;18584:3;18525:67;:::i;:::-;18518:74;;18601:93;18690:3;18601:93;:::i;:::-;18719:2;18714:3;18710:12;18703:19;;18362:366;;;:::o;18734:419::-;18900:4;18938:2;18927:9;18923:18;18915:26;;18987:9;18981:4;18977:20;18973:1;18962:9;18958:17;18951:47;19015:131;19141:4;19015:131;:::i;:::-;19007:139;;18734:419;;;:::o;19159:224::-;19299:34;19295:1;19287:6;19283:14;19276:58;19368:7;19363:2;19355:6;19351:15;19344:32;19159:224;:::o;19389:366::-;19531:3;19552:67;19616:2;19611:3;19552:67;:::i;:::-;19545:74;;19628:93;19717:3;19628:93;:::i;:::-;19746:2;19741:3;19737:12;19730:19;;19389:366;;;:::o;19761:419::-;19927:4;19965:2;19954:9;19950:18;19942:26;;20014:9;20008:4;20004:20;20000:1;19989:9;19985:17;19978:47;20042:131;20168:4;20042:131;:::i;:::-;20034:139;;19761:419;;;:::o;20186:222::-;20326:34;20322:1;20314:6;20310:14;20303:58;20395:5;20390:2;20382:6;20378:15;20371:30;20186:222;:::o;20414:366::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:419::-;20952:4;20990:2;20979:9;20975:18;20967:26;;21039:9;21033:4;21029:20;21025:1;21014:9;21010:17;21003:47;21067:131;21193:4;21067:131;:::i;:::-;21059:139;;20786:419;;;:::o;21211:169::-;21351:21;21347:1;21339:6;21335:14;21328:45;21211:169;:::o;21386:366::-;21528:3;21549:67;21613:2;21608:3;21549:67;:::i;:::-;21542:74;;21625:93;21714:3;21625:93;:::i;:::-;21743:2;21738:3;21734:12;21727:19;;21386:366;;;:::o;21758:419::-;21924:4;21962:2;21951:9;21947:18;21939:26;;22011:9;22005:4;22001:20;21997:1;21986:9;21982:17;21975:47;22039:131;22165:4;22039:131;:::i;:::-;22031:139;;21758:419;;;:::o;22183:238::-;22323:34;22319:1;22311:6;22307:14;22300:58;22392:21;22387:2;22379:6;22375:15;22368:46;22183:238;:::o;22427:366::-;22569:3;22590:67;22654:2;22649:3;22590:67;:::i;:::-;22583:74;;22666:93;22755:3;22666:93;:::i;:::-;22784:2;22779:3;22775:12;22768:19;;22427:366;;;:::o;22799:419::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22799:419;;;:::o;23224:239::-;23364:34;23360:1;23352:6;23348:14;23341:58;23433:22;23428:2;23420:6;23416:15;23409:47;23224:239;:::o;23469:366::-;23611:3;23632:67;23696:2;23691:3;23632:67;:::i;:::-;23625:74;;23708:93;23797:3;23708:93;:::i;:::-;23826:2;23821:3;23817:12;23810:19;;23469:366;;;:::o;23841:419::-;24007:4;24045:2;24034:9;24030:18;24022:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24122:131;24248:4;24122:131;:::i;:::-;24114:139;;23841:419;;;:::o;24266:223::-;24406:34;24402:1;24394:6;24390:14;24383:58;24475:6;24470:2;24462:6;24458:15;24451:31;24266:223;:::o;24495:366::-;24637:3;24658:67;24722:2;24717:3;24658:67;:::i;:::-;24651:74;;24734:93;24823:3;24734:93;:::i;:::-;24852:2;24847:3;24843:12;24836:19;;24495:366;;;:::o;24867:419::-;25033:4;25071:2;25060:9;25056:18;25048:26;;25120:9;25114:4;25110:20;25106:1;25095:9;25091:17;25084:47;25148:131;25274:4;25148:131;:::i;:::-;25140:139;;24867:419;;;:::o;25292:180::-;25340:77;25337:1;25330:88;25437:4;25434:1;25427:15;25461:4;25458:1;25451:15;25478:185;25518:1;25535:20;25553:1;25535:20;:::i;:::-;25530:25;;25569:20;25587:1;25569:20;:::i;:::-;25564:25;;25608:1;25598:35;;25613:18;;:::i;:::-;25598:35;25655:1;25652;25648:9;25643:14;;25478:185;;;;:::o;25669:225::-;25809:34;25805:1;25797:6;25793:14;25786:58;25878:8;25873:2;25865:6;25861:15;25854:33;25669:225;:::o;25900:366::-;26042:3;26063:67;26127:2;26122:3;26063:67;:::i;:::-;26056:74;;26139:93;26228:3;26139:93;:::i;:::-;26257:2;26252:3;26248:12;26241:19;;25900:366;;;:::o;26272:419::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26272:419;;;:::o;26697:332::-;26818:4;26856:2;26845:9;26841:18;26833:26;;26869:71;26937:1;26926:9;26922:17;26913:6;26869:71;:::i;:::-;26950:72;27018:2;27007:9;27003:18;26994:6;26950:72;:::i;:::-;26697:332;;;;;:::o;27035:348::-;27075:7;27098:20;27116:1;27098:20;:::i;:::-;27093:25;;27132:20;27150:1;27132:20;:::i;:::-;27127:25;;27320:1;27252:66;27248:74;27245:1;27242:81;27237:1;27230:9;27223:17;27219:105;27216:131;;;27327:18;;:::i;:::-;27216:131;27375:1;27372;27368:9;27357:20;;27035:348;;;;:::o;27389:191::-;27429:4;27449:20;27467:1;27449:20;:::i;:::-;27444:25;;27483:20;27501:1;27483:20;:::i;:::-;27478:25;;27522:1;27519;27516:8;27513:34;;;27527:18;;:::i;:::-;27513:34;27572:1;27569;27565:9;27557:17;;27389:191;;;;:::o;27586:180::-;27634:77;27631:1;27624:88;27731:4;27728:1;27721:15;27755:4;27752:1;27745:15;27772:180;27820:77;27817:1;27810:88;27917:4;27914:1;27907:15;27941:4;27938:1;27931:15;27958:143;28015:5;28046:6;28040:13;28031:22;;28062:33;28089:5;28062:33;:::i;:::-;27958:143;;;;:::o;28107:351::-;28177:6;28226:2;28214:9;28205:7;28201:23;28197:32;28194:119;;;28232:79;;:::i;:::-;28194:119;28352:1;28377:64;28433:7;28424:6;28413:9;28409:22;28377:64;:::i;:::-;28367:74;;28323:128;28107:351;;;;:::o;28464:85::-;28509:7;28538:5;28527:16;;28464:85;;;:::o;28555:158::-;28613:9;28646:61;28664:42;28673:32;28699:5;28673:32;:::i;:::-;28664:42;:::i;:::-;28646:61;:::i;:::-;28633:74;;28555:158;;;:::o;28719:147::-;28814:45;28853:5;28814:45;:::i;:::-;28809:3;28802:58;28719:147;;:::o;28872:114::-;28939:6;28973:5;28967:12;28957:22;;28872:114;;;:::o;28992:184::-;29091:11;29125:6;29120:3;29113:19;29165:4;29160:3;29156:14;29141:29;;28992:184;;;;:::o;29182:132::-;29249:4;29272:3;29264:11;;29302:4;29297:3;29293:14;29285:22;;29182:132;;;:::o;29320:108::-;29397:24;29415:5;29397:24;:::i;:::-;29392:3;29385:37;29320:108;;:::o;29434:179::-;29503:10;29524:46;29566:3;29558:6;29524:46;:::i;:::-;29602:4;29597:3;29593:14;29579:28;;29434:179;;;;:::o;29619:113::-;29689:4;29721;29716:3;29712:14;29704:22;;29619:113;;;:::o;29768:732::-;29887:3;29916:54;29964:5;29916:54;:::i;:::-;29986:86;30065:6;30060:3;29986:86;:::i;:::-;29979:93;;30096:56;30146:5;30096:56;:::i;:::-;30175:7;30206:1;30191:284;30216:6;30213:1;30210:13;30191:284;;;30292:6;30286:13;30319:63;30378:3;30363:13;30319:63;:::i;:::-;30312:70;;30405:60;30458:6;30405:60;:::i;:::-;30395:70;;30251:224;30238:1;30235;30231:9;30226:14;;30191:284;;;30195:14;30491:3;30484:10;;29892:608;;;29768:732;;;;:::o;30506:831::-;30769:4;30807:3;30796:9;30792:19;30784:27;;30821:71;30889:1;30878:9;30874:17;30865:6;30821:71;:::i;:::-;30902:80;30978:2;30967:9;30963:18;30954:6;30902:80;:::i;:::-;31029:9;31023:4;31019:20;31014:2;31003:9;30999:18;30992:48;31057:108;31160:4;31151:6;31057:108;:::i;:::-;31049:116;;31175:72;31243:2;31232:9;31228:18;31219:6;31175:72;:::i;:::-;31257:73;31325:3;31314:9;31310:19;31301:6;31257:73;:::i;:::-;30506:831;;;;;;;;:::o;31343:807::-;31592:4;31630:3;31619:9;31615:19;31607:27;;31644:71;31712:1;31701:9;31697:17;31688:6;31644:71;:::i;:::-;31725:72;31793:2;31782:9;31778:18;31769:6;31725:72;:::i;:::-;31807:80;31883:2;31872:9;31868:18;31859:6;31807:80;:::i;:::-;31897;31973:2;31962:9;31958:18;31949:6;31897:80;:::i;:::-;31987:73;32055:3;32044:9;32040:19;32031:6;31987:73;:::i;:::-;32070;32138:3;32127:9;32123:19;32114:6;32070:73;:::i;:::-;31343:807;;;;;;;;;:::o;32156:143::-;32213:5;32244:6;32238:13;32229:22;;32260:33;32287:5;32260:33;:::i;:::-;32156:143;;;;:::o;32305:663::-;32393:6;32401;32409;32458:2;32446:9;32437:7;32433:23;32429:32;32426:119;;;32464:79;;:::i;:::-;32426:119;32584:1;32609:64;32665:7;32656:6;32645:9;32641:22;32609:64;:::i;:::-;32599:74;;32555:128;32722:2;32748:64;32804:7;32795:6;32784:9;32780:22;32748:64;:::i;:::-;32738:74;;32693:129;32861:2;32887:64;32943:7;32934:6;32923:9;32919:22;32887:64;:::i;:::-;32877:74;;32832:129;32305:663;;;;;:::o
Swarm Source
ipfs://a9548a4ae586ea7462a361a8c0f72863fdbcb68ea5503460ba5546c022783dff
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.