Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 CLOSEDSEA
Holders
81
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
301,947.750000002623864832 CLOSEDSEAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CLOSEDSEA
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-14 */ /** TG: https://t.me/ClosedSea_Entry Twitter: http://twitter.com/ClosedSeaEth */ pragma solidity ^0.8.0; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { function sync() external; } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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() { _transferOwnership(_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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @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 Contracts guidelines: functions revert * instead 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 {} } // 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 generally not needed starting with Solidity 0.8, since 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; } } } contract CLOSEDSEA is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 20; // 20 = .20% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyBurnFee = 0; uint256 public buyLiquidityFee = 0; uint256 public buyDevFee = 7; uint256 public sellTotalFees; uint256 public sellBurnFee = 0; uint256 public sellLiquidityFee = 0; uint256 public sellDevFee = 7; uint256 public tokensForBurn; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); event BoughtEarly(address indexed sniper); constructor() ERC20("Closed Sea", "CLOSEDSEA") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 1_000_000_000 * 1e18; // 1 billion total supply maxTransactionAmount = totalSupply / 100; // 1% from total supply maxWallet = totalSupply / 300; // 3% from total supply swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet buyTotalFees = buyBurnFee + buyLiquidityFee + buyDevFee; sellTotalFees = sellBurnFee + sellLiquidityFee + sellDevFee; devWallet = address(0x5D18f20Fd51C1Be09e50F9642f9cA1eBf1b0a76e); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function startTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _burnFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { buyBurnFee = _burnFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyBurnFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 5, "Must keep fees at 5% or less"); } function updateSellFees( uint256 _burnFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { sellBurnFee = _burnFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellBurnFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 5, "Must keep fees at 5% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } 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 (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if ( !swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from] ) { autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForDev += (fees * sellDevFee) / sellTotalFees; tokensForBurn += (fees * sellBurnFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForBurn += (fees * buyBurnFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens).sub(tokensForBurn); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForDev; tokensForLiquidity = 0; tokensForBurn = 0; tokensForDev = 0; (success, ) = address(devWallet).call{value: ethForDev}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool) { lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div( 10000 ); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool) { require( block.timestamp > lastManualLpBurnTime + manualBurnFrequency, "Must wait for cooldown to finish" ); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526014600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff02191690831515021790555060006015556000601655600760175560006019556000601a556007601b55348015620000c757600080fd5b506040518060400160405280600a81526020017f436c6f73656420536561000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f434c4f534544534541000000000000000000000000000000000000000000000081525081600390805190602001906200014c92919062000b1b565b5080600490805190602001906200016592919062000b1b565b505050620001886200017c620005db60201b60201c565b620005e360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001b4816001620006a960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023257600080fd5b505afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d919062000be2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d057600080fd5b505afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b919062000be2565b6040518363ffffffff1660e01b81526004016200032a92919062000cc5565b602060405180830381600087803b1580156200034557600080fd5b505af11580156200035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000380919062000be2565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a960201b60201c565b6200042a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079360201b60201c565b60006b033b2e3c9fd0803ce800000090506064816200044a919062000dde565b60088190555061012c8162000460919062000dde565b600a8190555061271060038262000478919062000e16565b62000484919062000dde565b6009819055506017546016546015546200049f919062000d81565b620004ab919062000d81565b601481905550601b54601a54601954620004c6919062000d81565b620004d2919062000d81565b601881905550735d18f20fd51c1be09e50f9642f9ca1ebf1b0a76e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054f620005416200083460201b60201c565b60016200085e60201b60201c565b620005623060016200085e60201b60201c565b6200057761dead60016200085e60201b60201c565b620005996200058b6200083460201b60201c565b6001620006a960201b60201c565b620005ac306001620006a960201b60201c565b620005c161dead6001620006a960201b60201c565b620005d333826200099860201b60201c565b505062000f9e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006b9620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006df6200083460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000738576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072f9062000d0f565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200086e620005db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008946200083460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e49062000d0f565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098c919062000cf2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a029062000d31565b60405180910390fd5b62000a1f6000838362000b1160201b60201c565b806002600082825462000a33919062000d81565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8a919062000d81565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af1919062000d53565b60405180910390a362000b0d6000838362000b1660201b60201c565b5050565b505050565b505050565b82805462000b299062000ec1565b90600052602060002090601f01602090048101928262000b4d576000855562000b99565b82601f1062000b6857805160ff191683800117855562000b99565b8280016001018555821562000b99579182015b8281111562000b9857825182559160200191906001019062000b7b565b5b50905062000ba8919062000bac565b5090565b5b8082111562000bc757600081600090555060010162000bad565b5090565b60008151905062000bdc8162000f84565b92915050565b60006020828403121562000bf557600080fd5b600062000c058482850162000bcb565b91505092915050565b62000c198162000e77565b82525050565b62000c2a8162000e8b565b82525050565b600062000c3f60208362000d70565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c81601f8362000d70565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000cbf8162000eb7565b82525050565b600060408201905062000cdc600083018562000c0e565b62000ceb602083018462000c0e565b9392505050565b600060208201905062000d09600083018462000c1f565b92915050565b6000602082019050818103600083015262000d2a8162000c30565b9050919050565b6000602082019050818103600083015262000d4c8162000c72565b9050919050565b600060208201905062000d6a600083018462000cb4565b92915050565b600082825260208201905092915050565b600062000d8e8262000eb7565b915062000d9b8362000eb7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dd35762000dd262000ef7565b5b828201905092915050565b600062000deb8262000eb7565b915062000df88362000eb7565b92508262000e0b5762000e0a62000f26565b5b828204905092915050565b600062000e238262000eb7565b915062000e308362000eb7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e6c5762000e6b62000ef7565b5b828202905092915050565b600062000e848262000e97565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000eda57607f821691505b6020821081141562000ef15762000ef062000f55565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000f8f8162000e77565b811462000f9b57600080fd5b50565b60805160601c61585d62000fe760003960008181610f2601528181612c6401528181613fc1015281816140d7015281816140fe0152818161419a01526141c1015261585d6000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610d99578063f637434214610dc2578063f8b45b0514610ded578063fe72b27a14610e18576103a2565b8063e2f4560514610ced578063e71dc3f514610d18578063e884f26014610d43578063f11a24d314610d6e576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c1d578063d257b34f14610c48578063d85ba06314610c85578063dd62ed3e14610cb0576103a2565b8063c17b5b8c14610ba0578063c18bc19514610bc9578063c876d0b914610bf2576103a2565b8063a0d82dc51161017a578063adb873bd11610149578063adb873bd14610ae4578063b62496f514610b0f578063bbc0c74214610b4c578063c024666814610b77576103a2565b8063a0d82dc514610a14578063a457c2d714610a3f578063a4c82a0014610a7c578063a9059cbb14610aa7576103a2565b80639a7a23d6116101b65780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5780639fccce32146109e9576103a2565b80638ea5220f146108eb578063924de9b71461091657806395d89b411461093f576103a2565b80632e82f1a0116102c15780636ddd17131161025f578063751039fc1161022e578063751039fc146108435780637571336a1461086e5780638095d564146108975780638da5cb5b146108c0576103a2565b80636ddd17131461079b57806370a08231146107c6578063715018a614610803578063730c18881461081a576103a2565b806349bd5a5e1161029b57806349bd5a5e146106dd5780634a62bb65146107085780634fbee193146107335780636a486a8e14610770576103a2565b80632e82f1a01461064a578063313ce5671461067557806339509351146106a0576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063293230b8146106085780632c3e486c1461061f576103a2565b8063199ffc72146104f65780631a8145bb146105215780631d7778561461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e55565b6040516103c991906150d6565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614401565b610ee7565b60405161040691906150a0565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906142e8565b610f05565b60405161044391906150a0565b60405180910390f35b34801561045857600080fd5b50610461610f24565b60405161046e91906150bb565b60405180910390f35b34801561048357600080fd5b5061048c610f48565b6040516104999190615418565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906142e8565b610f52565b005b3480156104d757600080fd5b506104e061108e565b6040516104ed9190615418565b60405180910390f35b34801561050257600080fd5b5061050b611094565b6040516105189190615418565b60405180910390f35b34801561052d57600080fd5b5061053661109a565b6040516105439190615418565b60405180910390f35b34801561055857600080fd5b506105616110a0565b60405161056e9190615418565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190614466565b6110a6565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190614376565b6111b5565b6040516105d491906150a0565b60405180910390f35b3480156105e957600080fd5b506105f26112ad565b6040516105ff9190615024565b60405180910390f35b34801561061457600080fd5b5061061d6112b3565b005b34801561062b57600080fd5b5061063461136e565b6040516106419190615418565b60405180910390f35b34801561065657600080fd5b5061065f611374565b60405161066c91906150a0565b60405180910390f35b34801561068157600080fd5b5061068a611387565b60405161069791906154c4565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614401565b611390565b6040516106d491906150a0565b60405180910390f35b3480156106e957600080fd5b506106f261143c565b6040516106ff9190615024565b60405180910390f35b34801561071457600080fd5b5061071d611462565b60405161072a91906150a0565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906142e8565b611475565b60405161076791906150a0565b60405180910390f35b34801561077c57600080fd5b506107856114cb565b6040516107929190615418565b60405180910390f35b3480156107a757600080fd5b506107b06114d1565b6040516107bd91906150a0565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e891906142e8565b6114e4565b6040516107fa9190615418565b60405180910390f35b34801561080f57600080fd5b5061081861152c565b005b34801561082657600080fd5b50610841600480360381019061083c91906144b8565b6115b4565b005b34801561084f57600080fd5b506108586116f4565b60405161086591906150a0565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143c5565b611794565b005b3480156108a357600080fd5b506108be60048036038101906108b99190614507565b61186b565b005b3480156108cc57600080fd5b506108d561196a565b6040516108e29190615024565b60405180910390f35b3480156108f757600080fd5b50610900611994565b60405161090d9190615024565b60405180910390f35b34801561092257600080fd5b5061093d6004803603810190610938919061443d565b6119ba565b005b34801561094b57600080fd5b50610954611a53565b60405161096191906150d6565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906143c5565b611ae5565b005b34801561099f57600080fd5b506109a8611c00565b6040516109b59190615418565b60405180910390f35b3480156109ca57600080fd5b506109d3611c06565b6040516109e09190615418565b60405180910390f35b3480156109f557600080fd5b506109fe611c0c565b604051610a0b9190615418565b60405180910390f35b348015610a2057600080fd5b50610a29611c12565b604051610a369190615418565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a619190614401565b611c18565b604051610a7391906150a0565b60405180910390f35b348015610a8857600080fd5b50610a91611d03565b604051610a9e9190615418565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac99190614401565b611d09565b604051610adb91906150a0565b60405180910390f35b348015610af057600080fd5b50610af9611d27565b604051610b069190615418565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b3191906142e8565b611d2d565b604051610b4391906150a0565b60405180910390f35b348015610b5857600080fd5b50610b61611d4d565b604051610b6e91906150a0565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b9991906143c5565b611d60565b005b348015610bac57600080fd5b50610bc76004803603810190610bc29190614507565b611e85565b005b348015610bd557600080fd5b50610bf06004803603810190610beb9190614466565b611f84565b005b348015610bfe57600080fd5b50610c07612093565b604051610c1491906150a0565b60405180910390f35b348015610c2957600080fd5b50610c326120a6565b604051610c3f9190615418565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614466565b6120ac565b604051610c7c91906150a0565b60405180910390f35b348015610c9157600080fd5b50610c9a612201565b604051610ca79190615418565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd2919061433a565b612207565b604051610ce49190615418565b60405180910390f35b348015610cf957600080fd5b50610d0261228e565b604051610d0f9190615418565b60405180910390f35b348015610d2457600080fd5b50610d2d612294565b604051610d3a9190615418565b60405180910390f35b348015610d4f57600080fd5b50610d5861229a565b604051610d6591906150a0565b60405180910390f35b348015610d7a57600080fd5b50610d8361233a565b604051610d909190615418565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb91906142e8565b612340565b005b348015610dce57600080fd5b50610dd7612438565b604051610de49190615418565b60405180910390f35b348015610df957600080fd5b50610e0261243e565b604051610e0f9190615418565b60405180910390f35b348015610e2457600080fd5b50610e3f6004803603810190610e3a9190614466565b612444565b604051610e4c91906150a0565b60405180910390f35b606060038054610e6490615712565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090615712565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b6000610efb610ef4612731565b8484612739565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f5a612731565b73ffffffffffffffffffffffffffffffffffffffff16610f7861196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc5906152d8565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110ae612731565b73ffffffffffffffffffffffffffffffffffffffff166110cc61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611119906152d8565b60405180910390fd5b670de0b6b3a76400006103e86001611138610f48565b61114291906155c6565b61114c9190615595565b6111569190615595565b811015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906153f8565b60405180910390fd5b670de0b6b3a7640000816111ac91906155c6565b60088190555050565b60006111c2848484612904565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906152b8565b60405180910390fd5b6112a185611299612731565b858403612739565b60019150509392505050565b61dead81565b6112bb612731565b73ffffffffffffffffffffffffffffffffffffffff166112d961196a565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611326906152d8565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061143261139d612731565b8484600160006113ab612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142d919061553f565b612739565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611534612731565b73ffffffffffffffffffffffffffffffffffffffff1661155261196a565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906152d8565b60405180910390fd5b6115b2600061369e565b565b6115bc612731565b73ffffffffffffffffffffffffffffffffffffffff166115da61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611627906152d8565b60405180910390fd5b610258831015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90615178565b60405180910390fd5b6103e88211158015611688575060008210155b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90615218565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116fe612731565b73ffffffffffffffffffffffffffffffffffffffff1661171c61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906152d8565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61179c612731565b73ffffffffffffffffffffffffffffffffffffffff166117ba61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906152d8565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611873612731565b73ffffffffffffffffffffffffffffffffffffffff1661189161196a565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906152d8565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461190f919061553f565b611919919061553f565b60148190555060056014541115611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c906152f8565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c2612731565b73ffffffffffffffffffffffffffffffffffffffff166119e061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d906152d8565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611a6290615712565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90615712565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b611aed612731565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906152d8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be9906151b8565b60405180910390fd5b611bfc8282613764565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611c27612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906153d8565b60405180910390fd5b611cf8611cef612731565b85858403612739565b600191505092915050565b600e5481565b6000611d1d611d16612731565b8484612904565b6001905092915050565b60195481565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d68612731565b73ffffffffffffffffffffffffffffffffffffffff16611d8661196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd3906152d8565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e7991906150a0565b60405180910390a25050565b611e8d612731565b73ffffffffffffffffffffffffffffffffffffffff16611eab61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef8906152d8565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611f29919061553f565b611f33919061553f565b60188190555060056018541115611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690615318565b60405180910390fd5b505050565b611f8c612731565b73ffffffffffffffffffffffffffffffffffffffff16611faa61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906152d8565b60405180910390fd5b670de0b6b3a76400006103e86005612016610f48565b61202091906155c6565b61202a9190615595565b6120349190615595565b811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90615198565b60405180910390fd5b670de0b6b3a76400008161208a91906155c6565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006120b6612731565b73ffffffffffffffffffffffffffffffffffffffff166120d461196a565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612121906152d8565b60405180910390fd5b620186a06001612138610f48565b61214291906155c6565b61214c9190615595565b82101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590615238565b60405180910390fd5b6103e8600561219b610f48565b6121a591906155c6565b6121af9190615595565b8211156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890615258565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b60006122a4612731565b73ffffffffffffffffffffffffffffffffffffffff166122c261196a565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906152d8565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b612348612731565b73ffffffffffffffffffffffffffffffffffffffff1661236661196a565b73ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b3906152d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390615138565b60405180910390fd5b6124358161369e565b50565b601a5481565b600a5481565b600061244e612731565b73ffffffffffffffffffffffffffffffffffffffff1661246c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906152d8565b60405180910390fd5b600f546010546124d2919061553f565b4211612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90615378565b60405180910390fd5b6103e8821115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615338565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125bc9190615024565b60206040518083038186803b1580156125d457600080fd5b505afa1580156125e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260c919061448f565b90506000612637612710612629868561380590919063ffffffff16565b61381b90919063ffffffff16565b9050600081111561267257612671600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281090615158565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f79190615418565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90615358565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db906150f8565b60405180910390fd5b60008114156129fe576129f983836000613831565b613699565b601160009054906101000a900460ff16156130c357612a1b61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a895750612a5961196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612afc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b155750600660149054906101000a900460ff16155b156130c257601160019054906101000a900460ff16612c0f57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcf5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590615118565b60405180910390fd5b5b601360009054906101000a900460ff1615612dd957612c2c61196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cb357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dd85743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90615298565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2357600854811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90615278565b60405180910390fd5b600a54612ed2836114e4565b82612edd919061553f565b1115612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f15906153b8565b60405180910390fd5b6130c1565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fc65750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557600854811115613010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613007906151f8565b60405180910390fd5b6130c0565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130bf57600a54613072836114e4565b8261307d919061553f565b11156130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b5906153b8565b60405180910390fd5b5b5b5b5b5b60006130ce306114e4565b9050600060095482101590508080156130f35750601160029054906101000a900460ff165b801561310c5750600660149054906101000a900460ff16155b80156131625750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320e5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613252576001600660146101000a81548160ff021916908315150217905550613236613ab2565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132b85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132d05750600c60009054906101000a900460ff165b80156132eb5750600d54600e546132e7919061553f565b4210155b80156133415750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133505761334e613cdb565b505b6000600660149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561368957602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601854115b15613540576134a060646134926018548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601854601a54826134b391906155c6565b6134bd9190615595565b601d60008282546134ce919061553f565b92505081905550601854601b54826134e691906155c6565b6134f09190615595565b601e6000828254613501919061553f565b925050819055506018546019548261351991906155c6565b6135239190615595565b601c6000828254613534919061553f565b92505081905550613665565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359b57506000601454115b15613664576135c860646135ba6014548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601454601654826135db91906155c6565b6135e59190615595565b601d60008282546135f6919061553f565b925050819055506014546017548261360e91906155c6565b6136189190615595565b601e6000828254613629919061553f565b925050819055506014546015548261364191906155c6565b61364b9190615595565b601c600082825461365c919061553f565b925050819055505b5b600081111561367a57613679873083613831565b5b80856136869190615620565b94505b613694878787613831565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361381391906155c6565b905092915050565b600081836138299190615595565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389890615358565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613908906150f8565b60405180910390fd5b61391c838383613eb6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613999906151d8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a35919061553f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a999190615418565b60405180910390a3613aac848484613ebb565b50505050565b6000613abd306114e4565b90506000601e54601d54613ad1919061553f565b9050600080831480613ae35750600082145b15613af057505050613cd9565b6014600954613aff91906155c6565b831115613b18576014600954613b1591906155c6565b92505b6000600283601d5486613b2b91906155c6565b613b359190615595565b613b3f9190615595565b90506000613b6a601c54613b5c8488613ec090919063ffffffff16565b613ec090919063ffffffff16565b90506000479050613b7a82613ed6565b6000613b8f8247613ec090919063ffffffff16565b90506000613bba87613bac601e548561380590919063ffffffff16565b61381b90919063ffffffff16565b905060008183613bca9190615620565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c2a9061500f565b60006040518083038185875af1925050503d8060008114613c67576040519150601f19603f3d011682016040523d82523d6000602084013e613c6c565b606091505b505080975050600086118015613c825750600081115b15613ccf57613c918682614194565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d54604051613cc69392919061548d565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613d419190615024565b60206040518083038186803b158015613d5957600080fd5b505afa158015613d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d91919061448f565b90506000613dbe612710613db0600b548561380590919063ffffffff16565b61381b90919063ffffffff16565b90506000811115613df957613df8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ece9190615620565b905092915050565b6000600267ffffffffffffffff811115613f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f475781602001602082028036833780820191505090505b5090503081600081518110613f85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561402557600080fd5b505afa158015614039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405d9190614311565b81600181518110614097577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140fc307f000000000000000000000000000000000000000000000000000000000000000084612739565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161415e959493929190615433565b600060405180830381600087803b15801561417857600080fd5b505af115801561418c573d6000803e3d6000fd5b505050505050565b6141bf307f000000000000000000000000000000000000000000000000000000000000000084612739565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142269695949392919061503f565b6060604051808303818588803b15801561423f57600080fd5b505af1158015614253573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142789190614556565b5050505050565b60008135905061428e816157e2565b92915050565b6000815190506142a3816157e2565b92915050565b6000813590506142b8816157f9565b92915050565b6000813590506142cd81615810565b92915050565b6000815190506142e281615810565b92915050565b6000602082840312156142fa57600080fd5b60006143088482850161427f565b91505092915050565b60006020828403121561432357600080fd5b600061433184828501614294565b91505092915050565b6000806040838503121561434d57600080fd5b600061435b8582860161427f565b925050602061436c8582860161427f565b9150509250929050565b60008060006060848603121561438b57600080fd5b60006143998682870161427f565b93505060206143aa8682870161427f565b92505060406143bb868287016142be565b9150509250925092565b600080604083850312156143d857600080fd5b60006143e68582860161427f565b92505060206143f7858286016142a9565b9150509250929050565b6000806040838503121561441457600080fd5b60006144228582860161427f565b9250506020614433858286016142be565b9150509250929050565b60006020828403121561444f57600080fd5b600061445d848285016142a9565b91505092915050565b60006020828403121561447857600080fd5b6000614486848285016142be565b91505092915050565b6000602082840312156144a157600080fd5b60006144af848285016142d3565b91505092915050565b6000806000606084860312156144cd57600080fd5b60006144db868287016142be565b93505060206144ec868287016142be565b92505060406144fd868287016142a9565b9150509250925092565b60008060006060848603121561451c57600080fd5b600061452a868287016142be565b935050602061453b868287016142be565b925050604061454c868287016142be565b9150509250925092565b60008060006060848603121561456b57600080fd5b6000614579868287016142d3565b935050602061458a868287016142d3565b925050604061459b868287016142d3565b9150509250925092565b60006145b183836145bd565b60208301905092915050565b6145c681615654565b82525050565b6145d581615654565b82525050565b60006145e6826154ef565b6145f08185615512565b93506145fb836154df565b8060005b8381101561462c57815161461388826145a5565b975061461e83615505565b9250506001810190506145ff565b5085935050505092915050565b61464281615666565b82525050565b614651816156a9565b82525050565b614660816156cd565b82525050565b6000614671826154fa565b61467b818561552e565b935061468b8185602086016156df565b614694816157d1565b840191505092915050565b60006146ac60238361552e565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061471260168361552e565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b600061475260268361552e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b860228361552e565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061481e60338361552e565b91507f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008301527f616e206576657279203130206d696e75746573000000000000000000000000006020830152604082019050919050565b600061488460248361552e565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148ea60398361552e565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061495060268361552e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149b660368361552e565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b6000614a1c60308361552e565b91507f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008301527f747765656e20302520616e6420313025000000000000000000000000000000006020830152604082019050919050565b6000614a8260358361552e565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b6000614ae860348361552e565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614b4e60358361552e565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614bb460498361552e565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614c4060288361552e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ca660208361552e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614ce6601c8361552e565b91507f4d757374206b6565702066656573206174203525206f72206c657373000000006000830152602082019050919050565b6000614d26601d8361552e565b91507f4d757374206b656570206665657320617420203525206f72206c6573730000006000830152602082019050919050565b6000614d66602a8361552e565b91507f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008301527f6b656e7320696e204c50000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dcc60258361552e565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e3260208361552e565b91507f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686000830152602082019050919050565b6000614e72600083615523565b9150600082019050919050565b6000614e8c60248361552e565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ef260138361552e565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b6000614f3260258361552e565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f98602f8361552e565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b614ffa81615692565b82525050565b6150098161569c565b82525050565b600061501a82614e65565b9150819050919050565b600060208201905061503960008301846145cc565b92915050565b600060c08201905061505460008301896145cc565b6150616020830188614ff1565b61506e6040830187614657565b61507b6060830186614657565b61508860808301856145cc565b61509560a0830184614ff1565b979650505050505050565b60006020820190506150b56000830184614639565b92915050565b60006020820190506150d06000830184614648565b92915050565b600060208201905081810360008301526150f08184614666565b905092915050565b600060208201905081810360008301526151118161469f565b9050919050565b6000602082019050818103600083015261513181614705565b9050919050565b6000602082019050818103600083015261515181614745565b9050919050565b60006020820190508181036000830152615171816147ab565b9050919050565b6000602082019050818103600083015261519181614811565b9050919050565b600060208201905081810360008301526151b181614877565b9050919050565b600060208201905081810360008301526151d1816148dd565b9050919050565b600060208201905081810360008301526151f181614943565b9050919050565b60006020820190508181036000830152615211816149a9565b9050919050565b6000602082019050818103600083015261523181614a0f565b9050919050565b6000602082019050818103600083015261525181614a75565b9050919050565b6000602082019050818103600083015261527181614adb565b9050919050565b6000602082019050818103600083015261529181614b41565b9050919050565b600060208201905081810360008301526152b181614ba7565b9050919050565b600060208201905081810360008301526152d181614c33565b9050919050565b600060208201905081810360008301526152f181614c99565b9050919050565b6000602082019050818103600083015261531181614cd9565b9050919050565b6000602082019050818103600083015261533181614d19565b9050919050565b6000602082019050818103600083015261535181614d59565b9050919050565b6000602082019050818103600083015261537181614dbf565b9050919050565b6000602082019050818103600083015261539181614e25565b9050919050565b600060208201905081810360008301526153b181614e7f565b9050919050565b600060208201905081810360008301526153d181614ee5565b9050919050565b600060208201905081810360008301526153f181614f25565b9050919050565b6000602082019050818103600083015261541181614f8b565b9050919050565b600060208201905061542d6000830184614ff1565b92915050565b600060a0820190506154486000830188614ff1565b6154556020830187614657565b818103604083015261546781866145db565b905061547660608301856145cc565b6154836080830184614ff1565b9695505050505050565b60006060820190506154a26000830186614ff1565b6154af6020830185614ff1565b6154bc6040830184614ff1565b949350505050565b60006020820190506154d96000830184615000565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061554a82615692565b915061555583615692565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561558a57615589615744565b5b828201905092915050565b60006155a082615692565b91506155ab83615692565b9250826155bb576155ba615773565b5b828204905092915050565b60006155d182615692565b91506155dc83615692565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561561557615614615744565b5b828202905092915050565b600061562b82615692565b915061563683615692565b92508282101561564957615648615744565b5b828203905092915050565b600061565f82615672565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006156b4826156bb565b9050919050565b60006156c682615672565b9050919050565b60006156d882615692565b9050919050565b60005b838110156156fd5780820151818401526020810190506156e2565b8381111561570c576000848401525b50505050565b6000600282049050600182168061572a57607f821691505b6020821081141561573e5761573d6157a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6157eb81615654565b81146157f657600080fd5b50565b61580281615666565b811461580d57600080fd5b50565b61581981615692565b811461582457600080fd5b5056fea26469706673582212204990a4664cad1128181297f14de5beb5fa18cab9515d53db836f5dc6c34baf0364736f6c63430008000033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610d99578063f637434214610dc2578063f8b45b0514610ded578063fe72b27a14610e18576103a2565b8063e2f4560514610ced578063e71dc3f514610d18578063e884f26014610d43578063f11a24d314610d6e576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c1d578063d257b34f14610c48578063d85ba06314610c85578063dd62ed3e14610cb0576103a2565b8063c17b5b8c14610ba0578063c18bc19514610bc9578063c876d0b914610bf2576103a2565b8063a0d82dc51161017a578063adb873bd11610149578063adb873bd14610ae4578063b62496f514610b0f578063bbc0c74214610b4c578063c024666814610b77576103a2565b8063a0d82dc514610a14578063a457c2d714610a3f578063a4c82a0014610a7c578063a9059cbb14610aa7576103a2565b80639a7a23d6116101b65780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5780639fccce32146109e9576103a2565b80638ea5220f146108eb578063924de9b71461091657806395d89b411461093f576103a2565b80632e82f1a0116102c15780636ddd17131161025f578063751039fc1161022e578063751039fc146108435780637571336a1461086e5780638095d564146108975780638da5cb5b146108c0576103a2565b80636ddd17131461079b57806370a08231146107c6578063715018a614610803578063730c18881461081a576103a2565b806349bd5a5e1161029b57806349bd5a5e146106dd5780634a62bb65146107085780634fbee193146107335780636a486a8e14610770576103a2565b80632e82f1a01461064a578063313ce5671461067557806339509351146106a0576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063293230b8146106085780632c3e486c1461061f576103a2565b8063199ffc72146104f65780631a8145bb146105215780631d7778561461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e55565b6040516103c991906150d6565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614401565b610ee7565b60405161040691906150a0565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906142e8565b610f05565b60405161044391906150a0565b60405180910390f35b34801561045857600080fd5b50610461610f24565b60405161046e91906150bb565b60405180910390f35b34801561048357600080fd5b5061048c610f48565b6040516104999190615418565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906142e8565b610f52565b005b3480156104d757600080fd5b506104e061108e565b6040516104ed9190615418565b60405180910390f35b34801561050257600080fd5b5061050b611094565b6040516105189190615418565b60405180910390f35b34801561052d57600080fd5b5061053661109a565b6040516105439190615418565b60405180910390f35b34801561055857600080fd5b506105616110a0565b60405161056e9190615418565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190614466565b6110a6565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190614376565b6111b5565b6040516105d491906150a0565b60405180910390f35b3480156105e957600080fd5b506105f26112ad565b6040516105ff9190615024565b60405180910390f35b34801561061457600080fd5b5061061d6112b3565b005b34801561062b57600080fd5b5061063461136e565b6040516106419190615418565b60405180910390f35b34801561065657600080fd5b5061065f611374565b60405161066c91906150a0565b60405180910390f35b34801561068157600080fd5b5061068a611387565b60405161069791906154c4565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190614401565b611390565b6040516106d491906150a0565b60405180910390f35b3480156106e957600080fd5b506106f261143c565b6040516106ff9190615024565b60405180910390f35b34801561071457600080fd5b5061071d611462565b60405161072a91906150a0565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906142e8565b611475565b60405161076791906150a0565b60405180910390f35b34801561077c57600080fd5b506107856114cb565b6040516107929190615418565b60405180910390f35b3480156107a757600080fd5b506107b06114d1565b6040516107bd91906150a0565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e891906142e8565b6114e4565b6040516107fa9190615418565b60405180910390f35b34801561080f57600080fd5b5061081861152c565b005b34801561082657600080fd5b50610841600480360381019061083c91906144b8565b6115b4565b005b34801561084f57600080fd5b506108586116f4565b60405161086591906150a0565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143c5565b611794565b005b3480156108a357600080fd5b506108be60048036038101906108b99190614507565b61186b565b005b3480156108cc57600080fd5b506108d561196a565b6040516108e29190615024565b60405180910390f35b3480156108f757600080fd5b50610900611994565b60405161090d9190615024565b60405180910390f35b34801561092257600080fd5b5061093d6004803603810190610938919061443d565b6119ba565b005b34801561094b57600080fd5b50610954611a53565b60405161096191906150d6565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906143c5565b611ae5565b005b34801561099f57600080fd5b506109a8611c00565b6040516109b59190615418565b60405180910390f35b3480156109ca57600080fd5b506109d3611c06565b6040516109e09190615418565b60405180910390f35b3480156109f557600080fd5b506109fe611c0c565b604051610a0b9190615418565b60405180910390f35b348015610a2057600080fd5b50610a29611c12565b604051610a369190615418565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a619190614401565b611c18565b604051610a7391906150a0565b60405180910390f35b348015610a8857600080fd5b50610a91611d03565b604051610a9e9190615418565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac99190614401565b611d09565b604051610adb91906150a0565b60405180910390f35b348015610af057600080fd5b50610af9611d27565b604051610b069190615418565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b3191906142e8565b611d2d565b604051610b4391906150a0565b60405180910390f35b348015610b5857600080fd5b50610b61611d4d565b604051610b6e91906150a0565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b9991906143c5565b611d60565b005b348015610bac57600080fd5b50610bc76004803603810190610bc29190614507565b611e85565b005b348015610bd557600080fd5b50610bf06004803603810190610beb9190614466565b611f84565b005b348015610bfe57600080fd5b50610c07612093565b604051610c1491906150a0565b60405180910390f35b348015610c2957600080fd5b50610c326120a6565b604051610c3f9190615418565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614466565b6120ac565b604051610c7c91906150a0565b60405180910390f35b348015610c9157600080fd5b50610c9a612201565b604051610ca79190615418565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd2919061433a565b612207565b604051610ce49190615418565b60405180910390f35b348015610cf957600080fd5b50610d0261228e565b604051610d0f9190615418565b60405180910390f35b348015610d2457600080fd5b50610d2d612294565b604051610d3a9190615418565b60405180910390f35b348015610d4f57600080fd5b50610d5861229a565b604051610d6591906150a0565b60405180910390f35b348015610d7a57600080fd5b50610d8361233a565b604051610d909190615418565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb91906142e8565b612340565b005b348015610dce57600080fd5b50610dd7612438565b604051610de49190615418565b60405180910390f35b348015610df957600080fd5b50610e0261243e565b604051610e0f9190615418565b60405180910390f35b348015610e2457600080fd5b50610e3f6004803603810190610e3a9190614466565b612444565b604051610e4c91906150a0565b60405180910390f35b606060038054610e6490615712565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090615712565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b6000610efb610ef4612731565b8484612739565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f5a612731565b73ffffffffffffffffffffffffffffffffffffffff16610f7861196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc5906152d8565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110ae612731565b73ffffffffffffffffffffffffffffffffffffffff166110cc61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611119906152d8565b60405180910390fd5b670de0b6b3a76400006103e86001611138610f48565b61114291906155c6565b61114c9190615595565b6111569190615595565b811015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906153f8565b60405180910390fd5b670de0b6b3a7640000816111ac91906155c6565b60088190555050565b60006111c2848484612904565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906152b8565b60405180910390fd5b6112a185611299612731565b858403612739565b60019150509392505050565b61dead81565b6112bb612731565b73ffffffffffffffffffffffffffffffffffffffff166112d961196a565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611326906152d8565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061143261139d612731565b8484600160006113ab612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142d919061553f565b612739565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611534612731565b73ffffffffffffffffffffffffffffffffffffffff1661155261196a565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906152d8565b60405180910390fd5b6115b2600061369e565b565b6115bc612731565b73ffffffffffffffffffffffffffffffffffffffff166115da61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611627906152d8565b60405180910390fd5b610258831015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90615178565b60405180910390fd5b6103e88211158015611688575060008210155b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90615218565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116fe612731565b73ffffffffffffffffffffffffffffffffffffffff1661171c61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906152d8565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61179c612731565b73ffffffffffffffffffffffffffffffffffffffff166117ba61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906152d8565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611873612731565b73ffffffffffffffffffffffffffffffffffffffff1661189161196a565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906152d8565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461190f919061553f565b611919919061553f565b60148190555060056014541115611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c906152f8565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c2612731565b73ffffffffffffffffffffffffffffffffffffffff166119e061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d906152d8565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611a6290615712565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90615712565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b611aed612731565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906152d8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be9906151b8565b60405180910390fd5b611bfc8282613764565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611c27612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906153d8565b60405180910390fd5b611cf8611cef612731565b85858403612739565b600191505092915050565b600e5481565b6000611d1d611d16612731565b8484612904565b6001905092915050565b60195481565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d68612731565b73ffffffffffffffffffffffffffffffffffffffff16611d8661196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd3906152d8565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e7991906150a0565b60405180910390a25050565b611e8d612731565b73ffffffffffffffffffffffffffffffffffffffff16611eab61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef8906152d8565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611f29919061553f565b611f33919061553f565b60188190555060056018541115611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690615318565b60405180910390fd5b505050565b611f8c612731565b73ffffffffffffffffffffffffffffffffffffffff16611faa61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906152d8565b60405180910390fd5b670de0b6b3a76400006103e86005612016610f48565b61202091906155c6565b61202a9190615595565b6120349190615595565b811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90615198565b60405180910390fd5b670de0b6b3a76400008161208a91906155c6565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006120b6612731565b73ffffffffffffffffffffffffffffffffffffffff166120d461196a565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612121906152d8565b60405180910390fd5b620186a06001612138610f48565b61214291906155c6565b61214c9190615595565b82101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590615238565b60405180910390fd5b6103e8600561219b610f48565b6121a591906155c6565b6121af9190615595565b8211156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890615258565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b60006122a4612731565b73ffffffffffffffffffffffffffffffffffffffff166122c261196a565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906152d8565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b612348612731565b73ffffffffffffffffffffffffffffffffffffffff1661236661196a565b73ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b3906152d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390615138565b60405180910390fd5b6124358161369e565b50565b601a5481565b600a5481565b600061244e612731565b73ffffffffffffffffffffffffffffffffffffffff1661246c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906152d8565b60405180910390fd5b600f546010546124d2919061553f565b4211612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90615378565b60405180910390fd5b6103e8821115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615338565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125bc9190615024565b60206040518083038186803b1580156125d457600080fd5b505afa1580156125e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260c919061448f565b90506000612637612710612629868561380590919063ffffffff16565b61381b90919063ffffffff16565b9050600081111561267257612671600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281090615158565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f79190615418565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90615358565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db906150f8565b60405180910390fd5b60008114156129fe576129f983836000613831565b613699565b601160009054906101000a900460ff16156130c357612a1b61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a895750612a5961196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612afc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b155750600660149054906101000a900460ff16155b156130c257601160019054906101000a900460ff16612c0f57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcf5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590615118565b60405180910390fd5b5b601360009054906101000a900460ff1615612dd957612c2c61196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cb357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dd85743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90615298565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2357600854811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90615278565b60405180910390fd5b600a54612ed2836114e4565b82612edd919061553f565b1115612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f15906153b8565b60405180910390fd5b6130c1565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fc65750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557600854811115613010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613007906151f8565b60405180910390fd5b6130c0565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130bf57600a54613072836114e4565b8261307d919061553f565b11156130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b5906153b8565b60405180910390fd5b5b5b5b5b5b60006130ce306114e4565b9050600060095482101590508080156130f35750601160029054906101000a900460ff165b801561310c5750600660149054906101000a900460ff16155b80156131625750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320e5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613252576001600660146101000a81548160ff021916908315150217905550613236613ab2565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132b85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132d05750600c60009054906101000a900460ff165b80156132eb5750600d54600e546132e7919061553f565b4210155b80156133415750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133505761334e613cdb565b505b6000600660149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561368957602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601854115b15613540576134a060646134926018548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601854601a54826134b391906155c6565b6134bd9190615595565b601d60008282546134ce919061553f565b92505081905550601854601b54826134e691906155c6565b6134f09190615595565b601e6000828254613501919061553f565b925050819055506018546019548261351991906155c6565b6135239190615595565b601c6000828254613534919061553f565b92505081905550613665565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359b57506000601454115b15613664576135c860646135ba6014548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601454601654826135db91906155c6565b6135e59190615595565b601d60008282546135f6919061553f565b925050819055506014546017548261360e91906155c6565b6136189190615595565b601e6000828254613629919061553f565b925050819055506014546015548261364191906155c6565b61364b9190615595565b601c600082825461365c919061553f565b925050819055505b5b600081111561367a57613679873083613831565b5b80856136869190615620565b94505b613694878787613831565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818361381391906155c6565b905092915050565b600081836138299190615595565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389890615358565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613908906150f8565b60405180910390fd5b61391c838383613eb6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613999906151d8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a35919061553f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a999190615418565b60405180910390a3613aac848484613ebb565b50505050565b6000613abd306114e4565b90506000601e54601d54613ad1919061553f565b9050600080831480613ae35750600082145b15613af057505050613cd9565b6014600954613aff91906155c6565b831115613b18576014600954613b1591906155c6565b92505b6000600283601d5486613b2b91906155c6565b613b359190615595565b613b3f9190615595565b90506000613b6a601c54613b5c8488613ec090919063ffffffff16565b613ec090919063ffffffff16565b90506000479050613b7a82613ed6565b6000613b8f8247613ec090919063ffffffff16565b90506000613bba87613bac601e548561380590919063ffffffff16565b61381b90919063ffffffff16565b905060008183613bca9190615620565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c2a9061500f565b60006040518083038185875af1925050503d8060008114613c67576040519150601f19603f3d011682016040523d82523d6000602084013e613c6c565b606091505b505080975050600086118015613c825750600081115b15613ccf57613c918682614194565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d54604051613cc69392919061548d565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613d419190615024565b60206040518083038186803b158015613d5957600080fd5b505afa158015613d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d91919061448f565b90506000613dbe612710613db0600b548561380590919063ffffffff16565b61381b90919063ffffffff16565b90506000811115613df957613df8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ece9190615620565b905092915050565b6000600267ffffffffffffffff811115613f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613f475781602001602082028036833780820191505090505b5090503081600081518110613f85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561402557600080fd5b505afa158015614039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405d9190614311565b81600181518110614097577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140fc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612739565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161415e959493929190615433565b600060405180830381600087803b15801561417857600080fd5b505af115801561418c573d6000803e3d6000fd5b505050505050565b6141bf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612739565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016142269695949392919061503f565b6060604051808303818588803b15801561423f57600080fd5b505af1158015614253573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142789190614556565b5050505050565b60008135905061428e816157e2565b92915050565b6000815190506142a3816157e2565b92915050565b6000813590506142b8816157f9565b92915050565b6000813590506142cd81615810565b92915050565b6000815190506142e281615810565b92915050565b6000602082840312156142fa57600080fd5b60006143088482850161427f565b91505092915050565b60006020828403121561432357600080fd5b600061433184828501614294565b91505092915050565b6000806040838503121561434d57600080fd5b600061435b8582860161427f565b925050602061436c8582860161427f565b9150509250929050565b60008060006060848603121561438b57600080fd5b60006143998682870161427f565b93505060206143aa8682870161427f565b92505060406143bb868287016142be565b9150509250925092565b600080604083850312156143d857600080fd5b60006143e68582860161427f565b92505060206143f7858286016142a9565b9150509250929050565b6000806040838503121561441457600080fd5b60006144228582860161427f565b9250506020614433858286016142be565b9150509250929050565b60006020828403121561444f57600080fd5b600061445d848285016142a9565b91505092915050565b60006020828403121561447857600080fd5b6000614486848285016142be565b91505092915050565b6000602082840312156144a157600080fd5b60006144af848285016142d3565b91505092915050565b6000806000606084860312156144cd57600080fd5b60006144db868287016142be565b93505060206144ec868287016142be565b92505060406144fd868287016142a9565b9150509250925092565b60008060006060848603121561451c57600080fd5b600061452a868287016142be565b935050602061453b868287016142be565b925050604061454c868287016142be565b9150509250925092565b60008060006060848603121561456b57600080fd5b6000614579868287016142d3565b935050602061458a868287016142d3565b925050604061459b868287016142d3565b9150509250925092565b60006145b183836145bd565b60208301905092915050565b6145c681615654565b82525050565b6145d581615654565b82525050565b60006145e6826154ef565b6145f08185615512565b93506145fb836154df565b8060005b8381101561462c57815161461388826145a5565b975061461e83615505565b9250506001810190506145ff565b5085935050505092915050565b61464281615666565b82525050565b614651816156a9565b82525050565b614660816156cd565b82525050565b6000614671826154fa565b61467b818561552e565b935061468b8185602086016156df565b614694816157d1565b840191505092915050565b60006146ac60238361552e565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061471260168361552e565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b600061475260268361552e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b860228361552e565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061481e60338361552e565b91507f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008301527f616e206576657279203130206d696e75746573000000000000000000000000006020830152604082019050919050565b600061488460248361552e565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148ea60398361552e565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061495060268361552e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149b660368361552e565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b6000614a1c60308361552e565b91507f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008301527f747765656e20302520616e6420313025000000000000000000000000000000006020830152604082019050919050565b6000614a8260358361552e565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b6000614ae860348361552e565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614b4e60358361552e565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614bb460498361552e565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614c4060288361552e565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ca660208361552e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614ce6601c8361552e565b91507f4d757374206b6565702066656573206174203525206f72206c657373000000006000830152602082019050919050565b6000614d26601d8361552e565b91507f4d757374206b656570206665657320617420203525206f72206c6573730000006000830152602082019050919050565b6000614d66602a8361552e565b91507f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008301527f6b656e7320696e204c50000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dcc60258361552e565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e3260208361552e565b91507f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686000830152602082019050919050565b6000614e72600083615523565b9150600082019050919050565b6000614e8c60248361552e565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ef260138361552e565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b6000614f3260258361552e565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f98602f8361552e565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b614ffa81615692565b82525050565b6150098161569c565b82525050565b600061501a82614e65565b9150819050919050565b600060208201905061503960008301846145cc565b92915050565b600060c08201905061505460008301896145cc565b6150616020830188614ff1565b61506e6040830187614657565b61507b6060830186614657565b61508860808301856145cc565b61509560a0830184614ff1565b979650505050505050565b60006020820190506150b56000830184614639565b92915050565b60006020820190506150d06000830184614648565b92915050565b600060208201905081810360008301526150f08184614666565b905092915050565b600060208201905081810360008301526151118161469f565b9050919050565b6000602082019050818103600083015261513181614705565b9050919050565b6000602082019050818103600083015261515181614745565b9050919050565b60006020820190508181036000830152615171816147ab565b9050919050565b6000602082019050818103600083015261519181614811565b9050919050565b600060208201905081810360008301526151b181614877565b9050919050565b600060208201905081810360008301526151d1816148dd565b9050919050565b600060208201905081810360008301526151f181614943565b9050919050565b60006020820190508181036000830152615211816149a9565b9050919050565b6000602082019050818103600083015261523181614a0f565b9050919050565b6000602082019050818103600083015261525181614a75565b9050919050565b6000602082019050818103600083015261527181614adb565b9050919050565b6000602082019050818103600083015261529181614b41565b9050919050565b600060208201905081810360008301526152b181614ba7565b9050919050565b600060208201905081810360008301526152d181614c33565b9050919050565b600060208201905081810360008301526152f181614c99565b9050919050565b6000602082019050818103600083015261531181614cd9565b9050919050565b6000602082019050818103600083015261533181614d19565b9050919050565b6000602082019050818103600083015261535181614d59565b9050919050565b6000602082019050818103600083015261537181614dbf565b9050919050565b6000602082019050818103600083015261539181614e25565b9050919050565b600060208201905081810360008301526153b181614e7f565b9050919050565b600060208201905081810360008301526153d181614ee5565b9050919050565b600060208201905081810360008301526153f181614f25565b9050919050565b6000602082019050818103600083015261541181614f8b565b9050919050565b600060208201905061542d6000830184614ff1565b92915050565b600060a0820190506154486000830188614ff1565b6154556020830187614657565b818103604083015261546781866145db565b905061547660608301856145cc565b6154836080830184614ff1565b9695505050505050565b60006060820190506154a26000830186614ff1565b6154af6020830185614ff1565b6154bc6040830184614ff1565b949350505050565b60006020820190506154d96000830184615000565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061554a82615692565b915061555583615692565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561558a57615589615744565b5b828201905092915050565b60006155a082615692565b91506155ab83615692565b9250826155bb576155ba615773565b5b828204905092915050565b60006155d182615692565b91506155dc83615692565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561561557615614615744565b5b828202905092915050565b600061562b82615692565b915061563683615692565b92508282101561564957615648615744565b5b828203905092915050565b600061565f82615672565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006156b4826156bb565b9050919050565b60006156c682615672565b9050919050565b60006156d882615692565b9050919050565b60005b838110156156fd5780820151818401526020810190506156e2565b8381111561570c576000848401525b50505050565b6000600282049050600182168061572a57607f821691505b6020821081141561573e5761573d6157a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6157eb81615654565b81146157f657600080fd5b50565b61580281615666565b811461580d57600080fd5b50565b61581981615692565b811461582457600080fd5b5056fea26469706673582212204990a4664cad1128181297f14de5beb5fa18cab9515d53db836f5dc6c34baf0364736f6c63430008000033
Deployed Bytecode Sourcemap
27091:17976:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9687:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11995:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28692:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27170:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10807:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34733:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27689:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27503:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28476:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28441:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32329:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12687:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27263:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31231:154;;;;;;;;;;;;;:::i;:::-;;27599:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27559:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10649:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13625:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27228:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27787:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34898:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28285:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27867:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10978:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3483:103;;;;;;;;;;;;;:::i;:::-;;42649:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31437:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32876:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33247:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2832:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27355:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33139:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9906:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34225:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28247:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27743:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28516:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28402:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14425:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27651:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11368:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28321:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28913:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27827:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34035:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33636:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32612:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28085:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31824:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28133:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11647:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27430:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28168:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31619:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28205:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3741:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28359:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27470:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44008:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9687:100;9741:13;9774:5;9767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9687:100;:::o;11995:210::-;12114:4;12136:39;12145:12;:10;:12::i;:::-;12159:7;12168:6;12136:8;:39::i;:::-;12193:4;12186:11;;11995:210;;;;:::o;28692:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27170:51::-;;;:::o;10807:108::-;10868:7;10895:12;;10888:19;;10807:108;:::o;34733:157::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34840:9:::1;;;;;;;;;;;34812:38;;34829:9;34812:38;;;;;;;;;;;;34873:9;34861;;:21;;;;;;;;;;;;;;;;;;34733:157:::0;:::o;27689:47::-;;;;:::o;27503:36::-;;;;:::o;28476:33::-;;;;:::o;28441:28::-;;;;:::o;32329:275::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32466:4:::1;32458;32453:1;32437:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32436:26;;;;:::i;:::-;32435:35;;;;:::i;:::-;32425:6;:45;;32403:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;32589:6;32579;:17;;;;:::i;:::-;32556:20;:40;;;;32329:275:::0;:::o;12687:529::-;12827:4;12844:36;12854:6;12862:9;12873:6;12844:9;:36::i;:::-;12893:24;12920:11;:19;12932:6;12920:19;;;;;;;;;;;;;;;:33;12940:12;:10;:12::i;:::-;12920:33;;;;;;;;;;;;;;;;12893:60;;13006:6;12986:16;:26;;12964:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13116:57;13125:6;13133:12;:10;:12::i;:::-;13166:6;13147:16;:25;13116:8;:57::i;:::-;13204:4;13197:11;;;12687:529;;;;;:::o;27263:53::-;27309:6;27263:53;:::o;31231:154::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31301:4:::1;31285:13;;:20;;;;;;;;;;;;;;;;;;31330:4;31316:11;;:18;;;;;;;;;;;;;;;;;;31362:15;31345:14;:32;;;;31231:154::o:0;27599:45::-;;;;:::o;27559:33::-;;;;;;;;;;;;;:::o;10649:93::-;10707:5;10732:2;10725:9;;10649:93;:::o;13625:297::-;13740:4;13762:130;13785:12;:10;:12::i;:::-;13812:7;13871:10;13834:11;:25;13846:12;:10;:12::i;:::-;13834:25;;;;;;;;;;;;;;;:34;13860:7;13834:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13762:8;:130::i;:::-;13910:4;13903:11;;13625:297;;;;:::o;27228:28::-;;;;;;;;;;;;;:::o;27787:33::-;;;;;;;;;;;;;:::o;34898:126::-;34964:4;34988:19;:28;35008:7;34988:28;;;;;;;;;;;;;;;;;;;;;;;;;34981:35;;34898:126;;;:::o;28285:29::-;;;;:::o;27867:31::-;;;;;;;;;;;;;:::o;10978:177::-;11097:7;11129:9;:18;11139:7;11129:18;;;;;;;;;;;;;;;;11122:25;;10978:177;;;:::o;3483:103::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3548:30:::1;3575:1;3548:18;:30::i;:::-;3483:103::o:0;42649:555::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42851:3:::1;42828:19;:26;;42806:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;42978:4;42966:8;:16;;:33;;;;;42998:1;42986:8;:13;;42966:33;42944:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;43104:19;43086:15;:37;;;;43153:8;43134:16;:27;;;;43188:8;43172:13;;:24;;;;;;;;;;;;;;;;;;42649:555:::0;;;:::o;31437:121::-;31489:4;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31523:5:::1;31506:14;;:22;;;;;;;;;;;;;;;;;;31546:4;31539:11;;31437:121:::0;:::o;32876:167::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33031:4:::1;32989:31;:39;33021:6;32989:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32876:167:::0;;:::o;33247:381::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33405:8:::1;33392:10;:21;;;;33442:13;33424:15;:31;;;;33478:7;33466:9;:19;;;;33542:9;;33524:15;;33511:10;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;33496:12;:55;;;;33586:1;33570:12;;:17;;33562:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33247:381:::0;;;:::o;2832:87::-;2878:7;2905:6;;;;;;;;;;;2898:13;;2832:87;:::o;27355:24::-;;;;;;;;;;;;;:::o;33139:100::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33224:7:::1;33210:11;;:21;;;;;;;;;;;;;;;;;;33139:100:::0;:::o;9906:104::-;9962:13;9995:7;9988:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9906:104;:::o;34225:304::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34369:13:::1;;;;;;;;;;;34361:21;;:4;:21;;;;34339:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34480:41;34509:4;34515:5;34480:28;:41::i;:::-;34225:304:::0;;:::o;28247:29::-;;;;:::o;27743:35::-;;;;:::o;28516:27::-;;;;:::o;28402:30::-;;;;:::o;14425:482::-;14545:4;14567:24;14594:11;:25;14606:12;:10;:12::i;:::-;14594:25;;;;;;;;;;;;;;;:34;14620:7;14594:34;;;;;;;;;;;;;;;;14567:61;;14681:15;14661:16;:35;;14639:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14797:67;14806:12;:10;:12::i;:::-;14820:7;14848:15;14829:16;:34;14797:8;:67::i;:::-;14895:4;14888:11;;;14425:482;;;;:::o;27651:29::-;;;;:::o;11368:216::-;11490:4;11512:42;11522:12;:10;:12::i;:::-;11536:9;11547:6;11512:9;:42::i;:::-;11572:4;11565:11;;11368:216;;;;:::o;28321:31::-;;;;:::o;28913:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27827:33::-;;;;;;;;;;;;;:::o;34035:182::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34151:8:::1;34120:19;:28;34140:7;34120:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34191:7;34175:34;;;34200:8;34175:34;;;;;;:::i;:::-;;;;;;;;34035:182:::0;;:::o;33636:391::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33796:8:::1;33782:11;:22;;;;33834:13;33815:16;:32;;;;33871:7;33858:10;:20;;;;33938:10;;33919:16;;33905:11;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;33889:13;:59;;;;33984:1;33967:13;;:18;;33959:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33636:391:::0;;;:::o;32612:256::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32752:4:::1;32744;32739:1;32723:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32722:26;;;;:::i;:::-;32721:35;;;;:::i;:::-;32711:6;:45;;32689:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;32853:6;32843;:17;;;;:::i;:::-;32831:9;:29;;;;32612:256:::0;:::o;28085:39::-;;;;;;;;;;;;;:::o;27388:35::-;;;;:::o;31824:497::-;31932:4;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32011:6:::1;32006:1;31990:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31989:28;;;;:::i;:::-;31976:9;:41;;31954:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32166:4;32161:1;32145:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32144:26;;;;:::i;:::-;32131:9;:39;;32109:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;32282:9;32261:18;:30;;;;32309:4;32302:11;;31824:497:::0;;;:::o;28133:28::-;;;;:::o;11647:201::-;11781:7;11813:11;:18;11825:5;11813:18;;;;;;;;;;;;;;;:27;11832:7;11813:27;;;;;;;;;;;;;;;;11806:34;;11647:201;;;;:::o;27430:33::-;;;;:::o;28168:30::-;;;;:::o;31619:135::-;31679:4;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31719:5:::1;31696:20;;:28;;;;;;;;;;;;;;;;;;31742:4;31735:11;;31619:135:::0;:::o;28205:35::-;;;;:::o;3741:238::-;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3864:1:::1;3844:22;;:8;:22;;;;3822:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3943:28;3962:8;3943:18;:28::i;:::-;3741:238:::0;:::o;28359:36::-;;;;:::o;27470:24::-;;;;:::o;44008:1056::-;44119:4;3063:12;:10;:12::i;:::-;3052:23;;:7;:5;:7::i;:::-;:23;;;3044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:19:::1;;44181:20;;:42;;;;:::i;:::-;44163:15;:60;44141:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;44313:4;44302:7;:15;;44294:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44398:15;44375:20;:38;;;;44468:28;44499:4;:14;;;44514:13;;;;;;;;;;;44499:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44468:60;;44578:20;44601:44;44639:5;44601:33;44626:7;44601:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;44578:67;;44765:1;44750:12;:16;44746:110;;;44783:61;44799:13;;;;;;;;;;;44822:6;44831:12;44783:15;:61::i;:::-;44746:110;44931:19;44968:13;;;;;;;;;;;44931:51;;44993:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45020:14;;;;;;;;;;45052:4;45045:11;;;;;44008:1056:::0;;;:::o;1674:98::-;1727:7;1754:10;1747:17;;1674:98;:::o;18215:380::-;18368:1;18351:19;;:5;:19;;;;18343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18449:1;18430:21;;:7;:21;;;;18422:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18533:6;18503:11;:18;18515:5;18503:18;;;;;;;;;;;;;;;:27;18522:7;18503:27;;;;;;;;;;;;;;;:36;;;;18571:7;18555:32;;18564:5;18555:32;;;18580:6;18555:32;;;;;;:::i;:::-;;;;;;;;18215:380;;;:::o;35032:4991::-;35180:1;35164:18;;:4;:18;;;;35156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:1;35243:16;;:2;:16;;;;35235:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35326:1;35316:6;:11;35312:93;;;35344:28;35360:4;35366:2;35370:1;35344:15;:28::i;:::-;35387:7;;35312:93;35421:14;;;;;;;;;;;35417:2487;;;35482:7;:5;:7::i;:::-;35474:15;;:4;:15;;;;:49;;;;;35516:7;:5;:7::i;:::-;35510:13;;:2;:13;;;;35474:49;:86;;;;;35558:1;35544:16;;:2;:16;;;;35474:86;:128;;;;;35595:6;35581:21;;:2;:21;;;;35474:128;:158;;;;;35624:8;;;;;;;;;;;35623:9;35474:158;35452:2441;;;35672:13;;;;;;;;;;;35667:223;;35744:19;:25;35764:4;35744:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35773:19;:23;35793:2;35773:23;;;;;;;;;;;;;;;;;;;;;;;;;35744:52;35710:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35667:223;36046:20;;;;;;;;;;;36042:641;;;36127:7;:5;:7::i;:::-;36121:13;;:2;:13;;;;:72;;;;;36177:15;36163:30;;:2;:30;;;;36121:72;:129;;;;;36236:13;;;;;;;;;;;36222:28;;:2;:28;;;;36121:129;36091:573;;;36414:12;36339:28;:39;36368:9;36339:39;;;;;;;;;;;;;;;;:87;36301:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36628:12;36586:28;:39;36615:9;36586:39;;;;;;;;;;;;;;;:54;;;;36091:573;36042:641;36757:25;:31;36783:4;36757:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36814:31;:35;36846:2;36814:35;;;;;;;;;;;;;;;;;;;;;;;;;36813:36;36757:92;36731:1147;;;36936:20;;36926:6;:30;;36892:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37144:9;;37127:13;37137:2;37127:9;:13::i;:::-;37118:6;:22;;;;:::i;:::-;:35;;37084:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36731:1147;;;37322:25;:29;37348:2;37322:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37377:31;:37;37409:4;37377:37;;;;;;;;;;;;;;;;;;;;;;;;;37376:38;37322:92;37296:582;;;37501:20;;37491:6;:30;;37457:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37296:582;;;37658:31;:35;37690:2;37658:35;;;;;;;;;;;;;;;;;;;;;;;;;37653:225;;37778:9;;37761:13;37771:2;37761:9;:13::i;:::-;37752:6;:22;;;;:::i;:::-;:35;;37718:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37653:225;37296:582;36731:1147;35452:2441;35417:2487;37916:28;37947:24;37965:4;37947:9;:24::i;:::-;37916:55;;37984:12;38023:18;;37999:20;:42;;37984:57;;38072:7;:35;;;;;38096:11;;;;;;;;;;;38072:35;:61;;;;;38125:8;;;;;;;;;;;38124:9;38072:61;:110;;;;;38151:25;:31;38177:4;38151:31;;;;;;;;;;;;;;;;;;;;;;;;;38150:32;38072:110;:153;;;;;38200:19;:25;38220:4;38200:25;;;;;;;;;;;;;;;;;;;;;;;;;38199:26;38072:153;:194;;;;;38243:19;:23;38263:2;38243:23;;;;;;;;;;;;;;;;;;;;;;;;;38242:24;38072:194;38054:326;;;38304:4;38293:8;;:15;;;;;;;;;;;;;;;;;;38325:10;:8;:10::i;:::-;38363:5;38352:8;;:16;;;;;;;;;;;;;;;;;;38054:326;38411:8;;;;;;;;;;;38410:9;:55;;;;;38436:25;:29;38462:2;38436:29;;;;;;;;;;;;;;;;;;;;;;;;;38410:55;:85;;;;;38482:13;;;;;;;;;;;38410:85;:153;;;;;38548:15;;38531:14;;:32;;;;:::i;:::-;38512:15;:51;;38410:153;:196;;;;;38581:19;:25;38601:4;38581:25;;;;;;;;;;;;;;;;;;;;;;;;;38580:26;38410:196;38392:282;;;38633:29;:27;:29::i;:::-;;38392:282;38686:12;38702:8;;;;;;;;;;;38701:9;38686:24;;38812:19;:25;38832:4;38812:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38841:19;:23;38861:2;38841:23;;;;;;;;;;;;;;;;;;;;;;;;;38812:52;38808:100;;;38891:5;38881:15;;38808:100;38920:12;39025:7;39021:949;;;39077:25;:29;39103:2;39077:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39126:1;39110:13;;:17;39077:50;39073:748;;;39155:34;39185:3;39155:25;39166:13;;39155:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39148:41;;39258:13;;39238:16;;39231:4;:23;;;;:::i;:::-;39230:41;;;;:::i;:::-;39208:18;;:63;;;;;;;:::i;:::-;;;;;;;;39328:13;;39314:10;;39307:4;:17;;;;:::i;:::-;39306:35;;;;:::i;:::-;39290:12;;:51;;;;;;;:::i;:::-;;;;;;;;39400:13;;39385:11;;39378:4;:18;;;;:::i;:::-;39377:36;;;;:::i;:::-;39360:13;;:53;;;;;;;:::i;:::-;;;;;;;;39073:748;;;39475:25;:31;39501:4;39475:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39525:1;39510:12;;:16;39475:51;39471:350;;;39554:33;39583:3;39554:24;39565:12;;39554:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39547:40;;39655:12;;39636:15;;39629:4;:22;;;;:::i;:::-;39628:39;;;;:::i;:::-;39606:18;;:61;;;;;;;:::i;:::-;;;;;;;;39723:12;;39710:9;;39703:4;:16;;;;:::i;:::-;39702:33;;;;:::i;:::-;39686:12;;:49;;;;;;;:::i;:::-;;;;;;;;39793:12;;39779:10;;39772:4;:17;;;;:::i;:::-;39771:34;;;;:::i;:::-;39754:13;;:51;;;;;;;:::i;:::-;;;;;;;;39471:350;39073:748;39848:1;39841:4;:8;39837:91;;;39870:42;39886:4;39900;39907;39870:15;:42::i;:::-;39837:91;39954:4;39944:14;;;;;:::i;:::-;;;39021:949;39982:33;39998:4;40004:2;40008:6;39982:15;:33::i;:::-;35032:4991;;;;;;;;:::o;4139:191::-;4213:16;4232:6;;;;;;;;;;;4213:25;;4258:8;4249:6;;:17;;;;;;;;;;;;;;;;;;4313:8;4282:40;;4303:8;4282:40;;;;;;;;;;;;4139:191;;:::o;34537:188::-;34654:5;34620:25;:31;34646:4;34620:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34711:5;34677:40;;34705:4;34677:40;;;;;;;;;;;;34537:188;;:::o;23664:98::-;23722:7;23753:1;23749;:5;;;;:::i;:::-;23742:12;;23664:98;;;;:::o;24063:::-;24121:7;24152:1;24148;:5;;;;:::i;:::-;24141:12;;24063:98;;;;:::o;15397:770::-;15555:1;15537:20;;:6;:20;;;;15529:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15639:1;15618:23;;:9;:23;;;;15610:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15694:47;15715:6;15723:9;15734:6;15694:20;:47::i;:::-;15754:21;15778:9;:17;15788:6;15778:17;;;;;;;;;;;;;;;;15754:41;;15845:6;15828:13;:23;;15806:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15989:6;15973:13;:22;15953:9;:17;15963:6;15953:17;;;;;;;;;;;;;;;:42;;;;16041:6;16017:9;:20;16027:9;16017:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16082:9;16065:35;;16074:6;16065:35;;;16093:6;16065:35;;;;;;:::i;:::-;;;;;;;;16113:46;16133:6;16141:9;16152:6;16113:19;:46::i;:::-;15397:770;;;;:::o;41153:1488::-;41192:23;41218:24;41236:4;41218:9;:24::i;:::-;41192:50;;41253:25;41315:12;;41281:18;;:46;;;;:::i;:::-;41253:74;;41338:12;41386:1;41367:15;:20;:46;;;;41412:1;41391:17;:22;41367:46;41363:85;;;41430:7;;;;;41363:85;41503:2;41482:18;;:23;;;;:::i;:::-;41464:15;:41;41460:115;;;41561:2;41540:18;;:23;;;;:::i;:::-;41522:41;;41460:115;41636:23;41749:1;41716:17;41681:18;;41663:15;:36;;;;:::i;:::-;41662:71;;;;:::i;:::-;:88;;;;:::i;:::-;41636:114;;41761:26;41790:55;41831:13;;41790:36;41810:15;41790;:19;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;41761:84;;41858:25;41886:21;41858:49;;41920:36;41937:18;41920:16;:36::i;:::-;41969:18;41990:44;42016:17;41990:21;:25;;:44;;;;:::i;:::-;41969:65;;42047:17;42067:51;42100:17;42067:28;42082:12;;42067:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42047:71;;42131:23;42170:9;42157:10;:22;;;;:::i;:::-;42131:48;;42213:1;42192:18;:22;;;;42241:1;42225:13;:17;;;;42268:1;42253:12;:16;;;;42306:9;;;;;;;;;;;42298:23;;42329:9;42298:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42284:59;;;;;42378:1;42360:15;:19;:42;;;;;42401:1;42383:15;:19;42360:42;42356:278;;;42419:46;42432:15;42449;42419:12;:46::i;:::-;42485:137;42518:18;42555:15;42589:18;;42485:137;;;;;;;;:::i;:::-;;;;;;;;42356:278;41153:1488;;;;;;;;;;:::o;43212:788::-;43269:4;43303:15;43286:14;:32;;;;43373:28;43404:4;:14;;;43419:13;;;;;;;;;;;43404:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43373:60;;43483:20;43506:77;43567:5;43506:42;43531:16;;43506:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;43483:100;;43703:1;43688:12;:16;43684:110;;;43721:61;43737:13;;;;;;;;;;;43760:6;43769:12;43721:15;:61::i;:::-;43684:110;43869:19;43906:13;;;;;;;;;;;43869:51;;43931:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43958:12;;;;;;;;;;43988:4;43981:11;;;;;43212:788;:::o;19195:125::-;;;;:::o;19924:124::-;;;;:::o;23307:98::-;23365:7;23396:1;23392;:5;;;;:::i;:::-;23385:12;;23307:98;;;;:::o;40031:589::-;40157:21;40195:1;40181:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40157:40;;40226:4;40208;40213:1;40208:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;40252:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40242:4;40247:1;40242:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;40287:62;40304:4;40319:15;40337:11;40287:8;:62::i;:::-;40388:15;:66;;;40469:11;40495:1;40539:4;40566;40586:15;40388:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40031:589;;:::o;40628:517::-;40776:62;40793:4;40808:15;40826:11;40776:8;:62::i;:::-;40881:15;:31;;;40920:9;40953:4;40973:11;40999:1;41042;27309:6;41111:15;40881:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40628:517;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;;;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;;;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:284::-;;3732:2;3720:9;3711:7;3707:23;3703:32;3700:2;;;3748:1;3745;3738:12;3700:2;3791:1;3816:64;3872:7;3863:6;3852:9;3848:22;3816:64;:::i;:::-;3806:74;;3762:128;3690:207;;;;:::o;3903:546::-;;;;4042:2;4030:9;4021:7;4017:23;4013:32;4010:2;;;4058:1;4055;4048:12;4010:2;4101:1;4126:53;4171:7;4162:6;4151:9;4147:22;4126:53;:::i;:::-;4116:63;;4072:117;4228:2;4254:53;4299:7;4290:6;4279:9;4275:22;4254:53;:::i;:::-;4244:63;;4199:118;4356:2;4382:50;4424:7;4415:6;4404:9;4400:22;4382:50;:::i;:::-;4372:60;;4327:115;4000:449;;;;;:::o;4455:552::-;;;;4597:2;4585:9;4576:7;4572:23;4568:32;4565:2;;;4613:1;4610;4603:12;4565:2;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4555:452;;;;;:::o;5013:596::-;;;;5166:2;5154:9;5145:7;5141:23;5137:32;5134:2;;;5182:1;5179;5172:12;5134:2;5225:1;5250:64;5306:7;5297:6;5286:9;5282:22;5250:64;:::i;:::-;5240:74;;5196:128;5363:2;5389:64;5445:7;5436:6;5425:9;5421:22;5389:64;:::i;:::-;5379:74;;5334:129;5502:2;5528:64;5584:7;5575:6;5564:9;5560:22;5528:64;:::i;:::-;5518:74;;5473:129;5124:485;;;;;:::o;5615:179::-;;5705:46;5747:3;5739:6;5705:46;:::i;:::-;5783:4;5778:3;5774:14;5760:28;;5695:99;;;;:::o;5800:108::-;5877:24;5895:5;5877:24;:::i;:::-;5872:3;5865:37;5855:53;;:::o;5914:118::-;6001:24;6019:5;6001:24;:::i;:::-;5996:3;5989:37;5979:53;;:::o;6068:732::-;;6216:54;6264:5;6216:54;:::i;:::-;6286:86;6365:6;6360:3;6286:86;:::i;:::-;6279:93;;6396:56;6446:5;6396:56;:::i;:::-;6475:7;6506:1;6491:284;6516:6;6513:1;6510:13;6491:284;;;6592:6;6586:13;6619:63;6678:3;6663:13;6619:63;:::i;:::-;6612:70;;6705:60;6758:6;6705:60;:::i;:::-;6695:70;;6551:224;6538:1;6535;6531:9;6526:14;;6491:284;;;6495:14;6791:3;6784:10;;6192:608;;;;;;;:::o;6806:109::-;6887:21;6902:5;6887:21;:::i;:::-;6882:3;6875:34;6865:50;;:::o;6921:181::-;7033:62;7089:5;7033:62;:::i;:::-;7028:3;7021:75;7011:91;;:::o;7108:147::-;7203:45;7242:5;7203:45;:::i;:::-;7198:3;7191:58;7181:74;;:::o;7261:364::-;;7377:39;7410:5;7377:39;:::i;:::-;7432:71;7496:6;7491:3;7432:71;:::i;:::-;7425:78;;7512:52;7557:6;7552:3;7545:4;7538:5;7534:16;7512:52;:::i;:::-;7589:29;7611:6;7589:29;:::i;:::-;7584:3;7580:39;7573:46;;7353:272;;;;;:::o;7631:367::-;;7794:67;7858:2;7853:3;7794:67;:::i;:::-;7787:74;;7891:34;7887:1;7882:3;7878:11;7871:55;7957:5;7952:2;7947:3;7943:12;7936:27;7989:2;7984:3;7980:12;7973:19;;7777:221;;;:::o;8004:320::-;;8167:67;8231:2;8226:3;8167:67;:::i;:::-;8160:74;;8264:24;8260:1;8255:3;8251:11;8244:45;8315:2;8310:3;8306:12;8299:19;;8150:174;;;:::o;8330:370::-;;8493:67;8557:2;8552:3;8493:67;:::i;:::-;8486:74;;8590:34;8586:1;8581:3;8577:11;8570:55;8656:8;8651:2;8646:3;8642:12;8635:30;8691:2;8686:3;8682:12;8675:19;;8476:224;;;:::o;8706:366::-;;8869:67;8933:2;8928:3;8869:67;:::i;:::-;8862:74;;8966:34;8962:1;8957:3;8953:11;8946:55;9032:4;9027:2;9022:3;9018:12;9011:26;9063:2;9058:3;9054:12;9047:19;;8852:220;;;:::o;9078:383::-;;9241:67;9305:2;9300:3;9241:67;:::i;:::-;9234:74;;9338:34;9334:1;9329:3;9325:11;9318:55;9404:21;9399:2;9394:3;9390:12;9383:43;9452:2;9447:3;9443:12;9436:19;;9224:237;;;:::o;9467:368::-;;9630:67;9694:2;9689:3;9630:67;:::i;:::-;9623:74;;9727:34;9723:1;9718:3;9714:11;9707:55;9793:6;9788:2;9783:3;9779:12;9772:28;9826:2;9821:3;9817:12;9810:19;;9613:222;;;:::o;9841:389::-;;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10101:34;10097:1;10092:3;10088:11;10081:55;10167:27;10162:2;10157:3;10153:12;10146:49;10221:2;10216:3;10212:12;10205:19;;9987:243;;;:::o;10236:370::-;;10399:67;10463:2;10458:3;10399:67;:::i;:::-;10392:74;;10496:34;10492:1;10487:3;10483:11;10476:55;10562:8;10557:2;10552:3;10548:12;10541:30;10597:2;10592:3;10588:12;10581:19;;10382:224;;;:::o;10612:386::-;;10775:67;10839:2;10834:3;10775:67;:::i;:::-;10768:74;;10872:34;10868:1;10863:3;10859:11;10852:55;10938:24;10933:2;10928:3;10924:12;10917:46;10989:2;10984:3;10980:12;10973:19;;10758:240;;;:::o;11004:380::-;;11167:67;11231:2;11226:3;11167:67;:::i;:::-;11160:74;;11264:34;11260:1;11255:3;11251:11;11244:55;11330:18;11325:2;11320:3;11316:12;11309:40;11375:2;11370:3;11366:12;11359:19;;11150:234;;;:::o;11390:385::-;;11553:67;11617:2;11612:3;11553:67;:::i;:::-;11546:74;;11650:34;11646:1;11641:3;11637:11;11630:55;11716:23;11711:2;11706:3;11702:12;11695:45;11766:2;11761:3;11757:12;11750:19;;11536:239;;;:::o;11781:384::-;;11944:67;12008:2;12003:3;11944:67;:::i;:::-;11937:74;;12041:34;12037:1;12032:3;12028:11;12021:55;12107:22;12102:2;12097:3;12093:12;12086:44;12156:2;12151:3;12147:12;12140:19;;11927:238;;;:::o;12171:385::-;;12334:67;12398:2;12393:3;12334:67;:::i;:::-;12327:74;;12431:34;12427:1;12422:3;12418:11;12411:55;12497:23;12492:2;12487:3;12483:12;12476:45;12547:2;12542:3;12538:12;12531:19;;12317:239;;;:::o;12562:439::-;;12725:67;12789:2;12784:3;12725:67;:::i;:::-;12718:74;;12822:34;12818:1;12813:3;12809:11;12802:55;12888:34;12883:2;12878:3;12874:12;12867:56;12954:11;12949:2;12944:3;12940:12;12933:33;12992:2;12987:3;12983:12;12976:19;;12708:293;;;:::o;13007:372::-;;13170:67;13234:2;13229:3;13170:67;:::i;:::-;13163:74;;13267:34;13263:1;13258:3;13254:11;13247:55;13333:10;13328:2;13323:3;13319:12;13312:32;13370:2;13365:3;13361:12;13354:19;;13153:226;;;:::o;13385:330::-;;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13645:34;13641:1;13636:3;13632:11;13625:55;13706:2;13701:3;13697:12;13690:19;;13531:184;;;:::o;13721:326::-;;13884:67;13948:2;13943:3;13884:67;:::i;:::-;13877:74;;13981:30;13977:1;13972:3;13968:11;13961:51;14038:2;14033:3;14029:12;14022:19;;13867:180;;;:::o;14053:327::-;;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14313:31;14309:1;14304:3;14300:11;14293:52;14371:2;14366:3;14362:12;14355:19;;14199:181;;;:::o;14386:374::-;;14549:67;14613:2;14608:3;14549:67;:::i;:::-;14542:74;;14646:34;14642:1;14637:3;14633:11;14626:55;14712:12;14707:2;14702:3;14698:12;14691:34;14751:2;14746:3;14742:12;14735:19;;14532:228;;;:::o;14766:369::-;;14929:67;14993:2;14988:3;14929:67;:::i;:::-;14922:74;;15026:34;15022:1;15017:3;15013:11;15006:55;15092:7;15087:2;15082:3;15078:12;15071:29;15126:2;15121:3;15117:12;15110:19;;14912:223;;;:::o;15141:330::-;;15304:67;15368:2;15363:3;15304:67;:::i;:::-;15297:74;;15401:34;15397:1;15392:3;15388:11;15381:55;15462:2;15457:3;15453:12;15446:19;;15287:184;;;:::o;15477:297::-;;15657:83;15738:1;15733:3;15657:83;:::i;:::-;15650:90;;15766:1;15761:3;15757:11;15750:18;;15640:134;;;:::o;15780:368::-;;15943:67;16007:2;16002:3;15943:67;:::i;:::-;15936:74;;16040:34;16036:1;16031:3;16027:11;16020:55;16106:6;16101:2;16096:3;16092:12;16085:28;16139:2;16134:3;16130:12;16123:19;;15926:222;;;:::o;16154:317::-;;16317:67;16381:2;16376:3;16317:67;:::i;:::-;16310:74;;16414:21;16410:1;16405:3;16401:11;16394:42;16462:2;16457:3;16453:12;16446:19;;16300:171;;;:::o;16477:369::-;;16640:67;16704:2;16699:3;16640:67;:::i;:::-;16633:74;;16737:34;16733:1;16728:3;16724:11;16717:55;16803:7;16798:2;16793:3;16789:12;16782:29;16837:2;16832:3;16828:12;16821:19;;16623:223;;;:::o;16852:379::-;;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17112:34;17108:1;17103:3;17099:11;17092:55;17178:17;17173:2;17168:3;17164:12;17157:39;17222:2;17217:3;17213:12;17206:19;;16998:233;;;:::o;17237:118::-;17324:24;17342:5;17324:24;:::i;:::-;17319:3;17312:37;17302:53;;:::o;17361:112::-;17444:22;17460:5;17444:22;:::i;:::-;17439:3;17432:35;17422:51;;:::o;17479:379::-;;17685:147;17828:3;17685:147;:::i;:::-;17678:154;;17849:3;17842:10;;17667:191;;;:::o;17864:222::-;;17995:2;17984:9;17980:18;17972:26;;18008:71;18076:1;18065:9;18061:17;18052:6;18008:71;:::i;:::-;17962:124;;;;:::o;18092:807::-;;18379:3;18368:9;18364:19;18356:27;;18393:71;18461:1;18450:9;18446:17;18437:6;18393:71;:::i;:::-;18474:72;18542:2;18531:9;18527:18;18518:6;18474:72;:::i;:::-;18556:80;18632:2;18621:9;18617:18;18608:6;18556:80;:::i;:::-;18646;18722:2;18711:9;18707:18;18698:6;18646:80;:::i;:::-;18736:73;18804:3;18793:9;18789:19;18780:6;18736:73;:::i;:::-;18819;18887:3;18876:9;18872:19;18863:6;18819:73;:::i;:::-;18346:553;;;;;;;;;:::o;18905:210::-;;19030:2;19019:9;19015:18;19007:26;;19043:65;19105:1;19094:9;19090:17;19081:6;19043:65;:::i;:::-;18997:118;;;;:::o;19121:272::-;;19277:2;19266:9;19262:18;19254:26;;19290:96;19383:1;19372:9;19368:17;19359:6;19290:96;:::i;:::-;19244:149;;;;:::o;19399:313::-;;19550:2;19539:9;19535:18;19527:26;;19599:9;19593:4;19589:20;19585:1;19574:9;19570:17;19563:47;19627:78;19700:4;19691:6;19627:78;:::i;:::-;19619:86;;19517:195;;;;:::o;19718:419::-;;19922:2;19911:9;19907:18;19899:26;;19971:9;19965:4;19961:20;19957:1;19946:9;19942:17;19935:47;19999:131;20125:4;19999:131;:::i;:::-;19991:139;;19889:248;;;:::o;20143:419::-;;20347:2;20336:9;20332:18;20324:26;;20396:9;20390:4;20386:20;20382:1;20371:9;20367:17;20360:47;20424:131;20550:4;20424:131;:::i;:::-;20416:139;;20314:248;;;:::o;20568:419::-;;20772:2;20761:9;20757:18;20749:26;;20821:9;20815:4;20811:20;20807:1;20796:9;20792:17;20785:47;20849:131;20975:4;20849:131;:::i;:::-;20841:139;;20739:248;;;:::o;20993:419::-;;21197:2;21186:9;21182:18;21174:26;;21246:9;21240:4;21236:20;21232:1;21221:9;21217:17;21210:47;21274:131;21400:4;21274:131;:::i;:::-;21266:139;;21164:248;;;:::o;21418:419::-;;21622:2;21611:9;21607:18;21599:26;;21671:9;21665:4;21661:20;21657:1;21646:9;21642:17;21635:47;21699:131;21825:4;21699:131;:::i;:::-;21691:139;;21589:248;;;:::o;21843:419::-;;22047:2;22036:9;22032:18;22024:26;;22096:9;22090:4;22086:20;22082:1;22071:9;22067:17;22060:47;22124:131;22250:4;22124:131;:::i;:::-;22116:139;;22014:248;;;:::o;22268:419::-;;22472:2;22461:9;22457:18;22449:26;;22521:9;22515:4;22511:20;22507:1;22496:9;22492:17;22485:47;22549:131;22675:4;22549:131;:::i;:::-;22541:139;;22439:248;;;:::o;22693:419::-;;22897:2;22886:9;22882:18;22874:26;;22946:9;22940:4;22936:20;22932:1;22921:9;22917:17;22910:47;22974:131;23100:4;22974:131;:::i;:::-;22966:139;;22864:248;;;:::o;23118:419::-;;23322:2;23311:9;23307:18;23299:26;;23371:9;23365:4;23361:20;23357:1;23346:9;23342:17;23335:47;23399:131;23525:4;23399:131;:::i;:::-;23391:139;;23289:248;;;:::o;23543:419::-;;23747:2;23736:9;23732:18;23724:26;;23796:9;23790:4;23786:20;23782:1;23771:9;23767:17;23760:47;23824:131;23950:4;23824:131;:::i;:::-;23816:139;;23714:248;;;:::o;23968:419::-;;24172:2;24161:9;24157:18;24149:26;;24221:9;24215:4;24211:20;24207:1;24196:9;24192:17;24185:47;24249:131;24375:4;24249:131;:::i;:::-;24241:139;;24139:248;;;:::o;24393:419::-;;24597:2;24586:9;24582:18;24574:26;;24646:9;24640:4;24636:20;24632:1;24621:9;24617:17;24610:47;24674:131;24800:4;24674:131;:::i;:::-;24666:139;;24564:248;;;:::o;24818:419::-;;25022:2;25011:9;25007:18;24999:26;;25071:9;25065:4;25061:20;25057:1;25046:9;25042:17;25035:47;25099:131;25225:4;25099:131;:::i;:::-;25091:139;;24989:248;;;:::o;25243:419::-;;25447:2;25436:9;25432:18;25424:26;;25496:9;25490:4;25486:20;25482:1;25471:9;25467:17;25460:47;25524:131;25650:4;25524:131;:::i;:::-;25516:139;;25414:248;;;:::o;25668:419::-;;25872:2;25861:9;25857:18;25849:26;;25921:9;25915:4;25911:20;25907:1;25896:9;25892:17;25885:47;25949:131;26075:4;25949:131;:::i;:::-;25941:139;;25839:248;;;:::o;26093:419::-;;26297:2;26286:9;26282:18;26274:26;;26346:9;26340:4;26336:20;26332:1;26321:9;26317:17;26310:47;26374:131;26500:4;26374:131;:::i;:::-;26366:139;;26264:248;;;:::o;26518:419::-;;26722:2;26711:9;26707:18;26699:26;;26771:9;26765:4;26761:20;26757:1;26746:9;26742:17;26735:47;26799:131;26925:4;26799:131;:::i;:::-;26791:139;;26689:248;;;:::o;26943:419::-;;27147:2;27136:9;27132:18;27124:26;;27196:9;27190:4;27186:20;27182:1;27171:9;27167:17;27160:47;27224:131;27350:4;27224:131;:::i;:::-;27216:139;;27114:248;;;:::o;27368:419::-;;27572:2;27561:9;27557:18;27549:26;;27621:9;27615:4;27611:20;27607:1;27596:9;27592:17;27585:47;27649:131;27775:4;27649:131;:::i;:::-;27641:139;;27539:248;;;:::o;27793:419::-;;27997:2;27986:9;27982:18;27974:26;;28046:9;28040:4;28036:20;28032:1;28021:9;28017:17;28010:47;28074:131;28200:4;28074:131;:::i;:::-;28066:139;;27964:248;;;:::o;28218:419::-;;28422:2;28411:9;28407:18;28399:26;;28471:9;28465:4;28461:20;28457:1;28446:9;28442:17;28435:47;28499:131;28625:4;28499:131;:::i;:::-;28491:139;;28389:248;;;:::o;28643:419::-;;28847:2;28836:9;28832:18;28824:26;;28896:9;28890:4;28886:20;28882:1;28871:9;28867:17;28860:47;28924:131;29050:4;28924:131;:::i;:::-;28916:139;;28814:248;;;:::o;29068:419::-;;29272:2;29261:9;29257:18;29249:26;;29321:9;29315:4;29311:20;29307:1;29296:9;29292:17;29285:47;29349:131;29475:4;29349:131;:::i;:::-;29341:139;;29239:248;;;:::o;29493:419::-;;29697:2;29686:9;29682:18;29674:26;;29746:9;29740:4;29736:20;29732:1;29721:9;29717:17;29710:47;29774:131;29900:4;29774:131;:::i;:::-;29766:139;;29664:248;;;:::o;29918:419::-;;30122:2;30111:9;30107:18;30099:26;;30171:9;30165:4;30161:20;30157:1;30146:9;30142:17;30135:47;30199:131;30325:4;30199:131;:::i;:::-;30191:139;;30089:248;;;:::o;30343:222::-;;30474:2;30463:9;30459:18;30451:26;;30487:71;30555:1;30544:9;30540:17;30531:6;30487:71;:::i;:::-;30441:124;;;;:::o;30571:831::-;;30872:3;30861:9;30857:19;30849:27;;30886:71;30954:1;30943:9;30939:17;30930:6;30886:71;:::i;:::-;30967:80;31043:2;31032:9;31028:18;31019:6;30967:80;:::i;:::-;31094:9;31088:4;31084:20;31079:2;31068:9;31064:18;31057:48;31122:108;31225:4;31216:6;31122:108;:::i;:::-;31114:116;;31240:72;31308:2;31297:9;31293:18;31284:6;31240:72;:::i;:::-;31322:73;31390:3;31379:9;31375:19;31366:6;31322:73;:::i;:::-;30839:563;;;;;;;;:::o;31408:442::-;;31595:2;31584:9;31580:18;31572:26;;31608:71;31676:1;31665:9;31661:17;31652:6;31608:71;:::i;:::-;31689:72;31757:2;31746:9;31742:18;31733:6;31689:72;:::i;:::-;31771;31839:2;31828:9;31824:18;31815:6;31771:72;:::i;:::-;31562:288;;;;;;:::o;31856:214::-;;31983:2;31972:9;31968:18;31960:26;;31996:67;32060:1;32049:9;32045:17;32036:6;31996:67;:::i;:::-;31950:120;;;;:::o;32076:132::-;;32166:3;32158:11;;32196:4;32191:3;32187:14;32179:22;;32148:60;;;:::o;32214:114::-;;32315:5;32309:12;32299:22;;32288:40;;;:::o;32334:99::-;;32420:5;32414:12;32404:22;;32393:40;;;:::o;32439:113::-;;32541:4;32536:3;32532:14;32524:22;;32514:38;;;:::o;32558:184::-;;32691:6;32686:3;32679:19;32731:4;32726:3;32722:14;32707:29;;32669:73;;;;:::o;32748:147::-;;32886:3;32871:18;;32861:34;;;;:::o;32901:169::-;;33019:6;33014:3;33007:19;33059:4;33054:3;33050:14;33035:29;;32997:73;;;;:::o;33076:305::-;;33135:20;33153:1;33135:20;:::i;:::-;33130:25;;33169:20;33187:1;33169:20;:::i;:::-;33164:25;;33323:1;33255:66;33251:74;33248:1;33245:81;33242:2;;;33329:18;;:::i;:::-;33242:2;33373:1;33370;33366:9;33359:16;;33120:261;;;;:::o;33387:185::-;;33444:20;33462:1;33444:20;:::i;:::-;33439:25;;33478:20;33496:1;33478:20;:::i;:::-;33473:25;;33517:1;33507:2;;33522:18;;:::i;:::-;33507:2;33564:1;33561;33557:9;33552:14;;33429:143;;;;:::o;33578:348::-;;33641:20;33659:1;33641:20;:::i;:::-;33636:25;;33675:20;33693:1;33675:20;:::i;:::-;33670:25;;33863:1;33795:66;33791:74;33788:1;33785:81;33780:1;33773:9;33766:17;33762:105;33759:2;;;33870:18;;:::i;:::-;33759:2;33918:1;33915;33911:9;33900:20;;33626:300;;;;:::o;33932:191::-;;33992:20;34010:1;33992:20;:::i;:::-;33987:25;;34026:20;34044:1;34026:20;:::i;:::-;34021:25;;34065:1;34062;34059:8;34056:2;;;34070:18;;:::i;:::-;34056:2;34115:1;34112;34108:9;34100:17;;33977:146;;;;:::o;34129:96::-;;34195:24;34213:5;34195:24;:::i;:::-;34184:35;;34174:51;;;:::o;34231:90::-;;34308:5;34301:13;34294:21;34283:32;;34273:48;;;:::o;34327:126::-;;34404:42;34397:5;34393:54;34382:65;;34372:81;;;:::o;34459:77::-;;34525:5;34514:16;;34504:32;;;:::o;34542:86::-;;34617:4;34610:5;34606:16;34595:27;;34585:43;;;:::o;34634:176::-;;34742:62;34798:5;34742:62;:::i;:::-;34729:75;;34719:91;;;:::o;34816:138::-;;34924:24;34942:5;34924:24;:::i;:::-;34911:37;;34901:53;;;:::o;34960:121::-;;35051:24;35069:5;35051:24;:::i;:::-;35038:37;;35028:53;;;:::o;35087:307::-;35155:1;35165:113;35179:6;35176:1;35173:13;35165:113;;;35264:1;35259:3;35255:11;35249:18;35245:1;35240:3;35236:11;35229:39;35201:2;35198:1;35194:10;35189:15;;35165:113;;;35296:6;35293:1;35290:13;35287:2;;;35376:1;35367:6;35362:3;35358:16;35351:27;35287:2;35136:258;;;;:::o;35400:320::-;;35481:1;35475:4;35471:12;35461:22;;35528:1;35522:4;35518:12;35549:18;35539:2;;35605:4;35597:6;35593:17;35583:27;;35539:2;35667;35659:6;35656:14;35636:18;35633:38;35630:2;;;35686:18;;:::i;:::-;35630:2;35451:269;;;;:::o;35726:180::-;35774:77;35771:1;35764:88;35871:4;35868:1;35861:15;35895:4;35892:1;35885:15;35912:180;35960:77;35957:1;35950:88;36057:4;36054:1;36047:15;36081:4;36078:1;36071:15;36098:180;36146:77;36143:1;36136:88;36243:4;36240:1;36233:15;36267:4;36264:1;36257:15;36284:102;;36376:2;36372:7;36367:2;36360:5;36356:14;36352:28;36342:38;;36332:54;;;:::o;36392:122::-;36465:24;36483:5;36465:24;:::i;:::-;36458:5;36455:35;36445:2;;36504:1;36501;36494:12;36445:2;36435:79;:::o;36520:116::-;36590:21;36605:5;36590:21;:::i;:::-;36583:5;36580:32;36570:2;;36626:1;36623;36616:12;36570:2;36560:76;:::o;36642:122::-;36715:24;36733:5;36715:24;:::i;:::-;36708:5;36705:35;36695:2;;36754:1;36751;36744:12;36695:2;36685:79;:::o
Swarm Source
ipfs://4990a4664cad1128181297f14de5beb5fa18cab9515d53db836f5dc6c34baf03
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.