ERC-20
Overview
Max Total Supply
25,000,000,000,000 PUREBLOOD
Holders
251
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
125,000,000,000 PUREBLOODValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PUREBLOOD
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-17 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.9; 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 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); } /** * @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 {_mint}. * 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 18; } /** * @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 _mint(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 PUREBLOOD is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxSellTransactionAmount = 25000000000000 * (10**18); uint256 public maxBuyTransactionAmount = 25000000000000 * (10**18); uint256 public swapTokensAtAmount = 100000000000 * (10**18); uint256 public liquidityFee = 5; uint256 public charityFee = 5; address public charityWallet = 0xc0195c99bf9Dd9678d20055152E238609d3f57B8; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxTx; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensIntoLiqudity, uint256 ethReceived ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } function setFee(uint256 _liquidityFee, uint256 _charityFee) public onlyOwner { liquidityFee = _liquidityFee; charityFee = _charityFee; } function setMaxSellTransaction(uint256 _maxSellTxAmount) public onlyOwner { maxSellTransactionAmount = _maxSellTxAmount; } function setMaxBuyTransaction(uint256 _maxBuyTxAmount) public onlyOwner { maxBuyTransactionAmount = _maxBuyTxAmount; } constructor() ERC20("PUREBLOOD", "PUREBLOOD") { 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; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(charityWallet, true); excludeFromFees(address(this), true); // exclude from max tx _isExcludedFromMaxTx[owner()] = true; _isExcludedFromMaxTx[address(this)] = true; _isExcludedFromMaxTx[charityWallet] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 25000000000000 * (10**18)); } receive() external payable { } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "CJP: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "CJP: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { _isExcludedFromMaxTx[_address] = value; } function setExcludeFromAll(address _address) public onlyOwner { _isExcludedFromMaxTx[_address] = true; _isExcludedFromFees[_address] = true; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "CJP: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "CJP: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromMaxTx(address account) public view returns(bool) { return _isExcludedFromMaxTx[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } 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"); if(amount == 0) { super._transfer(from, to, 0); return; } if(automatedMarketMakerPairs[from] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){ require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount."); } if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){ require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled ) { swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && automatedMarketMakerPairs[to]) { uint256 _liquidityfees = amount.mul(liquidityFee).div(100); uint256 _charityfees = amount.mul(charityFee).div(100); amount = amount.sub(_liquidityfees.add(_charityfees)); super._transfer(from, address(this), _liquidityfees); super._transfer(from, charityWallet, _charityfees); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the Liquidity token balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.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); 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 ); } }
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":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","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":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff0219169083151502179055506d013b8b5b5056e16b3be0400000006007556d013b8b5b5056e16b3be0400000006008556c01431e0fae6d7217caa00000006009556005600a556005600b5573c0195c99bf9dd9678d20055152e238609d3f57b8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c057600080fd5b506040518060400160405280600981526020017f50555245424c4f4f4400000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f50555245424c4f4f44000000000000000000000000000000000000000000000081525081600390805190602001906200014592919062000b17565b5080600490805190602001906200015e92919062000b17565b50505062000181620001756200059560201b60201c565b6200059d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e357600080fd5b505afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e919062000c31565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028157600080fd5b505afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000c31565b6040518363ffffffff1660e01b8152600401620002db92919062000c74565b602060405180830381600087803b158015620002f657600080fd5b505af11580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000331919062000c31565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003bb8160016200066360201b60201c565b620003dd620003cf6200079a60201b60201c565b6001620007c460201b60201c565b62000412600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007c460201b60201c565b62000425306001620007c460201b60201c565b6001600e60006200043b6200079a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200058d620005726200079a60201b60201c565b6d013b8b5b5056e16b3be0400000006200099460201b60201c565b505062001029565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620006f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f09062000d28565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d46200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007fa6200079a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084a9062000d9a565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620008e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e09062000e32565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000988919062000e71565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fe9062000ede565b60405180910390fd5b62000a1b6000838362000b0d60201b60201c565b806002600082825462000a2f919062000f39565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a86919062000f39565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aed919062000fa7565b60405180910390a362000b096000838362000b1260201b60201c565b5050565b505050565b505050565b82805462000b259062000ff3565b90600052602060002090601f01602090048101928262000b49576000855562000b95565b82601f1062000b6457805160ff191683800117855562000b95565b8280016001018555821562000b95579182015b8281111562000b9457825182559160200191906001019062000b77565b5b50905062000ba4919062000ba8565b5090565b5b8082111562000bc357600081600090555060010162000ba9565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bf98262000bcc565b9050919050565b62000c0b8162000bec565b811462000c1757600080fd5b50565b60008151905062000c2b8162000c00565b92915050565b60006020828403121562000c4a5762000c4962000bc7565b5b600062000c5a8482850162000c1a565b91505092915050565b62000c6e8162000bec565b82525050565b600060408201905062000c8b600083018562000c63565b62000c9a602083018462000c63565b9392505050565b600082825260208201905092915050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b600062000d10603d8362000ca1565b915062000d1d8262000cb2565b604082019050919050565b6000602082019050818103600083015262000d438162000d01565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d8260208362000ca1565b915062000d8f8262000d4a565b602082019050919050565b6000602082019050818103600083015262000db58162000d73565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b600062000e1a602f8362000ca1565b915062000e278262000dbc565b604082019050919050565b6000602082019050818103600083015262000e4d8162000e0b565b9050919050565b60008115159050919050565b62000e6b8162000e54565b82525050565b600060208201905062000e88600083018462000e60565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec6601f8362000ca1565b915062000ed38262000e8e565b602082019050919050565b6000602082019050818103600083015262000ef98162000eb7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f468262000f00565b915062000f538362000f00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f8b5762000f8a62000f0a565b5b828201905092915050565b62000fa18162000f00565b82525050565b600060208201905062000fbe600083018462000f96565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200100c57607f821691505b6020821081141562001023576200102262000fc4565b5b50919050565b608051613fb66200104c60003960008181610c79015261134e0152613fb66000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063b3b5e043116100a0578063c49b9a801161006f578063c49b9a80146107d0578063dd62ed3e146107f9578063e2f4560514610836578063ecfca89914610861578063f2fde38b1461088c5761021a565b8063b3b5e04314610718578063b62496f514610741578063c02466681461077e578063c492f046146107a75761021a565b806395d89b41116100e757806395d89b411461061f57806398118cb41461064a5780639a7a23d614610675578063a457c2d71461069e578063a9059cbb146106db5761021a565b806370a0823114610575578063715018a6146105b25780637b208769146105c95780638da5cb5b146105f45761021a565b806349bd5a5e1161019b5780635aa821a91161016a5780635aa821a9146104925780635b89029c146104bd5780635c38ffe2146104e6578063658c27a91461050f57806365b8dbc01461054c5761021a565b806349bd5a5e146103d65780634a74bb02146104015780634fbee1931461042c57806352f7c988146104695761021a565b806318160ddd116101e257806318160ddd146102dd57806323b872dd14610308578063313ce56714610345578063395093511461037057806349928a50146103ad5761021a565b806302259e9e1461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108b5565b6040516102419190612bed565b60405180910390f35b34801561025657600080fd5b5061025f6108bb565b60405161026c9190612ca1565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612d57565b61094d565b6040516102a99190612db2565b60405180910390f35b3480156102be57600080fd5b506102c761096b565b6040516102d49190612e2c565b60405180910390f35b3480156102e957600080fd5b506102f2610991565b6040516102ff9190612bed565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190612e47565b61099b565b60405161033c9190612db2565b60405180910390f35b34801561035157600080fd5b5061035a610a93565b6040516103679190612eb6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612d57565b610a9c565b6040516103a49190612db2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612ed1565b610b48565b005b3480156103e257600080fd5b506103eb610c77565b6040516103f89190612f0d565b60405180910390f35b34801561040d57600080fd5b50610416610c9b565b6040516104239190612db2565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612ed1565b610cae565b6040516104609190612db2565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612f28565b610d04565b005b34801561049e57600080fd5b506104a7610d92565b6040516104b49190612bed565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612f94565b610d98565b005b3480156104f257600080fd5b5061050d60048036038101906105089190612fd4565b610e6f565b005b34801561051b57600080fd5b5061053660048036038101906105319190612ed1565b610ef5565b6040516105439190612db2565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190612ed1565b610f4b565b005b34801561058157600080fd5b5061059c60048036038101906105979190612ed1565b611118565b6040516105a99190612bed565b60405180910390f35b3480156105be57600080fd5b506105c7611160565b005b3480156105d557600080fd5b506105de6111e8565b6040516105eb9190612f0d565b60405180910390f35b34801561060057600080fd5b5061060961120e565b6040516106169190612f0d565b60405180910390f35b34801561062b57600080fd5b50610634611238565b6040516106419190612ca1565b60405180910390f35b34801561065657600080fd5b5061065f6112ca565b60405161066c9190612bed565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190612f94565b6112d0565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190612d57565b6113e9565b6040516106d29190612db2565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190612d57565b6114d4565b60405161070f9190612db2565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190612fd4565b6114f2565b005b34801561074d57600080fd5b5061076860048036038101906107639190612ed1565b611578565b6040516107759190612db2565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612f94565b611598565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613066565b611750565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906130c6565b6118ac565b005b34801561080557600080fd5b50610820600480360381019061081b91906130f3565b61197c565b60405161082d9190612bed565b60405180910390f35b34801561084257600080fd5b5061084b611a03565b6040516108589190612bed565b60405180910390f35b34801561086d57600080fd5b50610876611a09565b6040516108839190612bed565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190612ed1565b611a0f565b005b60075481565b6060600380546108ca90613162565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613162565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061096161095a611b07565b8484611b0f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109a8848484611cda565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109f3611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a90613206565b60405180910390fd5b610a8785610a7f611b07565b858403611b0f565b60019150509392505050565b60006012905090565b6000610b3e610aa9611b07565b848460016000610ab7611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b399190613255565b611b0f565b6001905092915050565b610b50611b07565b73ffffffffffffffffffffffffffffffffffffffff16610b6e61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906132f7565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d0c611b07565b73ffffffffffffffffffffffffffffffffffffffff16610d2a61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d77906132f7565b60405180910390fd5b81600a8190555080600b819055505050565b60085481565b610da0611b07565b73ffffffffffffffffffffffffffffffffffffffff16610dbe61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906132f7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610e77611b07565b73ffffffffffffffffffffffffffffffffffffffff16610e9561120e565b73ffffffffffffffffffffffffffffffffffffffff1614610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906132f7565b60405180910390fd5b8060078190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f53611b07565b73ffffffffffffffffffffffffffffffffffffffff16610f7161120e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906132f7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613389565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611168611b07565b73ffffffffffffffffffffffffffffffffffffffff1661118661120e565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d3906132f7565b60405180910390fd5b6111e660006122d4565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461124790613162565b80601f016020809104026020016040519081016040528092919081815260200182805461127390613162565b80156112c05780601f10611295576101008083540402835291602001916112c0565b820191906000526020600020905b8154815290600101906020018083116112a357829003601f168201915b5050505050905090565b600a5481565b6112d8611b07565b73ffffffffffffffffffffffffffffffffffffffff166112f661120e565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906132f7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613441565b60405180910390fd5b6113e5828261239a565b5050565b600080600160006113f8611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906134d3565b60405180910390fd5b6114c96114c0611b07565b85858403611b0f565b600191505092915050565b60006114e86114e1611b07565b8484611cda565b6001905092915050565b6114fa611b07565b73ffffffffffffffffffffffffffffffffffffffff1661151861120e565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611565906132f7565b60405180910390fd5b8060088190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6115a0611b07565b73ffffffffffffffffffffffffffffffffffffffff166115be61120e565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b906132f7565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613565565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117449190612db2565b60405180910390a25050565b611758611b07565b73ffffffffffffffffffffffffffffffffffffffff1661177661120e565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906132f7565b60405180910390fd5b60005b8383905081101561186b5781600d60008686858181106117f2576117f1613585565b5b90506020020160208101906118079190612ed1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611863906135b4565b9150506117cf565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161189f939291906136c0565b60405180910390a1505050565b6118b4611b07565b73ffffffffffffffffffffffffffffffffffffffff166118d261120e565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906132f7565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516119719190612db2565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b611a17611b07565b73ffffffffffffffffffffffffffffffffffffffff16611a3561120e565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906132f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613764565b60405180910390fd5b611b04816122d4565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906137f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613888565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ccd9190612bed565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d419061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db1906139ac565b60405180910390fd5b6000811415611dd457611dcf838360006124ce565b6122cf565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e775750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ecd5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f1857600854811115611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613a3e565b60405180910390fd5b5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fbb5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120115750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205c5760075481111561205b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205290613ad0565b60405180910390fd5b5b600061206730611118565b90506000600954821015905080801561208d5750600660149054906101000a900460ff16155b80156120e25750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120fa5750600660159054906101000a900460ff165b15612109576121088261274f565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ad5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122025750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122c15760006122316064612223600a548761282390919063ffffffff16565b61283990919063ffffffff16565b9050600061225d606461224f600b548861282390919063ffffffff16565b61283990919063ffffffff16565b9050612284612275828461284f90919063ffffffff16565b8661286590919063ffffffff16565b94506122918730846124ce565b6122be87600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124ce565b50505b6122cc8585856124ce565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490613b62565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561253e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125359061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906139ac565b60405180910390fd5b6125b983838361287b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690613bf4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d29190613255565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127369190612bed565b60405180910390a3612749848484612880565b50505050565b6001600660146101000a81548160ff021916908315150217905550600061278060028361283990919063ffffffff16565b90506000612797828461286590919063ffffffff16565b905060004790506127a783612885565b60006127bc824761286590919063ffffffff16565b90506127c88382612b0d565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516127f9929190613c14565b60405180910390a1505050506000600660146101000a81548160ff02191690831515021790555050565b600081836128319190613c3d565b905092915050565b600081836128479190613cc6565b905092915050565b6000818361285d9190613255565b905092915050565b600081836128739190613cf7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128a2576128a1613d2b565b5b6040519080825280602002602001820160405280156128d05781602001602082028036833780820191505090505b50905030816000815181106128e8576128e7613585565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561298a57600080fd5b505afa15801561299e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c29190613d6f565b816001815181106129d6576129d5613585565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612a3d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661197c565b1015612a7357612a7230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611b0f565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad7959493929190613e5d565b600060405180830381600087803b158015612af157600080fd5b505af1158015612b05573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b5961120e565b426040518863ffffffff1660e01b8152600401612b7b96959493929190613eb7565b6060604051808303818588803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bcd9190613f2d565b5050505050565b6000819050919050565b612be781612bd4565b82525050565b6000602082019050612c026000830184612bde565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c42578082015181840152602081019050612c27565b83811115612c51576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7382612c08565b612c7d8185612c13565b9350612c8d818560208601612c24565b612c9681612c57565b840191505092915050565b60006020820190508181036000830152612cbb8184612c68565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cf882612ccd565b9050919050565b612d0881612ced565b8114612d1357600080fd5b50565b600081359050612d2581612cff565b92915050565b612d3481612bd4565b8114612d3f57600080fd5b50565b600081359050612d5181612d2b565b92915050565b60008060408385031215612d6e57612d6d612cc3565b5b6000612d7c85828601612d16565b9250506020612d8d85828601612d42565b9150509250929050565b60008115159050919050565b612dac81612d97565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b6000819050919050565b6000612df2612ded612de884612ccd565b612dcd565b612ccd565b9050919050565b6000612e0482612dd7565b9050919050565b6000612e1682612df9565b9050919050565b612e2681612e0b565b82525050565b6000602082019050612e416000830184612e1d565b92915050565b600080600060608486031215612e6057612e5f612cc3565b5b6000612e6e86828701612d16565b9350506020612e7f86828701612d16565b9250506040612e9086828701612d42565b9150509250925092565b600060ff82169050919050565b612eb081612e9a565b82525050565b6000602082019050612ecb6000830184612ea7565b92915050565b600060208284031215612ee757612ee6612cc3565b5b6000612ef584828501612d16565b91505092915050565b612f0781612ced565b82525050565b6000602082019050612f226000830184612efe565b92915050565b60008060408385031215612f3f57612f3e612cc3565b5b6000612f4d85828601612d42565b9250506020612f5e85828601612d42565b9150509250929050565b612f7181612d97565b8114612f7c57600080fd5b50565b600081359050612f8e81612f68565b92915050565b60008060408385031215612fab57612faa612cc3565b5b6000612fb985828601612d16565b9250506020612fca85828601612f7f565b9150509250929050565b600060208284031215612fea57612fe9612cc3565b5b6000612ff884828501612d42565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261302657613025613001565b5b8235905067ffffffffffffffff81111561304357613042613006565b5b60208301915083602082028301111561305f5761305e61300b565b5b9250929050565b60008060006040848603121561307f5761307e612cc3565b5b600084013567ffffffffffffffff81111561309d5761309c612cc8565b5b6130a986828701613010565b935093505060206130bc86828701612f7f565b9150509250925092565b6000602082840312156130dc576130db612cc3565b5b60006130ea84828501612f7f565b91505092915050565b6000806040838503121561310a57613109612cc3565b5b600061311885828601612d16565b925050602061312985828601612d16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061317a57607f821691505b6020821081141561318e5761318d613133565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006131f0602883612c13565b91506131fb82613194565b604082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061326082612bd4565b915061326b83612bd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132a05761329f613226565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132e1602083612c13565b91506132ec826132ab565b602082019050919050565b60006020820190508181036000830152613310816132d4565b9050919050565b7f434a503a2054686520726f7574657220616c726561647920686173207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613373602883612c13565b915061337e82613317565b604082019050919050565b600060208201905081810360008301526133a281613366565b9050919050565b7f434a503a205468652050616e63616b655377617020706169722063616e6e6f7460008201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b657460208201527f4d616b6572506169727300000000000000000000000000000000000000000000604082015250565b600061342b604a83612c13565b9150613436826133a9565b606082019050919050565b6000602082019050818103600083015261345a8161341e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134bd602583612c13565b91506134c882613461565b604082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b600061354f602f83612c13565b915061355a826134f3565b604082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006135bf82612bd4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135f2576135f1613226565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61362181612ced565b82525050565b60006136338383613618565b60208301905092915050565b600061364e6020840184612d16565b905092915050565b6000602082019050919050565b600061366f83856135fd565b935061367a8261360e565b8060005b858110156136b357613690828461363f565b61369a8882613627565b97506136a583613656565b92505060018101905061367e565b5085925050509392505050565b600060408201905081810360008301526136db818587613663565b90506136ea6020830184612da3565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061374e602683612c13565b9150613759826136f2565b604082019050919050565b6000602082019050818103600083015261377d81613741565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137e0602483612c13565b91506137eb82613784565b604082019050919050565b6000602082019050818103600083015261380f816137d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613872602283612c13565b915061387d82613816565b604082019050919050565b600060208201905081810360008301526138a181613865565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613904602583612c13565b915061390f826138a8565b604082019050919050565b60006020820190508181036000830152613933816138f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613996602383612c13565b91506139a18261393a565b604082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613a28602b83612c13565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613aba602c83612c13565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b6000613b4c603d83612c13565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613bde602683612c13565b9150613be982613b82565b604082019050919050565b60006020820190508181036000830152613c0d81613bd1565b9050919050565b6000604082019050613c296000830185612bde565b613c366020830184612bde565b9392505050565b6000613c4882612bd4565b9150613c5383612bd4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c8c57613c8b613226565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cd182612bd4565b9150613cdc83612bd4565b925082613cec57613ceb613c97565b5b828204905092915050565b6000613d0282612bd4565b9150613d0d83612bd4565b925082821015613d2057613d1f613226565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6981612cff565b92915050565b600060208284031215613d8557613d84612cc3565b5b6000613d9384828501613d5a565b91505092915050565b6000819050919050565b6000613dc1613dbc613db784613d9c565b612dcd565b612bd4565b9050919050565b613dd181613da6565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000613e0a82613dd7565b613e1481856135fd565b9350613e1f83613de2565b8060005b83811015613e50578151613e378882613627565b9750613e4283613df2565b925050600181019050613e23565b5085935050505092915050565b600060a082019050613e726000830188612bde565b613e7f6020830187613dc8565b8181036040830152613e918186613dff565b9050613ea06060830185612efe565b613ead6080830184612bde565b9695505050505050565b600060c082019050613ecc6000830189612efe565b613ed96020830188612bde565b613ee66040830187613dc8565b613ef36060830186613dc8565b613f006080830185612efe565b613f0d60a0830184612bde565b979650505050505050565b600081519050613f2781612d2b565b92915050565b600080600060608486031215613f4657613f45612cc3565b5b6000613f5486828701613f18565b9350506020613f6586828701613f18565b9250506040613f7686828701613f18565b915050925092509256fea2646970667358221220f70b5b9ed3adbac16397afc011724222fb03b99840c708df4a82826800b299cb64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102135760003560e01c806370a0823111610118578063b3b5e043116100a0578063c49b9a801161006f578063c49b9a80146107d0578063dd62ed3e146107f9578063e2f4560514610836578063ecfca89914610861578063f2fde38b1461088c5761021a565b8063b3b5e04314610718578063b62496f514610741578063c02466681461077e578063c492f046146107a75761021a565b806395d89b41116100e757806395d89b411461061f57806398118cb41461064a5780639a7a23d614610675578063a457c2d71461069e578063a9059cbb146106db5761021a565b806370a0823114610575578063715018a6146105b25780637b208769146105c95780638da5cb5b146105f45761021a565b806349bd5a5e1161019b5780635aa821a91161016a5780635aa821a9146104925780635b89029c146104bd5780635c38ffe2146104e6578063658c27a91461050f57806365b8dbc01461054c5761021a565b806349bd5a5e146103d65780634a74bb02146104015780634fbee1931461042c57806352f7c988146104695761021a565b806318160ddd116101e257806318160ddd146102dd57806323b872dd14610308578063313ce56714610345578063395093511461037057806349928a50146103ad5761021a565b806302259e9e1461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108b5565b6040516102419190612bed565b60405180910390f35b34801561025657600080fd5b5061025f6108bb565b60405161026c9190612ca1565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612d57565b61094d565b6040516102a99190612db2565b60405180910390f35b3480156102be57600080fd5b506102c761096b565b6040516102d49190612e2c565b60405180910390f35b3480156102e957600080fd5b506102f2610991565b6040516102ff9190612bed565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190612e47565b61099b565b60405161033c9190612db2565b60405180910390f35b34801561035157600080fd5b5061035a610a93565b6040516103679190612eb6565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612d57565b610a9c565b6040516103a49190612db2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612ed1565b610b48565b005b3480156103e257600080fd5b506103eb610c77565b6040516103f89190612f0d565b60405180910390f35b34801561040d57600080fd5b50610416610c9b565b6040516104239190612db2565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612ed1565b610cae565b6040516104609190612db2565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190612f28565b610d04565b005b34801561049e57600080fd5b506104a7610d92565b6040516104b49190612bed565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612f94565b610d98565b005b3480156104f257600080fd5b5061050d60048036038101906105089190612fd4565b610e6f565b005b34801561051b57600080fd5b5061053660048036038101906105319190612ed1565b610ef5565b6040516105439190612db2565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190612ed1565b610f4b565b005b34801561058157600080fd5b5061059c60048036038101906105979190612ed1565b611118565b6040516105a99190612bed565b60405180910390f35b3480156105be57600080fd5b506105c7611160565b005b3480156105d557600080fd5b506105de6111e8565b6040516105eb9190612f0d565b60405180910390f35b34801561060057600080fd5b5061060961120e565b6040516106169190612f0d565b60405180910390f35b34801561062b57600080fd5b50610634611238565b6040516106419190612ca1565b60405180910390f35b34801561065657600080fd5b5061065f6112ca565b60405161066c9190612bed565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190612f94565b6112d0565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190612d57565b6113e9565b6040516106d29190612db2565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190612d57565b6114d4565b60405161070f9190612db2565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190612fd4565b6114f2565b005b34801561074d57600080fd5b5061076860048036038101906107639190612ed1565b611578565b6040516107759190612db2565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612f94565b611598565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613066565b611750565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906130c6565b6118ac565b005b34801561080557600080fd5b50610820600480360381019061081b91906130f3565b61197c565b60405161082d9190612bed565b60405180910390f35b34801561084257600080fd5b5061084b611a03565b6040516108589190612bed565b60405180910390f35b34801561086d57600080fd5b50610876611a09565b6040516108839190612bed565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190612ed1565b611a0f565b005b60075481565b6060600380546108ca90613162565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613162565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061096161095a611b07565b8484611b0f565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109a8848484611cda565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109f3611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a90613206565b60405180910390fd5b610a8785610a7f611b07565b858403611b0f565b60019150509392505050565b60006012905090565b6000610b3e610aa9611b07565b848460016000610ab7611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b399190613255565b611b0f565b6001905092915050565b610b50611b07565b73ffffffffffffffffffffffffffffffffffffffff16610b6e61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906132f7565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000084b25067b20f97108d51458f230bb2d5c4bc3ccc81565b600660159054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d0c611b07565b73ffffffffffffffffffffffffffffffffffffffff16610d2a61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d77906132f7565b60405180910390fd5b81600a8190555080600b819055505050565b60085481565b610da0611b07565b73ffffffffffffffffffffffffffffffffffffffff16610dbe61120e565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906132f7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610e77611b07565b73ffffffffffffffffffffffffffffffffffffffff16610e9561120e565b73ffffffffffffffffffffffffffffffffffffffff1614610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906132f7565b60405180910390fd5b8060078190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f53611b07565b73ffffffffffffffffffffffffffffffffffffffff16610f7161120e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906132f7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613389565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611168611b07565b73ffffffffffffffffffffffffffffffffffffffff1661118661120e565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d3906132f7565b60405180910390fd5b6111e660006122d4565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461124790613162565b80601f016020809104026020016040519081016040528092919081815260200182805461127390613162565b80156112c05780601f10611295576101008083540402835291602001916112c0565b820191906000526020600020905b8154815290600101906020018083116112a357829003601f168201915b5050505050905090565b600a5481565b6112d8611b07565b73ffffffffffffffffffffffffffffffffffffffff166112f661120e565b73ffffffffffffffffffffffffffffffffffffffff161461134c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611343906132f7565b60405180910390fd5b7f00000000000000000000000084b25067b20f97108d51458f230bb2d5c4bc3ccc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613441565b60405180910390fd5b6113e5828261239a565b5050565b600080600160006113f8611b07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906134d3565b60405180910390fd5b6114c96114c0611b07565b85858403611b0f565b600191505092915050565b60006114e86114e1611b07565b8484611cda565b6001905092915050565b6114fa611b07565b73ffffffffffffffffffffffffffffffffffffffff1661151861120e565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611565906132f7565b60405180910390fd5b8060088190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6115a0611b07565b73ffffffffffffffffffffffffffffffffffffffff166115be61120e565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b906132f7565b60405180910390fd5b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613565565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117449190612db2565b60405180910390a25050565b611758611b07565b73ffffffffffffffffffffffffffffffffffffffff1661177661120e565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906132f7565b60405180910390fd5b60005b8383905081101561186b5781600d60008686858181106117f2576117f1613585565b5b90506020020160208101906118079190612ed1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611863906135b4565b9150506117cf565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161189f939291906136c0565b60405180910390a1505050565b6118b4611b07565b73ffffffffffffffffffffffffffffffffffffffff166118d261120e565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906132f7565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516119719190612db2565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b611a17611b07565b73ffffffffffffffffffffffffffffffffffffffff16611a3561120e565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906132f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613764565b60405180910390fd5b611b04816122d4565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906137f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690613888565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ccd9190612bed565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d419061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db1906139ac565b60405180910390fd5b6000811415611dd457611dcf838360006124ce565b6122cf565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e775750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ecd5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f1857600854811115611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613a3e565b60405180910390fd5b5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fbb5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120115750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205c5760075481111561205b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205290613ad0565b60405180910390fd5b5b600061206730611118565b90506000600954821015905080801561208d5750600660149054906101000a900460ff16155b80156120e25750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120fa5750600660159054906101000a900460ff165b15612109576121088261274f565b5b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ad5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122025750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122c15760006122316064612223600a548761282390919063ffffffff16565b61283990919063ffffffff16565b9050600061225d606461224f600b548861282390919063ffffffff16565b61283990919063ffffffff16565b9050612284612275828461284f90919063ffffffff16565b8661286590919063ffffffff16565b94506122918730846124ce565b6122be87600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124ce565b50505b6122cc8585856124ce565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490613b62565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561253e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125359061391a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906139ac565b60405180910390fd5b6125b983838361287b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690613bf4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d29190613255565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127369190612bed565b60405180910390a3612749848484612880565b50505050565b6001600660146101000a81548160ff021916908315150217905550600061278060028361283990919063ffffffff16565b90506000612797828461286590919063ffffffff16565b905060004790506127a783612885565b60006127bc824761286590919063ffffffff16565b90506127c88382612b0d565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516127f9929190613c14565b60405180910390a1505050506000600660146101000a81548160ff02191690831515021790555050565b600081836128319190613c3d565b905092915050565b600081836128479190613cc6565b905092915050565b6000818361285d9190613255565b905092915050565b600081836128739190613cf7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128a2576128a1613d2b565b5b6040519080825280602002602001820160405280156128d05781602001602082028036833780820191505090505b50905030816000815181106128e8576128e7613585565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561298a57600080fd5b505afa15801561299e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c29190613d6f565b816001815181106129d6576129d5613585565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081612a3d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661197c565b1015612a7357612a7230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611b0f565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad7959493929190613e5d565b600060405180830381600087803b158015612af157600080fd5b505af1158015612b05573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b5961120e565b426040518863ffffffff1660e01b8152600401612b7b96959493929190613eb7565b6060604051808303818588803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bcd9190613f2d565b5050505050565b6000819050919050565b612be781612bd4565b82525050565b6000602082019050612c026000830184612bde565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c42578082015181840152602081019050612c27565b83811115612c51576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7382612c08565b612c7d8185612c13565b9350612c8d818560208601612c24565b612c9681612c57565b840191505092915050565b60006020820190508181036000830152612cbb8184612c68565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cf882612ccd565b9050919050565b612d0881612ced565b8114612d1357600080fd5b50565b600081359050612d2581612cff565b92915050565b612d3481612bd4565b8114612d3f57600080fd5b50565b600081359050612d5181612d2b565b92915050565b60008060408385031215612d6e57612d6d612cc3565b5b6000612d7c85828601612d16565b9250506020612d8d85828601612d42565b9150509250929050565b60008115159050919050565b612dac81612d97565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b6000819050919050565b6000612df2612ded612de884612ccd565b612dcd565b612ccd565b9050919050565b6000612e0482612dd7565b9050919050565b6000612e1682612df9565b9050919050565b612e2681612e0b565b82525050565b6000602082019050612e416000830184612e1d565b92915050565b600080600060608486031215612e6057612e5f612cc3565b5b6000612e6e86828701612d16565b9350506020612e7f86828701612d16565b9250506040612e9086828701612d42565b9150509250925092565b600060ff82169050919050565b612eb081612e9a565b82525050565b6000602082019050612ecb6000830184612ea7565b92915050565b600060208284031215612ee757612ee6612cc3565b5b6000612ef584828501612d16565b91505092915050565b612f0781612ced565b82525050565b6000602082019050612f226000830184612efe565b92915050565b60008060408385031215612f3f57612f3e612cc3565b5b6000612f4d85828601612d42565b9250506020612f5e85828601612d42565b9150509250929050565b612f7181612d97565b8114612f7c57600080fd5b50565b600081359050612f8e81612f68565b92915050565b60008060408385031215612fab57612faa612cc3565b5b6000612fb985828601612d16565b9250506020612fca85828601612f7f565b9150509250929050565b600060208284031215612fea57612fe9612cc3565b5b6000612ff884828501612d42565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261302657613025613001565b5b8235905067ffffffffffffffff81111561304357613042613006565b5b60208301915083602082028301111561305f5761305e61300b565b5b9250929050565b60008060006040848603121561307f5761307e612cc3565b5b600084013567ffffffffffffffff81111561309d5761309c612cc8565b5b6130a986828701613010565b935093505060206130bc86828701612f7f565b9150509250925092565b6000602082840312156130dc576130db612cc3565b5b60006130ea84828501612f7f565b91505092915050565b6000806040838503121561310a57613109612cc3565b5b600061311885828601612d16565b925050602061312985828601612d16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061317a57607f821691505b6020821081141561318e5761318d613133565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006131f0602883612c13565b91506131fb82613194565b604082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061326082612bd4565b915061326b83612bd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132a05761329f613226565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132e1602083612c13565b91506132ec826132ab565b602082019050919050565b60006020820190508181036000830152613310816132d4565b9050919050565b7f434a503a2054686520726f7574657220616c726561647920686173207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000613373602883612c13565b915061337e82613317565b604082019050919050565b600060208201905081810360008301526133a281613366565b9050919050565b7f434a503a205468652050616e63616b655377617020706169722063616e6e6f7460008201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b657460208201527f4d616b6572506169727300000000000000000000000000000000000000000000604082015250565b600061342b604a83612c13565b9150613436826133a9565b606082019050919050565b6000602082019050818103600083015261345a8161341e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134bd602583612c13565b91506134c882613461565b604082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f434a503a204163636f756e7420697320616c7265616479207468652076616c7560008201527f65206f6620276578636c75646564270000000000000000000000000000000000602082015250565b600061354f602f83612c13565b915061355a826134f3565b604082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006135bf82612bd4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135f2576135f1613226565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61362181612ced565b82525050565b60006136338383613618565b60208301905092915050565b600061364e6020840184612d16565b905092915050565b6000602082019050919050565b600061366f83856135fd565b935061367a8261360e565b8060005b858110156136b357613690828461363f565b61369a8882613627565b97506136a583613656565b92505060018101905061367e565b5085925050509392505050565b600060408201905081810360008301526136db818587613663565b90506136ea6020830184612da3565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061374e602683612c13565b9150613759826136f2565b604082019050919050565b6000602082019050818103600083015261377d81613741565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137e0602483612c13565b91506137eb82613784565b604082019050919050565b6000602082019050818103600083015261380f816137d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613872602283612c13565b915061387d82613816565b604082019050919050565b600060208201905081810360008301526138a181613865565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613904602583612c13565b915061390f826138a8565b604082019050919050565b60006020820190508181036000830152613933816138f7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613996602383612c13565b91506139a18261393a565b604082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b6000613a28602b83612c13565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613aba602c83612c13565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f434a503a204175746f6d61746564206d61726b6574206d616b6572207061697260008201527f20697320616c72656164792073657420746f20746861742076616c7565000000602082015250565b6000613b4c603d83612c13565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613bde602683612c13565b9150613be982613b82565b604082019050919050565b60006020820190508181036000830152613c0d81613bd1565b9050919050565b6000604082019050613c296000830185612bde565b613c366020830184612bde565b9392505050565b6000613c4882612bd4565b9150613c5383612bd4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c8c57613c8b613226565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cd182612bd4565b9150613cdc83612bd4565b925082613cec57613ceb613c97565b5b828204905092915050565b6000613d0282612bd4565b9150613d0d83612bd4565b925082821015613d2057613d1f613226565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6981612cff565b92915050565b600060208284031215613d8557613d84612cc3565b5b6000613d9384828501613d5a565b91505092915050565b6000819050919050565b6000613dc1613dbc613db784613d9c565b612dcd565b612bd4565b9050919050565b613dd181613da6565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000613e0a82613dd7565b613e1481856135fd565b9350613e1f83613de2565b8060005b83811015613e50578151613e378882613627565b9750613e4283613df2565b925050600181019050613e23565b5085935050505092915050565b600060a082019050613e726000830188612bde565b613e7f6020830187613dc8565b8181036040830152613e918186613dff565b9050613ea06060830185612efe565b613ead6080830184612bde565b9695505050505050565b600060c082019050613ecc6000830189612efe565b613ed96020830188612bde565b613ee66040830187613dc8565b613ef36060830186613dc8565b613f006080830185612efe565b613f0d60a0830184612bde565b979650505050505050565b600081519050613f2781612d2b565b92915050565b600080600060608486031215613f4657613f45612cc3565b5b6000613f5486828701613f18565b9350506020613f6586828701613f18565b9250506040613f7686828701613f18565b915050925092509256fea2646970667358221220f70b5b9ed3adbac16397afc011724222fb03b99840c708df4a82826800b299cb64736f6c63430008090033
Deployed Bytecode Sourcemap
39704:9631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39965:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5575:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7742:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39783:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6695:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8393:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6537:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9294:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43839:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39831:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39916:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44918:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41431:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40039:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43697:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41598:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45055:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43070:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6866:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17097:94;;;;;;;;;;;;;:::i;:::-;;40254:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16446:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5794:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40180:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44324:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10012:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7206:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41746:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40667:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43390:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44012:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45190:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7444:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40112:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40218:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17346:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39965:67;;;;:::o;5575:100::-;5629:13;5662:5;5655:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5575:100;:::o;7742:169::-;7825:4;7842:39;7851:12;:10;:12::i;:::-;7865:7;7874:6;7842:8;:39::i;:::-;7899:4;7892:11;;7742:169;;;;:::o;39783:41::-;;;;;;;;;;;;;:::o;6695:108::-;6756:7;6783:12;;6776:19;;6695:108;:::o;8393:492::-;8533:4;8550:36;8560:6;8568:9;8579:6;8550:9;:36::i;:::-;8599:24;8626:11;:19;8638:6;8626:19;;;;;;;;;;;;;;;:33;8646:12;:10;:12::i;:::-;8626:33;;;;;;;;;;;;;;;;8599:60;;8698:6;8678:16;:26;;8670:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8785:57;8794:6;8802:12;:10;:12::i;:::-;8835:6;8816:16;:25;8785:8;:57::i;:::-;8873:4;8866:11;;;8393:492;;;;;:::o;6537:93::-;6595:5;6620:2;6613:9;;6537:93;:::o;9294:215::-;9382:4;9399:80;9408:12;:10;:12::i;:::-;9422:7;9468:10;9431:11;:25;9443:12;:10;:12::i;:::-;9431:25;;;;;;;;;;;;;;;:34;9457:7;9431:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9399:8;:80::i;:::-;9497:4;9490:11;;9294:215;;;;:::o;43839:165::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43945:4:::1;43912:20;:30;43933:8;43912:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;43992:4;43960:19;:29;43980:8;43960:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;43839:165:::0;:::o;39831:38::-;;;:::o;39916:40::-;;;;;;;;;;;;;:::o;44918:125::-;44983:4;45007:19;:28;45027:7;45007:28;;;;;;;;;;;;;;;;;;;;;;;;;45000:35;;44918:125;;;:::o;41431:159::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41534:13:::1;41519:12;:28;;;;41571:11;41558:10;:24;;;;41431:159:::0;;:::o;40039:66::-;;;;:::o;43697:134::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43818:5:::1;43785:20;:30;43806:8;43785:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;43697:134:::0;;:::o;41598:136::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41710:16:::1;41683:24;:43;;;;41598:136:::0;:::o;45055:127::-;45121:4;45145:20;:29;45166:7;45145:29;;;;;;;;;;;;;;;;;;;;;;;;;45138:36;;45055:127;;;:::o;43070:312::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43179:15:::1;;;;;;;;;;;43157:38;;:10;:38;;;;43149:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;43298:15;;;;;;;;;;;43256:59;;43278:10;43256:59;;;;;;;;;;;;43363:10;43326:15;;:48;;;;;;;;;;;;;;;;;;43070:312:::0;:::o;6866:127::-;6940:7;6967:9;:18;6977:7;6967:18;;;;;;;;;;;;;;;;6960:25;;6866:127;;;:::o;17097:94::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17162:21:::1;17180:1;17162:9;:21::i;:::-;17097:94::o:0;40254:74::-;;;;;;;;;;;;;:::o;16446:87::-;16492:7;16519:6;;;;;;;;;;;16512:13;;16446:87;:::o;5794:104::-;5850:13;5883:7;5876:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5794:104;:::o;40180:31::-;;;;:::o;44324:261::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44431:13:::1;44423:21;;:4;:21;;;;44415:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;44536:41;44565:4;44571:5;44536:28;:41::i;:::-;44324:261:::0;;:::o;10012:413::-;10105:4;10122:24;10149:11;:25;10161:12;:10;:12::i;:::-;10149:25;;;;;;;;;;;;;;;:34;10175:7;10149:34;;;;;;;;;;;;;;;;10122:61;;10222:15;10202:16;:35;;10194:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10315:67;10324:12;:10;:12::i;:::-;10338:7;10366:15;10347:16;:34;10315:8;:67::i;:::-;10413:4;10406:11;;;10012:413;;;;:::o;7206:175::-;7292:4;7309:42;7319:12;:10;:12::i;:::-;7333:9;7344:6;7309:9;:42::i;:::-;7369:4;7362:11;;7206:175;;;;:::o;41746:132::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41855:15:::1;41829:23;:41;;;;41746:132:::0;:::o;40667:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;43390:295::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43515:8:::1;43483:40;;:19;:28;43503:7;43483:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;43475:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43617:8;43586:19;:28;43606:7;43586:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43659:7;43643:34;;;43668:8;43643:34;;;;;;:::i;:::-;;;;;;;;43390:295:::0;;:::o;44012:304::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44129:9:::1;44125:115;44148:8;;:15;;44144:1;:19;44125:115;;;44220:8;44185:19;:32;44205:8;;44214:1;44205:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44185:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;44165:3;;;;;:::i;:::-;;;;44125:115;;;;44257:51;44289:8;;44299;44257:51;;;;;;;;:::i;:::-;;;;;;;;44012:304:::0;;;:::o;45190:171::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45291:8:::1;45267:21;;:32;;;;;;;;;;;;;;;;;;45315:38;45344:8;45315:38;;;;;;:::i;:::-;;;;;;;;45190:171:::0;:::o;7444:151::-;7533:7;7560:11;:18;7572:5;7560:18;;;;;;;;;;;;;;;:27;7579:7;7560:27;;;;;;;;;;;;;;;;7553:34;;7444:151;;;;:::o;40112:59::-;;;;:::o;40218:29::-;;;;:::o;17346:192::-;16677:12;:10;:12::i;:::-;16666:23;;:7;:5;:7::i;:::-;:23;;;16658:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17455:1:::1;17435:22;;:8;:22;;;;17427:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17511:19;17521:8;17511:9;:19::i;:::-;17346:192:::0;:::o;101:98::-;154:7;181:10;174:17;;101:98;:::o;13696:380::-;13849:1;13832:19;;:5;:19;;;;13824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13930:1;13911:21;;:7;:21;;;;13903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14014:6;13984:11;:18;13996:5;13984:18;;;;;;;;;;;;;;;:27;14003:7;13984:27;;;;;;;;;;;;;;;:36;;;;14052:7;14036:32;;14045:5;14036:32;;;14061:6;14036:32;;;;;;:::i;:::-;;;;;;;;13696:380;;;:::o;45369:1856::-;45517:1;45501:18;;:4;:18;;;;45493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45594:1;45580:16;;:2;:16;;;;45572:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45662:1;45652:6;:11;45649:92;;;45680:28;45696:4;45702:2;45706:1;45680:15;:28::i;:::-;45723:7;;45649:92;45764:25;:31;45790:4;45764:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;;45801:20;:26;45822:4;45801:26;;;;;;;;;;;;;;;;;;;;;;;;;45800:27;45764:64;:95;;;;;45834:20;:24;45855:2;45834:24;;;;;;;;;;;;;;;;;;;;;;;;;45833:25;45764:95;45761:215;;;45893:23;;45883:6;:33;;45875:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45761:215;45991:25;:29;46017:2;45991:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;46026:20;:26;46047:4;46026:26;;;;;;;;;;;;;;;;;;;;;;;;;46025:27;45991:62;:93;;;;;46059:20;:24;46080:2;46059:24;;;;;;;;;;;;;;;;;;;;;;;;;46058:25;45991:93;45988:215;;;46118:24;;46108:6;:34;;46100:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45988:215;46222:28;46253:24;46271:4;46253:9;:24::i;:::-;46222:55;;46298:24;46349:18;;46325:20;:42;;46298:69;;46404:19;:53;;;;;46441:16;;;;;;;;;;;46440:17;46404:53;:99;;;;;46474:25;:29;46500:2;46474:29;;;;;;;;;;;;;;;;;;;;;;;;;46404:99;:138;;;;;46521:21;;;;;;;;;;;46404:138;46387:230;;;46569:36;46584:20;46569:14;:36::i;:::-;46387:230;46719:19;:25;46739:4;46719:25;;;;;;;;;;;;;;;;;;;;;;;;;46718:26;:54;;;;;46749:19;:23;46769:2;46749:23;;;;;;;;;;;;;;;;;;;;;;;;;46748:24;46718:54;:87;;;;;46776:25;:29;46802:2;46776:29;;;;;;;;;;;;;;;;;;;;;;;;;46718:87;46715:455;;;46819:22;46844:33;46873:3;46844:24;46855:12;;46844:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46819:58;;46892:20;46915:31;46942:3;46915:22;46926:10;;46915:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;46892:54;;46967:44;46978:32;46997:12;46978:14;:18;;:32;;;;:::i;:::-;46967:6;:10;;:44;;;;:::i;:::-;46958:53;;47026:52;47042:4;47056;47063:14;47026:15;:52::i;:::-;47094:50;47110:4;47116:13;;;;;;;;;;;47131:12;47094:15;:50::i;:::-;46807:363;;46715:455;47182:33;47198:4;47204:2;47208:6;47182:15;:33::i;:::-;45482:1743;;45369:1856;;;;:::o;17546:173::-;17602:16;17621:6;;;;;;;;;;;17602:25;;17647:8;17638:6;;:17;;;;;;;;;;;;;;;;;;17702:8;17671:40;;17692:8;17671:40;;;;;;;;;;;;17591:128;17546:173;:::o;44593:313::-;44719:5;44684:40;;:25;:31;44710:4;44684:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;44676:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;44835:5;44801:25;:31;44827:4;44801:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44892:5;44858:40;;44886:4;44858:40;;;;;;;;;;;;44593:313;;:::o;10915:733::-;11073:1;11055:20;;:6;:20;;;;11047:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11157:1;11136:23;;:9;:23;;;;11128:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11212:47;11233:6;11241:9;11252:6;11212:20;:47::i;:::-;11272:21;11296:9;:17;11306:6;11296:17;;;;;;;;;;;;;;;;11272:41;;11349:6;11332:13;:23;;11324:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11470:6;11454:13;:22;11434:9;:17;11444:6;11434:17;;;;;;;;;;;;;;;:42;;;;11522:6;11498:9;:20;11508:9;11498:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11563:9;11546:35;;11555:6;11546:35;;;11574:6;11546:35;;;;;;:::i;:::-;;;;;;;;11594:46;11614:6;11622:9;11633:6;11594:19;:46::i;:::-;11036:612;10915:733;;;:::o;47234:983::-;41364:4;41345:16;;:23;;;;;;;;;;;;;;;;;;47387:12:::1;47402:27;47427:1;47402:20;:24;;:27;;;;:::i;:::-;47387:42;;47440:17;47460:30;47485:4;47460:20;:24;;:30;;;;:::i;:::-;47440:50;;47768:22;47793:21;47768:46;;47859:22;47876:4;47859:16;:22::i;:::-;48012:18;48033:41;48059:14;48033:21;:25;;:41;;;;:::i;:::-;48012:62;;48124:35;48137:9;48148:10;48124:12;:35::i;:::-;48177:32;48192:4;48198:10;48177:32;;;;;;;:::i;:::-;;;;;;;;47308:909;;;;41410:5:::0;41391:16;;:24;;;;;;;;;;;;;;;;;;47234:983;:::o;28338:98::-;28396:7;28427:1;28423;:5;;;;:::i;:::-;28416:12;;28338:98;;;;:::o;28737:::-;28795:7;28826:1;28822;:5;;;;:::i;:::-;28815:12;;28737:98;;;;:::o;27600:::-;27658:7;27689:1;27685;:5;;;;:::i;:::-;27678:12;;27600:98;;;;:::o;27981:::-;28039:7;28070:1;28066;:5;;;;:::i;:::-;28059:12;;27981:98;;;;:::o;14676:125::-;;;;:::o;15405:124::-;;;;:::o;48225:704::-;48363:21;48401:1;48387:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48363:40;;48432:4;48414;48419:1;48414:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48458:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48448:4;48453:1;48448:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48549:11;48496:50;48514:4;48529:15;;;;;;;;;;;48496:9;:50::i;:::-;:64;48493:156;;;48575:62;48592:4;48607:15;;;;;;;;;;;48634:1;48625:11;48575:8;:62::i;:::-;48493:156;48687:15;;;;;;;;;;;:66;;;48768:11;48794:1;48838:4;48865;48885:15;48687:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48280:649;48225:704;:::o;48937:391::-;49058:15;;;;;;;;;;;:31;;;49097:9;49130:4;49150:11;49176:1;49219;49262:7;:5;:7::i;:::-;49284:15;49058:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48937:391;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:329::-;5938:6;5987:2;5975:9;5966:7;5962:23;5958:32;5955:119;;;5993:79;;:::i;:::-;5955:119;6113:1;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6084:117;5879:329;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:468::-;7372:6;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7307:468;;;;;:::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:117::-;8225:1;8222;8215:12;8239:117;8348:1;8345;8338:12;8362:117;8471:1;8468;8461:12;8502:568;8575:8;8585:6;8635:3;8628:4;8620:6;8616:17;8612:27;8602:122;;8643:79;;:::i;:::-;8602:122;8756:6;8743:20;8733:30;;8786:18;8778:6;8775:30;8772:117;;;8808:79;;:::i;:::-;8772:117;8922:4;8914:6;8910:17;8898:29;;8976:3;8968:4;8960:6;8956:17;8946:8;8942:32;8939:41;8936:128;;;8983:79;;:::i;:::-;8936:128;8502:568;;;;;:::o;9076:698::-;9168:6;9176;9184;9233:2;9221:9;9212:7;9208:23;9204:32;9201:119;;;9239:79;;:::i;:::-;9201:119;9387:1;9376:9;9372:17;9359:31;9417:18;9409:6;9406:30;9403:117;;;9439:79;;:::i;:::-;9403:117;9552:80;9624:7;9615:6;9604:9;9600:22;9552:80;:::i;:::-;9534:98;;;;9330:312;9681:2;9707:50;9749:7;9740:6;9729:9;9725:22;9707:50;:::i;:::-;9697:60;;9652:115;9076:698;;;;;:::o;9780:323::-;9836:6;9885:2;9873:9;9864:7;9860:23;9856:32;9853:119;;;9891:79;;:::i;:::-;9853:119;10011:1;10036:50;10078:7;10069:6;10058:9;10054:22;10036:50;:::i;:::-;10026:60;;9982:114;9780:323;;;;:::o;10109:474::-;10177:6;10185;10234:2;10222:9;10213:7;10209:23;10205:32;10202:119;;;10240:79;;:::i;:::-;10202:119;10360:1;10385:53;10430:7;10421:6;10410:9;10406:22;10385:53;:::i;:::-;10375:63;;10331:117;10487:2;10513:53;10558:7;10549:6;10538:9;10534:22;10513:53;:::i;:::-;10503:63;;10458:118;10109:474;;;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:320;10819:6;10856:1;10850:4;10846:12;10836:22;;10903:1;10897:4;10893:12;10924:18;10914:81;;10980:4;10972:6;10968:17;10958:27;;10914:81;11042:2;11034:6;11031:14;11011:18;11008:38;11005:84;;;11061:18;;:::i;:::-;11005:84;10826:269;10775:320;;;:::o;11101:227::-;11241:34;11237:1;11229:6;11225:14;11218:58;11310:10;11305:2;11297:6;11293:15;11286:35;11101:227;:::o;11334:366::-;11476:3;11497:67;11561:2;11556:3;11497:67;:::i;:::-;11490:74;;11573:93;11662:3;11573:93;:::i;:::-;11691:2;11686:3;11682:12;11675:19;;11334:366;;;:::o;11706:419::-;11872:4;11910:2;11899:9;11895:18;11887:26;;11959:9;11953:4;11949:20;11945:1;11934:9;11930:17;11923:47;11987:131;12113:4;11987:131;:::i;:::-;11979:139;;11706:419;;;:::o;12131:180::-;12179:77;12176:1;12169:88;12276:4;12273:1;12266:15;12300:4;12297:1;12290:15;12317:305;12357:3;12376:20;12394:1;12376:20;:::i;:::-;12371:25;;12410:20;12428:1;12410:20;:::i;:::-;12405:25;;12564:1;12496:66;12492:74;12489:1;12486:81;12483:107;;;12570:18;;:::i;:::-;12483:107;12614:1;12611;12607:9;12600:16;;12317:305;;;;:::o;12628:182::-;12768:34;12764:1;12756:6;12752:14;12745:58;12628:182;:::o;12816:366::-;12958:3;12979:67;13043:2;13038:3;12979:67;:::i;:::-;12972:74;;13055:93;13144:3;13055:93;:::i;:::-;13173:2;13168:3;13164:12;13157:19;;12816:366;;;:::o;13188:419::-;13354:4;13392:2;13381:9;13377:18;13369:26;;13441:9;13435:4;13431:20;13427:1;13416:9;13412:17;13405:47;13469:131;13595:4;13469:131;:::i;:::-;13461:139;;13188:419;;;:::o;13613:227::-;13753:34;13749:1;13741:6;13737:14;13730:58;13822:10;13817:2;13809:6;13805:15;13798:35;13613:227;:::o;13846:366::-;13988:3;14009:67;14073:2;14068:3;14009:67;:::i;:::-;14002:74;;14085:93;14174:3;14085:93;:::i;:::-;14203:2;14198:3;14194:12;14187:19;;13846:366;;;:::o;14218:419::-;14384:4;14422:2;14411:9;14407:18;14399:26;;14471:9;14465:4;14461:20;14457:1;14446:9;14442:17;14435:47;14499:131;14625:4;14499:131;:::i;:::-;14491:139;;14218:419;;;:::o;14643:298::-;14783:34;14779:1;14771:6;14767:14;14760:58;14852:34;14847:2;14839:6;14835:15;14828:59;14921:12;14916:2;14908:6;14904:15;14897:37;14643:298;:::o;14947:366::-;15089:3;15110:67;15174:2;15169:3;15110:67;:::i;:::-;15103:74;;15186:93;15275:3;15186:93;:::i;:::-;15304:2;15299:3;15295:12;15288:19;;14947:366;;;:::o;15319:419::-;15485:4;15523:2;15512:9;15508:18;15500:26;;15572:9;15566:4;15562:20;15558:1;15547:9;15543:17;15536:47;15600:131;15726:4;15600:131;:::i;:::-;15592:139;;15319:419;;;:::o;15744:224::-;15884:34;15880:1;15872:6;15868:14;15861:58;15953:7;15948:2;15940:6;15936:15;15929:32;15744:224;:::o;15974:366::-;16116:3;16137:67;16201:2;16196:3;16137:67;:::i;:::-;16130:74;;16213:93;16302:3;16213:93;:::i;:::-;16331:2;16326:3;16322:12;16315:19;;15974:366;;;:::o;16346:419::-;16512:4;16550:2;16539:9;16535:18;16527:26;;16599:9;16593:4;16589:20;16585:1;16574:9;16570:17;16563:47;16627:131;16753:4;16627:131;:::i;:::-;16619:139;;16346:419;;;:::o;16771:234::-;16911:34;16907:1;16899:6;16895:14;16888:58;16980:17;16975:2;16967:6;16963:15;16956:42;16771:234;:::o;17011:366::-;17153:3;17174:67;17238:2;17233:3;17174:67;:::i;:::-;17167:74;;17250:93;17339:3;17250:93;:::i;:::-;17368:2;17363:3;17359:12;17352:19;;17011:366;;;:::o;17383:419::-;17549:4;17587:2;17576:9;17572:18;17564:26;;17636:9;17630:4;17626:20;17622:1;17611:9;17607:17;17600:47;17664:131;17790:4;17664:131;:::i;:::-;17656:139;;17383:419;;;:::o;17808:180::-;17856:77;17853:1;17846:88;17953:4;17950:1;17943:15;17977:4;17974:1;17967:15;17994:233;18033:3;18056:24;18074:5;18056:24;:::i;:::-;18047:33;;18102:66;18095:5;18092:77;18089:103;;;18172:18;;:::i;:::-;18089:103;18219:1;18212:5;18208:13;18201:20;;17994:233;;;:::o;18233:184::-;18332:11;18366:6;18361:3;18354:19;18406:4;18401:3;18397:14;18382:29;;18233:184;;;;:::o;18423:102::-;18492:4;18515:3;18507:11;;18423:102;;;:::o;18531:108::-;18608:24;18626:5;18608:24;:::i;:::-;18603:3;18596:37;18531:108;;:::o;18645:179::-;18714:10;18735:46;18777:3;18769:6;18735:46;:::i;:::-;18813:4;18808:3;18804:14;18790:28;;18645:179;;;;:::o;18830:122::-;18882:5;18907:39;18942:2;18937:3;18933:12;18928:3;18907:39;:::i;:::-;18898:48;;18830:122;;;;:::o;18958:115::-;19030:4;19062;19057:3;19053:14;19045:22;;18958:115;;;:::o;19109:699::-;19238:3;19261:86;19340:6;19335:3;19261:86;:::i;:::-;19254:93;;19371:58;19423:5;19371:58;:::i;:::-;19452:7;19483:1;19468:315;19493:6;19490:1;19487:13;19468:315;;;19563:42;19598:6;19589:7;19563:42;:::i;:::-;19625:63;19684:3;19669:13;19625:63;:::i;:::-;19618:70;;19711:62;19766:6;19711:62;:::i;:::-;19701:72;;19528:255;19515:1;19512;19508:9;19503:14;;19468:315;;;19472:14;19799:3;19792:10;;19243:565;;19109:699;;;;;:::o;19814:491::-;19989:4;20027:2;20016:9;20012:18;20004:26;;20076:9;20070:4;20066:20;20062:1;20051:9;20047:17;20040:47;20104:118;20217:4;20208:6;20200;20104:118;:::i;:::-;20096:126;;20232:66;20294:2;20283:9;20279:18;20270:6;20232:66;:::i;:::-;19814:491;;;;;;:::o;20311:225::-;20451:34;20447:1;20439:6;20435:14;20428:58;20520:8;20515:2;20507:6;20503:15;20496:33;20311:225;:::o;20542:366::-;20684:3;20705:67;20769:2;20764:3;20705:67;:::i;:::-;20698:74;;20781:93;20870:3;20781:93;:::i;:::-;20899:2;20894:3;20890:12;20883:19;;20542:366;;;:::o;20914:419::-;21080:4;21118:2;21107:9;21103:18;21095:26;;21167:9;21161:4;21157:20;21153:1;21142:9;21138:17;21131:47;21195:131;21321:4;21195:131;:::i;:::-;21187:139;;20914:419;;;:::o;21339:223::-;21479:34;21475:1;21467:6;21463:14;21456:58;21548:6;21543:2;21535:6;21531:15;21524:31;21339:223;:::o;21568:366::-;21710:3;21731:67;21795:2;21790:3;21731:67;:::i;:::-;21724:74;;21807:93;21896:3;21807:93;:::i;:::-;21925:2;21920:3;21916:12;21909:19;;21568:366;;;:::o;21940:419::-;22106:4;22144:2;22133:9;22129:18;22121:26;;22193:9;22187:4;22183:20;22179:1;22168:9;22164:17;22157:47;22221:131;22347:4;22221:131;:::i;:::-;22213:139;;21940:419;;;:::o;22365:221::-;22505:34;22501:1;22493:6;22489:14;22482:58;22574:4;22569:2;22561:6;22557:15;22550:29;22365:221;:::o;22592:366::-;22734:3;22755:67;22819:2;22814:3;22755:67;:::i;:::-;22748:74;;22831:93;22920:3;22831:93;:::i;:::-;22949:2;22944:3;22940:12;22933:19;;22592:366;;;:::o;22964:419::-;23130:4;23168:2;23157:9;23153:18;23145:26;;23217:9;23211:4;23207:20;23203:1;23192:9;23188:17;23181:47;23245:131;23371:4;23245:131;:::i;:::-;23237:139;;22964:419;;;:::o;23389:224::-;23529:34;23525:1;23517:6;23513:14;23506:58;23598:7;23593:2;23585:6;23581:15;23574:32;23389:224;:::o;23619:366::-;23761:3;23782:67;23846:2;23841:3;23782:67;:::i;:::-;23775:74;;23858:93;23947:3;23858:93;:::i;:::-;23976:2;23971:3;23967:12;23960:19;;23619:366;;;:::o;23991:419::-;24157:4;24195:2;24184:9;24180:18;24172:26;;24244:9;24238:4;24234:20;24230:1;24219:9;24215:17;24208:47;24272:131;24398:4;24272:131;:::i;:::-;24264:139;;23991:419;;;:::o;24416:222::-;24556:34;24552:1;24544:6;24540:14;24533:58;24625:5;24620:2;24612:6;24608:15;24601:30;24416:222;:::o;24644:366::-;24786:3;24807:67;24871:2;24866:3;24807:67;:::i;:::-;24800:74;;24883:93;24972:3;24883:93;:::i;:::-;25001:2;24996:3;24992:12;24985:19;;24644:366;;;:::o;25016:419::-;25182:4;25220:2;25209:9;25205:18;25197:26;;25269:9;25263:4;25259:20;25255:1;25244:9;25240:17;25233:47;25297:131;25423:4;25297:131;:::i;:::-;25289:139;;25016:419;;;:::o;25441:230::-;25581:34;25577:1;25569:6;25565:14;25558:58;25650:13;25645:2;25637:6;25633:15;25626:38;25441:230;:::o;25677:366::-;25819:3;25840:67;25904:2;25899:3;25840:67;:::i;:::-;25833:74;;25916:93;26005:3;25916:93;:::i;:::-;26034:2;26029:3;26025:12;26018:19;;25677:366;;;:::o;26049:419::-;26215:4;26253:2;26242:9;26238:18;26230:26;;26302:9;26296:4;26292:20;26288:1;26277:9;26273:17;26266:47;26330:131;26456:4;26330:131;:::i;:::-;26322:139;;26049:419;;;:::o;26474:231::-;26614:34;26610:1;26602:6;26598:14;26591:58;26683:14;26678:2;26670:6;26666:15;26659:39;26474:231;:::o;26711:366::-;26853:3;26874:67;26938:2;26933:3;26874:67;:::i;:::-;26867:74;;26950:93;27039:3;26950:93;:::i;:::-;27068:2;27063:3;27059:12;27052:19;;26711:366;;;:::o;27083:419::-;27249:4;27287:2;27276:9;27272:18;27264:26;;27336:9;27330:4;27326:20;27322:1;27311:9;27307:17;27300:47;27364:131;27490:4;27364:131;:::i;:::-;27356:139;;27083:419;;;:::o;27508:248::-;27648:34;27644:1;27636:6;27632:14;27625:58;27717:31;27712:2;27704:6;27700:15;27693:56;27508:248;:::o;27762:366::-;27904:3;27925:67;27989:2;27984:3;27925:67;:::i;:::-;27918:74;;28001:93;28090:3;28001:93;:::i;:::-;28119:2;28114:3;28110:12;28103:19;;27762:366;;;:::o;28134:419::-;28300:4;28338:2;28327:9;28323:18;28315:26;;28387:9;28381:4;28377:20;28373:1;28362:9;28358:17;28351:47;28415:131;28541:4;28415:131;:::i;:::-;28407:139;;28134:419;;;:::o;28559:225::-;28699:34;28695:1;28687:6;28683:14;28676:58;28768:8;28763:2;28755:6;28751:15;28744:33;28559:225;:::o;28790:366::-;28932:3;28953:67;29017:2;29012:3;28953:67;:::i;:::-;28946:74;;29029:93;29118:3;29029:93;:::i;:::-;29147:2;29142:3;29138:12;29131:19;;28790:366;;;:::o;29162:419::-;29328:4;29366:2;29355:9;29351:18;29343:26;;29415:9;29409:4;29405:20;29401:1;29390:9;29386:17;29379:47;29443:131;29569:4;29443:131;:::i;:::-;29435:139;;29162:419;;;:::o;29587:332::-;29708:4;29746:2;29735:9;29731:18;29723:26;;29759:71;29827:1;29816:9;29812:17;29803:6;29759:71;:::i;:::-;29840:72;29908:2;29897:9;29893:18;29884:6;29840:72;:::i;:::-;29587:332;;;;;:::o;29925:348::-;29965:7;29988:20;30006:1;29988:20;:::i;:::-;29983:25;;30022:20;30040:1;30022:20;:::i;:::-;30017:25;;30210:1;30142:66;30138:74;30135:1;30132:81;30127:1;30120:9;30113:17;30109:105;30106:131;;;30217:18;;:::i;:::-;30106:131;30265:1;30262;30258:9;30247:20;;29925:348;;;;:::o;30279:180::-;30327:77;30324:1;30317:88;30424:4;30421:1;30414:15;30448:4;30445:1;30438:15;30465:185;30505:1;30522:20;30540:1;30522:20;:::i;:::-;30517:25;;30556:20;30574:1;30556:20;:::i;:::-;30551:25;;30595:1;30585:35;;30600:18;;:::i;:::-;30585:35;30642:1;30639;30635:9;30630:14;;30465:185;;;;:::o;30656:191::-;30696:4;30716:20;30734:1;30716:20;:::i;:::-;30711:25;;30750:20;30768:1;30750:20;:::i;:::-;30745:25;;30789:1;30786;30783:8;30780:34;;;30794:18;;:::i;:::-;30780:34;30839:1;30836;30832:9;30824:17;;30656:191;;;;:::o;30853:180::-;30901:77;30898:1;30891:88;30998:4;30995:1;30988:15;31022:4;31019:1;31012:15;31039:143;31096:5;31127:6;31121:13;31112:22;;31143:33;31170:5;31143:33;:::i;:::-;31039:143;;;;:::o;31188:351::-;31258:6;31307:2;31295:9;31286:7;31282:23;31278:32;31275:119;;;31313:79;;:::i;:::-;31275:119;31433:1;31458:64;31514:7;31505:6;31494:9;31490:22;31458:64;:::i;:::-;31448:74;;31404:128;31188:351;;;;:::o;31545:85::-;31590:7;31619:5;31608:16;;31545:85;;;:::o;31636:158::-;31694:9;31727:61;31745:42;31754:32;31780:5;31754:32;:::i;:::-;31745:42;:::i;:::-;31727:61;:::i;:::-;31714:74;;31636:158;;;:::o;31800:147::-;31895:45;31934:5;31895:45;:::i;:::-;31890:3;31883:58;31800:147;;:::o;31953:114::-;32020:6;32054:5;32048:12;32038:22;;31953:114;;;:::o;32073:132::-;32140:4;32163:3;32155:11;;32193:4;32188:3;32184:14;32176:22;;32073:132;;;:::o;32211:113::-;32281:4;32313;32308:3;32304:14;32296:22;;32211:113;;;:::o;32360:732::-;32479:3;32508:54;32556:5;32508:54;:::i;:::-;32578:86;32657:6;32652:3;32578:86;:::i;:::-;32571:93;;32688:56;32738:5;32688:56;:::i;:::-;32767:7;32798:1;32783:284;32808:6;32805:1;32802:13;32783:284;;;32884:6;32878:13;32911:63;32970:3;32955:13;32911:63;:::i;:::-;32904:70;;32997:60;33050:6;32997:60;:::i;:::-;32987:70;;32843:224;32830:1;32827;32823:9;32818:14;;32783:284;;;32787:14;33083:3;33076:10;;32484:608;;;32360:732;;;;:::o;33098:831::-;33361:4;33399:3;33388:9;33384:19;33376:27;;33413:71;33481:1;33470:9;33466:17;33457:6;33413:71;:::i;:::-;33494:80;33570:2;33559:9;33555:18;33546:6;33494:80;:::i;:::-;33621:9;33615:4;33611:20;33606:2;33595:9;33591:18;33584:48;33649:108;33752:4;33743:6;33649:108;:::i;:::-;33641:116;;33767:72;33835:2;33824:9;33820:18;33811:6;33767:72;:::i;:::-;33849:73;33917:3;33906:9;33902:19;33893:6;33849:73;:::i;:::-;33098:831;;;;;;;;:::o;33935:807::-;34184:4;34222:3;34211:9;34207:19;34199:27;;34236:71;34304:1;34293:9;34289:17;34280:6;34236:71;:::i;:::-;34317:72;34385:2;34374:9;34370:18;34361:6;34317:72;:::i;:::-;34399:80;34475:2;34464:9;34460:18;34451:6;34399:80;:::i;:::-;34489;34565:2;34554:9;34550:18;34541:6;34489:80;:::i;:::-;34579:73;34647:3;34636:9;34632:19;34623:6;34579:73;:::i;:::-;34662;34730:3;34719:9;34715:19;34706:6;34662:73;:::i;:::-;33935:807;;;;;;;;;:::o;34748:143::-;34805:5;34836:6;34830:13;34821:22;;34852:33;34879:5;34852:33;:::i;:::-;34748:143;;;;:::o;34897:663::-;34985:6;34993;35001;35050:2;35038:9;35029:7;35025:23;35021:32;35018:119;;;35056:79;;:::i;:::-;35018:119;35176:1;35201:64;35257:7;35248:6;35237:9;35233:22;35201:64;:::i;:::-;35191:74;;35147:128;35314:2;35340:64;35396:7;35387:6;35376:9;35372:22;35340:64;:::i;:::-;35330:74;;35285:129;35453:2;35479:64;35535:7;35526:6;35515:9;35511:22;35479:64;:::i;:::-;35469:74;;35424:129;34897:663;;;;;:::o
Swarm Source
ipfs://f70b5b9ed3adbac16397afc011724222fb03b99840c708df4a82826800b299cb
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.