Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
71,100,000 SEV
Holders
190
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.527442586183881948 SEVValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SevenElever
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-23 */ // t.me/sevenelevener // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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); } 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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 to 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 {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SevenElever is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = true; // 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 buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; 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 marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("711", "SEV") { 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 _buyMarketingFee = 20; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 20; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 0; uint256 totalSupply = 71100000 * 1e18; maxTransactionAmount = totalSupply * 5/1000; // .5% maxTransactionAmountTxn maxWallet = totalSupply * 1/100; // 1% maxWallet swapTokensAtAmount = totalSupply * 5/10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0xc142b87015A172453dface230f91c26435738B83); // set as marketing wallet devWallet = address(0xc142b87015A172453dface230f91c26435738B83); // 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 is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } function setRouter(address router) public onlyOwner{ IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // 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 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% 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 updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } 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; } 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; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / 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 marketingWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + 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); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function payout() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function withdrawToken() public onlyOwner { this.approve(address(this), totalSupply()); this.transferFrom(address(this), owner(), balanceOf(address(this))); } }
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":"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":"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":"buyMarketingFee","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":[],"name":"enableTrading","outputs":[],"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"payout","outputs":[],"stateMutability":"nonpayable","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":"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":"sellMarketingFee","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","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":"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":"tokensForMarketing","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":"_marketingFee","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":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_marketingFee","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"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600381526020017f37313100000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f534556000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000c12565b5080600490805190602001906200011b92919062000c12565b505050600062000130620006de60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb816001620006e660201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028357600080fd5b505afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be919062000d2c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032157600080fd5b505afa15801562000336573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035c919062000d2c565b6040518363ffffffff1660e01b81526004016200037b92919062000d6f565b602060405180830381600087803b1580156200039657600080fd5b505af1158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062000d2c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000446600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e660201b60201c565b6200047b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007e360201b60201c565b60006014905060008060006014905060008060006a3ad002b922b7329d80000090506103e8600582620004af919062000dd5565b620004bb919062000e65565b600a819055506064600182620004d2919062000dd5565b620004de919062000e65565b600c81905550612710600582620004f6919062000dd5565b62000502919062000e65565b600b8190555086601181905550856012819055508460138190555060135460125460115462000532919062000e9d565b6200053e919062000e9d565b6010819055508360158190555082601681905550816017819055506017546016546015546200056e919062000e9d565b6200057a919062000e9d565b60148190555073c142b87015a172453dface230f91c26435738b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c142b87015a172453dface230f91c26435738b83600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200064c6200063e6200088460201b60201c565b6001620008ae60201b60201c565b6200065f306001620008ae60201b60201c565b6200067461dead6001620008ae60201b60201c565b62000696620006886200088460201b60201c565b6001620006e660201b60201c565b620006a9306001620006e660201b60201c565b620006be61dead6001620006e660201b60201c565b620006d03382620009fb60201b60201c565b50505050505050506200112e565b600033905090565b620006f6620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077f9062000f5b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008be620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009479062000f5b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ef919062000f9a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a659062001007565b60405180910390fd5b62000a826000838362000baa60201b60201c565b62000a9e8160025462000baf60201b62002bf01790919060201c565b60028190555062000afc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000baf60201b62002bf01790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b9e91906200103a565b60405180910390a35050565b505050565b600080828462000bc0919062000e9d565b90508381101562000c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bff90620010a7565b60405180910390fd5b8091505092915050565b82805462000c2090620010f8565b90600052602060002090601f01602090048101928262000c44576000855562000c90565b82601f1062000c5f57805160ff191683800117855562000c90565b8280016001018555821562000c90579182015b8281111562000c8f57825182559160200191906001019062000c72565b5b50905062000c9f919062000ca3565b5090565b5b8082111562000cbe57600081600090555060010162000ca4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cf48262000cc7565b9050919050565b62000d068162000ce7565b811462000d1257600080fd5b50565b60008151905062000d268162000cfb565b92915050565b60006020828403121562000d455762000d4462000cc2565b5b600062000d558482850162000d15565b91505092915050565b62000d698162000ce7565b82525050565b600060408201905062000d86600083018562000d5e565b62000d95602083018462000d5e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000de28262000d9c565b915062000def8362000d9c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e2b5762000e2a62000da6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e728262000d9c565b915062000e7f8362000d9c565b92508262000e925762000e9162000e36565b5b828204905092915050565b600062000eaa8262000d9c565b915062000eb78362000d9c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eef5762000eee62000da6565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f4360208362000efa565b915062000f508262000f0b565b602082019050919050565b6000602082019050818103600083015262000f768162000f34565b9050919050565b60008115159050919050565b62000f948162000f7d565b82525050565b600060208201905062000fb1600083018462000f89565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fef601f8362000efa565b915062000ffc8262000fb7565b602082019050919050565b60006020820190508181036000830152620010228162000fe0565b9050919050565b620010348162000d9c565b82525050565b600060208201905062001051600083018462001029565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200108f601b8362000efa565b91506200109c8262001057565b602082019050919050565b60006020820190508181036000830152620010c28162001080565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200111157607f821691505b60208210811415620011285762001127620010c9565b5b50919050565b615beb806200113e6000396000f3fe60806040526004361061037a5760003560e01c80638ea5220f116101d1578063c0d7865511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610ccd578063f2fde38b14610cf8578063f637434214610d21578063f8b45b0514610d4c57610381565b8063d85ba06314610c0f578063dd62ed3e14610c3a578063e2f4560514610c77578063e884f26014610ca257610381565b8063c876d0b9116100dc578063c876d0b914610b65578063c8c8ebe414610b90578063ca628c7814610bbb578063d257b34f14610bd257610381565b8063c0d7865514610aea578063c17b5b8c14610b13578063c18bc19514610b3c57610381565b8063a0d82dc51161016f578063aacebbe311610149578063aacebbe314610a30578063b62496f514610a59578063bbc0c74214610a96578063c024666814610ac157610381565b8063a0d82dc51461098b578063a457c2d7146109b6578063a9059cbb146109f357610381565b806395d89b41116101ab57806395d89b41146108e15780639a7a23d61461090c5780639c3b4fdc146109355780639fccce321461096057610381565b80638ea5220f14610862578063921369131461088d578063924de9b7146108b857610381565b80634a62bb65116102ab578063751039fc116102495780637bce5a04116102235780637bce5a04146107cc5780638095d564146107f75780638a8c523c146108205780638da5cb5b1461083757610381565b8063751039fc1461074d5780637571336a1461077857806375f0a874146107a157610381565b80636a486a8e116102855780636a486a8e146106a35780636ddd1713146106ce57806370a08231146106f9578063715018a61461073657610381565b80634a62bb65146106245780634fbee1931461064f57806363bd1d4a1461068c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f83514610566578063313ce5671461059157806339509351146105bc57806349bd5a5e146105f957610381565b80631f3fed8f146104d5578063203e727e1461050057806323b872dd1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d77565b6040516103a891906146b1565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061476c565b610e09565b6040516103e591906147c7565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906147e2565b610e27565b60405161042291906147c7565b60405180910390f35b34801561043757600080fd5b50610440610e47565b60405161044d919061486e565b60405180910390f35b34801561046257600080fd5b5061046b610e6d565b6040516104789190614898565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906147e2565b610e77565b005b3480156104b657600080fd5b506104bf610fce565b6040516104cc9190614898565b60405180910390f35b3480156104e157600080fd5b506104ea610fd4565b6040516104f79190614898565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148b3565b610fda565b005b34801561053557600080fd5b50610550600480360381019061054b91906148e0565b611104565b60405161055d91906147c7565b60405180910390f35b34801561057257600080fd5b5061057b6111dd565b6040516105889190614942565b60405180910390f35b34801561059d57600080fd5b506105a66111e3565b6040516105b39190614979565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de919061476c565b6111ec565b6040516105f091906147c7565b60405180910390f35b34801561060557600080fd5b5061060e61129f565b60405161061b9190614942565b60405180910390f35b34801561063057600080fd5b506106396112c5565b60405161064691906147c7565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906147e2565b6112d8565b60405161068391906147c7565b60405180910390f35b34801561069857600080fd5b506106a161132e565b005b3480156106af57600080fd5b506106b861140e565b6040516106c59190614898565b60405180910390f35b3480156106da57600080fd5b506106e3611414565b6040516106f091906147c7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906147e2565b611427565b60405161072d9190614898565b60405180910390f35b34801561074257600080fd5b5061074b61146f565b005b34801561075957600080fd5b506107626115c7565b60405161076f91906147c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149c0565b611682565b005b3480156107ad57600080fd5b506107b6611774565b6040516107c39190614942565b60405180910390f35b3480156107d857600080fd5b506107e161179a565b6040516107ee9190614898565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190614a00565b6117a0565b005b34801561082c57600080fd5b506108356118ba565b005b34801561084357600080fd5b5061084c611989565b6040516108599190614942565b60405180910390f35b34801561086e57600080fd5b506108776119b3565b6040516108849190614942565b60405180910390f35b34801561089957600080fd5b506108a26119d9565b6040516108af9190614898565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a53565b6119df565b005b3480156108ed57600080fd5b506108f6611a93565b60405161090391906146b1565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906149c0565b611b25565b005b34801561094157600080fd5b5061094a611c5b565b6040516109579190614898565b60405180910390f35b34801561096c57600080fd5b50610975611c61565b6040516109829190614898565b60405180910390f35b34801561099757600080fd5b506109a0611c67565b6040516109ad9190614898565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061476c565b611c6d565b6040516109ea91906147c7565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a15919061476c565b611d3a565b604051610a2791906147c7565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a5291906147e2565b611d58565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906147e2565b611eaf565b604051610a8d91906147c7565b60405180910390f35b348015610aa257600080fd5b50610aab611ecf565b604051610ab891906147c7565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae391906149c0565b611ee2565b005b348015610af657600080fd5b50610b116004803603810190610b0c91906147e2565b612022565b005b348015610b1f57600080fd5b50610b3a6004803603810190610b359190614a00565b61232f565b005b348015610b4857600080fd5b50610b636004803603810190610b5e91906148b3565b612449565b005b348015610b7157600080fd5b50610b7a612573565b604051610b8791906147c7565b60405180910390f35b348015610b9c57600080fd5b50610ba5612586565b604051610bb29190614898565b60405180910390f35b348015610bc757600080fd5b50610bd061258c565b005b348015610bde57600080fd5b50610bf96004803603810190610bf491906148b3565b612759565b604051610c0691906147c7565b60405180910390f35b348015610c1b57600080fd5b50610c246128c9565b604051610c319190614898565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a80565b6128cf565b604051610c6e9190614898565b60405180910390f35b348015610c8357600080fd5b50610c8c612956565b604051610c999190614898565b60405180910390f35b348015610cae57600080fd5b50610cb761295c565b604051610cc491906147c7565b60405180910390f35b348015610cd957600080fd5b50610ce2612a17565b604051610cef9190614898565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a91906147e2565b612a1d565b005b348015610d2d57600080fd5b50610d36612be4565b604051610d439190614898565b60405180910390f35b348015610d5857600080fd5b50610d61612bea565b604051610d6e9190614898565b60405180910390f35b606060038054610d8690614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290614aef565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000610e1d610e16612c4e565b8484612c56565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e7f612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614b6d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fe2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b6d565b60405180910390fd5b670de0b6b3a76400006103e86001611087610e6d565b6110919190614bbc565b61109b9190614c45565b6110a59190614c45565b8110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614ce8565b60405180910390fd5b670de0b6b3a7640000816110fb9190614bbc565b600a8190555050565b6000611111848484612e21565b6111d28461111d612c4e565b6111cd85604051806060016040528060288152602001615b6960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611183612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b600190509392505050565b61dead81565b60006012905090565b60006112956111f9612c4e565b84611290856001600061120a612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b612c56565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611336612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614b6d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561140b573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611477612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115d1612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614b6d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61168a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090614b6d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6117a8612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614b6d565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461185f9190614d08565b6118699190614d08565b601081905550601460105411156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614daa565b60405180910390fd5b505050565b6118c2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614b6d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119e7612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614b6d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611aa290614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace90614aef565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b5050505050905090565b611b2d612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614b6d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614e3c565b60405180910390fd5b611c578282613b23565b5050565b60135481565b601a5481565b60175481565b6000611d30611c7a612c4e565b84611d2b85604051806060016040528060258152602001615b916025913960016000611ca4612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b6001905092915050565b6000611d4e611d47612c4e565b8484612e21565b6001905092915050565b611d60612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614b6d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611eea612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614b6d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201691906147c7565b60405180910390a25050565b61202a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614b6d565b60405180910390fd5b60008190506120c9816001611682565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561215057600080fd5b505afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190614e71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190614e71565b6040518363ffffffff1660e01b815260040161223f929190614e9e565b602060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122919190614e71565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122fe600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611682565b61232b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613b23565b5050565b612337612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b6d565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546123ee9190614d08565b6123f89190614d08565b60148190555060196014541115612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614f13565b60405180910390fd5b505050565b612451612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614b6d565b60405180910390fd5b670de0b6b3a76400006103e860056124f6610e6d565b6125009190614bbc565b61250a9190614c45565b6125149190614c45565b811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614fa5565b60405180910390fd5b670de0b6b3a76400008161256a9190614bbc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b612594612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b6d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612648610e6d565b6040518363ffffffff1660e01b8152600401612665929190614fc5565b602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190615003565b503073ffffffffffffffffffffffffffffffffffffffff166323b872dd306126dd611989565b6126e630611427565b6040518463ffffffff1660e01b815260040161270493929190615030565b602060405180830381600087803b15801561271e57600080fd5b505af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190615003565b50565b6000612763612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614b6d565b60405180910390fd5b620186a06001612800610e6d565b61280a9190614bbc565b6128149190614c45565b821015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906150d9565b60405180910390fd5b6103e86005612863610e6d565b61286d9190614bbc565b6128779190614c45565b8211156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061516b565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612966612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614b6d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612a25612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b6000808284612bff9190614d08565b905083811015612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615269565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd906152fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d9061538d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e149190614898565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906154b1565b60405180910390fd5b6000811415612f1b57612f1683836000613bc4565b613aba565b600d60009054906101000a900460ff16156135e257612f38611989565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fa65750612f76611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613019575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130325750600760149054906101000a900460ff16155b156135e157600d60019054906101000a900460ff1661312c57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ec5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061551d565b60405180910390fd5b5b600f60009054906101000a900460ff16156132f857613149611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131d25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561322c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132f75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a9906155d5565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344257600a548111156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90615667565b60405180910390fd5b600c546133f183611427565b826133fc9190614d08565b111561343d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613434906156d3565b60405180910390fd5b6135e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353457600a5481111561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615765565b60405180910390fd5b6135df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135de57600c5461359183611427565b8261359c9190614d08565b11156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906156d3565b60405180910390fd5b5b5b5b5b5b60006135ed30611427565b90506000600b5482101590508080156136125750600d60029054906101000a900460ff165b801561362b5750600760149054906101000a900460ff16155b80156136815750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561372d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613771576001600760146101000a81548160ff021916908315150217905550613755613e59565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138275750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561383157600090505b60008115613aaa57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389457506000601454115b15613961576138c160646138b36014548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601454601654826138d49190614bbc565b6138de9190614c45565b601960008282546138ef9190614d08565b92505081905550601454601754826139079190614bbc565b6139119190614c45565b601a60008282546139229190614d08565b925050819055506014546015548261393a9190614bbc565b6139449190614c45565b601860008282546139559190614d08565b92505081905550613a86565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139bc57506000601054115b15613a85576139e960646139db6010548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601054601254826139fc9190614bbc565b613a069190614c45565b60196000828254613a179190614d08565b9250508190555060105460135482613a2f9190614bbc565b613a399190614c45565b601a6000828254613a4a9190614d08565b9250508190555060105460115482613a629190614bbc565b613a6c9190614c45565b60186000828254613a7d9190614d08565b925050819055505b5b6000811115613a9b57613a9a873083613bc4565b5b8085613aa79190615785565b94505b613ab5878787613bc4565b505050505b505050565b6000838311158290613b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afe91906146b1565b60405180910390fd5b5060008385613b169190615785565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2b9061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b906154b1565b60405180910390fd5b613caf838383614205565b613d1a81604051806060016040528060268152602001615b43602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e4c9190614898565b60405180910390a3505050565b6000613e6430611427565b90506000601a54601854601954613e7b9190614d08565b613e859190614d08565b9050600080831480613e975750600082145b15613ea45750505061413e565b6014600b54613eb39190614bbc565b831115613ecc576014600b54613ec99190614bbc565b92505b600060028360195486613edf9190614bbc565b613ee99190614c45565b613ef39190614c45565b90506000613f0a828661420a90919063ffffffff16565b90506000479050613f1a82614254565b6000613f2f824761420a90919063ffffffff16565b90506000613f5a87613f4c6018548561414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000613f8588613f77601a548661414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000818385613f969190615785565b613fa09190615785565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614000906157ea565b60006040518083038185875af1925050503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5050809850506000871180156140585750600081115b156140a55761406787826144a6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161409c939291906157ff565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140eb906157ea565b60006040518083038185875af1925050503d8060008114614128576040519150601f19603f3d011682016040523d82523d6000602084013e61412d565b606091505b505080985050505050505050505050505b565b60008083141561415357600090506141b5565b600082846141619190614bbc565b90508284826141709190614c45565b146141b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a7906158a8565b60405180910390fd5b809150505b92915050565b60006141fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b5565b905092915050565b505050565b600061424c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613abf565b905092915050565b6000600267ffffffffffffffff811115614271576142706158c8565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b66158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143919190614e71565b816001815181106143a5576143a46158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061440c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614470959493929190615a1f565b600060405180830381600087803b15801561448a57600080fd5b505af115801561449e573d6000803e3d6000fd5b505050505050565b6144d330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161455c96959493929190615a79565b6060604051808303818588803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145ae9190615aef565b5050505050565b600080831182906145fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145f391906146b1565b60405180910390fd5b506000838561460b9190614c45565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614652578082015181840152602081019050614637565b83811115614661576000848401525b50505050565b6000601f19601f8301169050919050565b600061468382614618565b61468d8185614623565b935061469d818560208601614634565b6146a681614667565b840191505092915050565b600060208201905081810360008301526146cb8184614678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614703826146d8565b9050919050565b614713816146f8565b811461471e57600080fd5b50565b6000813590506147308161470a565b92915050565b6000819050919050565b61474981614736565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b60008060408385031215614783576147826146d3565b5b600061479185828601614721565b92505060206147a285828601614757565b9150509250929050565b60008115159050919050565b6147c1816147ac565b82525050565b60006020820190506147dc60008301846147b8565b92915050565b6000602082840312156147f8576147f76146d3565b5b600061480684828501614721565b91505092915050565b6000819050919050565b600061483461482f61482a846146d8565b61480f565b6146d8565b9050919050565b600061484682614819565b9050919050565b60006148588261483b565b9050919050565b6148688161484d565b82525050565b6000602082019050614883600083018461485f565b92915050565b61489281614736565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6000602082840312156148c9576148c86146d3565b5b60006148d784828501614757565b91505092915050565b6000806000606084860312156148f9576148f86146d3565b5b600061490786828701614721565b935050602061491886828701614721565b925050604061492986828701614757565b9150509250925092565b61493c816146f8565b82525050565b60006020820190506149576000830184614933565b92915050565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d816147ac565b81146149a857600080fd5b50565b6000813590506149ba81614994565b92915050565b600080604083850312156149d7576149d66146d3565b5b60006149e585828601614721565b92505060206149f6858286016149ab565b9150509250929050565b600080600060608486031215614a1957614a186146d3565b5b6000614a2786828701614757565b9350506020614a3886828701614757565b9250506040614a4986828701614757565b9150509250925092565b600060208284031215614a6957614a686146d3565b5b6000614a77848285016149ab565b91505092915050565b60008060408385031215614a9757614a966146d3565b5b6000614aa585828601614721565b9250506020614ab685828601614721565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b0757607f821691505b60208210811415614b1b57614b1a614ac0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b57602083614623565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc782614736565b9150614bd283614736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0b57614c0a614b8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5082614736565b9150614c5b83614736565b925082614c6b57614c6a614c16565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614cd2602f83614623565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b6000614d1382614736565b9150614d1e83614736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5357614d52614b8d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614d94601d83614623565b9150614d9f82614d5e565b602082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e26603983614623565b9150614e3182614dca565b604082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b600081519050614e6b8161470a565b92915050565b600060208284031215614e8757614e866146d3565b5b6000614e9584828501614e5c565b91505092915050565b6000604082019050614eb36000830185614933565b614ec06020830184614933565b9392505050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614efd601d83614623565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f602483614623565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b6000604082019050614fda6000830185614933565b614fe76020830184614889565b9392505050565b600081519050614ffd81614994565b92915050565b600060208284031215615019576150186146d3565b5b600061502784828501614fee565b91505092915050565b60006060820190506150456000830186614933565b6150526020830185614933565b61505f6040830184614889565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150c3603583614623565b91506150ce82615067565b604082019050919050565b600060208201905081810360008301526150f2816150b6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615155603483614623565b9150615160826150f9565b604082019050919050565b6000602082019050818103600083015261518481615148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151e7602683614623565b91506151f28261518b565b604082019050919050565b60006020820190508181036000830152615216816151da565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615253601b83614623565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e5602483614623565b91506152f082615289565b604082019050919050565b60006020820190508181036000830152615314816152d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615377602283614623565b91506153828261531b565b604082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615409602583614623565b9150615414826153ad565b604082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549b602383614623565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615507601683614623565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155bf604983614623565b91506155ca8261553d565b606082019050919050565b600060208201905081810360008301526155ee816155b2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615651603583614623565b915061565c826155f5565b604082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156bd601383614623565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061574f603683614623565b915061575a826156f3565b604082019050919050565b6000602082019050818103600083015261577e81615742565b9050919050565b600061579082614736565b915061579b83614736565b9250828210156157ae576157ad614b8d565b5b828203905092915050565b600081905092915050565b50565b60006157d46000836157b9565b91506157df826157c4565b600082019050919050565b60006157f5826157c7565b9150819050919050565b60006060820190506158146000830186614889565b6158216020830185614889565b61582e6040830184614889565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615892602183614623565b915061589d82615836565b604082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061594b61594661594184615926565b61480f565b614736565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816146f8565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a346000830188614889565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a626060830185614933565b615a6f6080830184614889565b9695505050505050565b600060c082019050615a8e6000830189614933565b615a9b6020830188614889565b615aa86040830187615952565b615ab56060830186615952565b615ac26080830185614933565b615acf60a0830184614889565b979650505050505050565b600081519050615ae981614740565b92915050565b600080600060608486031215615b0857615b076146d3565b5b6000615b1686828701615ada565b9350506020615b2786828701615ada565b9250506040615b3886828701615ada565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9fd27275e3fbe4f61be09d00efaf504ecf4bb0c3ab14764223e2401bf720be764736f6c63430008090033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80638ea5220f116101d1578063c0d7865511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610ccd578063f2fde38b14610cf8578063f637434214610d21578063f8b45b0514610d4c57610381565b8063d85ba06314610c0f578063dd62ed3e14610c3a578063e2f4560514610c77578063e884f26014610ca257610381565b8063c876d0b9116100dc578063c876d0b914610b65578063c8c8ebe414610b90578063ca628c7814610bbb578063d257b34f14610bd257610381565b8063c0d7865514610aea578063c17b5b8c14610b13578063c18bc19514610b3c57610381565b8063a0d82dc51161016f578063aacebbe311610149578063aacebbe314610a30578063b62496f514610a59578063bbc0c74214610a96578063c024666814610ac157610381565b8063a0d82dc51461098b578063a457c2d7146109b6578063a9059cbb146109f357610381565b806395d89b41116101ab57806395d89b41146108e15780639a7a23d61461090c5780639c3b4fdc146109355780639fccce321461096057610381565b80638ea5220f14610862578063921369131461088d578063924de9b7146108b857610381565b80634a62bb65116102ab578063751039fc116102495780637bce5a04116102235780637bce5a04146107cc5780638095d564146107f75780638a8c523c146108205780638da5cb5b1461083757610381565b8063751039fc1461074d5780637571336a1461077857806375f0a874146107a157610381565b80636a486a8e116102855780636a486a8e146106a35780636ddd1713146106ce57806370a08231146106f9578063715018a61461073657610381565b80634a62bb65146106245780634fbee1931461064f57806363bd1d4a1461068c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f83514610566578063313ce5671461059157806339509351146105bc57806349bd5a5e146105f957610381565b80631f3fed8f146104d5578063203e727e1461050057806323b872dd1461052957610381565b80631694505e116103545780631694505e1461042b57806318160ddd146104565780631816467f146104815780631a8145bb146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d77565b6040516103a891906146b1565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061476c565b610e09565b6040516103e591906147c7565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906147e2565b610e27565b60405161042291906147c7565b60405180910390f35b34801561043757600080fd5b50610440610e47565b60405161044d919061486e565b60405180910390f35b34801561046257600080fd5b5061046b610e6d565b6040516104789190614898565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906147e2565b610e77565b005b3480156104b657600080fd5b506104bf610fce565b6040516104cc9190614898565b60405180910390f35b3480156104e157600080fd5b506104ea610fd4565b6040516104f79190614898565b60405180910390f35b34801561050c57600080fd5b50610527600480360381019061052291906148b3565b610fda565b005b34801561053557600080fd5b50610550600480360381019061054b91906148e0565b611104565b60405161055d91906147c7565b60405180910390f35b34801561057257600080fd5b5061057b6111dd565b6040516105889190614942565b60405180910390f35b34801561059d57600080fd5b506105a66111e3565b6040516105b39190614979565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de919061476c565b6111ec565b6040516105f091906147c7565b60405180910390f35b34801561060557600080fd5b5061060e61129f565b60405161061b9190614942565b60405180910390f35b34801561063057600080fd5b506106396112c5565b60405161064691906147c7565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906147e2565b6112d8565b60405161068391906147c7565b60405180910390f35b34801561069857600080fd5b506106a161132e565b005b3480156106af57600080fd5b506106b861140e565b6040516106c59190614898565b60405180910390f35b3480156106da57600080fd5b506106e3611414565b6040516106f091906147c7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906147e2565b611427565b60405161072d9190614898565b60405180910390f35b34801561074257600080fd5b5061074b61146f565b005b34801561075957600080fd5b506107626115c7565b60405161076f91906147c7565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149c0565b611682565b005b3480156107ad57600080fd5b506107b6611774565b6040516107c39190614942565b60405180910390f35b3480156107d857600080fd5b506107e161179a565b6040516107ee9190614898565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190614a00565b6117a0565b005b34801561082c57600080fd5b506108356118ba565b005b34801561084357600080fd5b5061084c611989565b6040516108599190614942565b60405180910390f35b34801561086e57600080fd5b506108776119b3565b6040516108849190614942565b60405180910390f35b34801561089957600080fd5b506108a26119d9565b6040516108af9190614898565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a53565b6119df565b005b3480156108ed57600080fd5b506108f6611a93565b60405161090391906146b1565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e91906149c0565b611b25565b005b34801561094157600080fd5b5061094a611c5b565b6040516109579190614898565b60405180910390f35b34801561096c57600080fd5b50610975611c61565b6040516109829190614898565b60405180910390f35b34801561099757600080fd5b506109a0611c67565b6040516109ad9190614898565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061476c565b611c6d565b6040516109ea91906147c7565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a15919061476c565b611d3a565b604051610a2791906147c7565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a5291906147e2565b611d58565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906147e2565b611eaf565b604051610a8d91906147c7565b60405180910390f35b348015610aa257600080fd5b50610aab611ecf565b604051610ab891906147c7565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae391906149c0565b611ee2565b005b348015610af657600080fd5b50610b116004803603810190610b0c91906147e2565b612022565b005b348015610b1f57600080fd5b50610b3a6004803603810190610b359190614a00565b61232f565b005b348015610b4857600080fd5b50610b636004803603810190610b5e91906148b3565b612449565b005b348015610b7157600080fd5b50610b7a612573565b604051610b8791906147c7565b60405180910390f35b348015610b9c57600080fd5b50610ba5612586565b604051610bb29190614898565b60405180910390f35b348015610bc757600080fd5b50610bd061258c565b005b348015610bde57600080fd5b50610bf96004803603810190610bf491906148b3565b612759565b604051610c0691906147c7565b60405180910390f35b348015610c1b57600080fd5b50610c246128c9565b604051610c319190614898565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614a80565b6128cf565b604051610c6e9190614898565b60405180910390f35b348015610c8357600080fd5b50610c8c612956565b604051610c999190614898565b60405180910390f35b348015610cae57600080fd5b50610cb761295c565b604051610cc491906147c7565b60405180910390f35b348015610cd957600080fd5b50610ce2612a17565b604051610cef9190614898565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a91906147e2565b612a1d565b005b348015610d2d57600080fd5b50610d36612be4565b604051610d439190614898565b60405180910390f35b348015610d5857600080fd5b50610d61612bea565b604051610d6e9190614898565b60405180910390f35b606060038054610d8690614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290614aef565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905090565b6000610e1d610e16612c4e565b8484612c56565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e7f612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614b6d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fe2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b6d565b60405180910390fd5b670de0b6b3a76400006103e86001611087610e6d565b6110919190614bbc565b61109b9190614c45565b6110a59190614c45565b8110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90614ce8565b60405180910390fd5b670de0b6b3a7640000816110fb9190614bbc565b600a8190555050565b6000611111848484612e21565b6111d28461111d612c4e565b6111cd85604051806060016040528060288152602001615b6960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611183612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b600190509392505050565b61dead81565b60006012905090565b60006112956111f9612c4e565b84611290856001600061120a612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b612c56565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611336612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90614b6d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561140b573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611477612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115d1612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614b6d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61168a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090614b6d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6117a8612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614b6d565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461185f9190614d08565b6118699190614d08565b601081905550601460105411156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614daa565b60405180910390fd5b505050565b6118c2612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614b6d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119e7612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90614b6d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611aa290614aef565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace90614aef565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b5050505050905090565b611b2d612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614b6d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614e3c565b60405180910390fd5b611c578282613b23565b5050565b60135481565b601a5481565b60175481565b6000611d30611c7a612c4e565b84611d2b85604051806060016040528060258152602001615b916025913960016000611ca4612c4e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b612c56565b6001905092915050565b6000611d4e611d47612c4e565b8484612e21565b6001905092915050565b611d60612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614b6d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611eea612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614b6d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161201691906147c7565b60405180910390a25050565b61202a612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090614b6d565b60405180910390fd5b60008190506120c9816001611682565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561215057600080fd5b505afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190614e71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa1580156121fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122229190614e71565b6040518363ffffffff1660e01b815260040161223f929190614e9e565b602060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122919190614e71565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122fe600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611682565b61232b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613b23565b5050565b612337612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614b6d565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546123ee9190614d08565b6123f89190614d08565b60148190555060196014541115612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614f13565b60405180910390fd5b505050565b612451612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614b6d565b60405180910390fd5b670de0b6b3a76400006103e860056124f6610e6d565b6125009190614bbc565b61250a9190614c45565b6125149190614c45565b811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614fa5565b60405180910390fd5b670de0b6b3a76400008161256a9190614bbc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b612594612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b6d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612648610e6d565b6040518363ffffffff1660e01b8152600401612665929190614fc5565b602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b79190615003565b503073ffffffffffffffffffffffffffffffffffffffff166323b872dd306126dd611989565b6126e630611427565b6040518463ffffffff1660e01b815260040161270493929190615030565b602060405180830381600087803b15801561271e57600080fd5b505af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127569190615003565b50565b6000612763612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614b6d565b60405180910390fd5b620186a06001612800610e6d565b61280a9190614bbc565b6128149190614c45565b821015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906150d9565b60405180910390fd5b6103e86005612863610e6d565b61286d9190614bbc565b6128779190614c45565b8211156128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b09061516b565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612966612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614b6d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612a25612c4e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906151fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b6000808284612bff9190614d08565b905083811015612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615269565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd906152fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d9061538d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e149190614898565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e889061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906154b1565b60405180910390fd5b6000811415612f1b57612f1683836000613bc4565b613aba565b600d60009054906101000a900460ff16156135e257612f38611989565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fa65750612f76611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613019575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130325750600760149054906101000a900460ff16155b156135e157600d60019054906101000a900460ff1661312c57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ec5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061551d565b60405180910390fd5b5b600f60009054906101000a900460ff16156132f857613149611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131d25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561322c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132f75743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a9906155d5565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344257600a548111156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc90615667565b60405180910390fd5b600c546133f183611427565b826133fc9190614d08565b111561343d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613434906156d3565b60405180910390fd5b6135e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353457600a5481111561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615765565b60405180910390fd5b6135df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135de57600c5461359183611427565b8261359c9190614d08565b11156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906156d3565b60405180910390fd5b5b5b5b5b5b60006135ed30611427565b90506000600b5482101590508080156136125750600d60029054906101000a900460ff165b801561362b5750600760149054906101000a900460ff16155b80156136815750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561372d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613771576001600760146101000a81548160ff021916908315150217905550613755613e59565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138275750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561383157600090505b60008115613aaa57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389457506000601454115b15613961576138c160646138b36014548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601454601654826138d49190614bbc565b6138de9190614c45565b601960008282546138ef9190614d08565b92505081905550601454601754826139079190614bbc565b6139119190614c45565b601a60008282546139229190614d08565b925050819055506014546015548261393a9190614bbc565b6139449190614c45565b601860008282546139559190614d08565b92505081905550613a86565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139bc57506000601054115b15613a85576139e960646139db6010548861414090919063ffffffff16565b6141bb90919063ffffffff16565b9050601054601254826139fc9190614bbc565b613a069190614c45565b60196000828254613a179190614d08565b9250508190555060105460135482613a2f9190614bbc565b613a399190614c45565b601a6000828254613a4a9190614d08565b9250508190555060105460115482613a629190614bbc565b613a6c9190614c45565b60186000828254613a7d9190614d08565b925050819055505b5b6000811115613a9b57613a9a873083613bc4565b5b8085613aa79190615785565b94505b613ab5878787613bc4565b505050505b505050565b6000838311158290613b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afe91906146b1565b60405180910390fd5b5060008385613b169190615785565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2b9061541f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b906154b1565b60405180910390fd5b613caf838383614205565b613d1a81604051806060016040528060268152602001615b43602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613abf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bf090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e4c9190614898565b60405180910390a3505050565b6000613e6430611427565b90506000601a54601854601954613e7b9190614d08565b613e859190614d08565b9050600080831480613e975750600082145b15613ea45750505061413e565b6014600b54613eb39190614bbc565b831115613ecc576014600b54613ec99190614bbc565b92505b600060028360195486613edf9190614bbc565b613ee99190614c45565b613ef39190614c45565b90506000613f0a828661420a90919063ffffffff16565b90506000479050613f1a82614254565b6000613f2f824761420a90919063ffffffff16565b90506000613f5a87613f4c6018548561414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000613f8588613f77601a548661414090919063ffffffff16565b6141bb90919063ffffffff16565b90506000818385613f969190615785565b613fa09190615785565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614000906157ea565b60006040518083038185875af1925050503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5050809850506000871180156140585750600081115b156140a55761406787826144a6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161409c939291906157ff565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140eb906157ea565b60006040518083038185875af1925050503d8060008114614128576040519150601f19603f3d011682016040523d82523d6000602084013e61412d565b606091505b505080985050505050505050505050505b565b60008083141561415357600090506141b5565b600082846141619190614bbc565b90508284826141709190614c45565b146141b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a7906158a8565b60405180910390fd5b809150505b92915050565b60006141fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b5565b905092915050565b505050565b600061424c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613abf565b905092915050565b6000600267ffffffffffffffff811115614271576142706158c8565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b66158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143919190614e71565b816001815181106143a5576143a46158f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061440c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614470959493929190615a1f565b600060405180830381600087803b15801561448a57600080fd5b505af115801561449e573d6000803e3d6000fd5b505050505050565b6144d330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c56565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161455c96959493929190615a79565b6060604051808303818588803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145ae9190615aef565b5050505050565b600080831182906145fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145f391906146b1565b60405180910390fd5b506000838561460b9190614c45565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614652578082015181840152602081019050614637565b83811115614661576000848401525b50505050565b6000601f19601f8301169050919050565b600061468382614618565b61468d8185614623565b935061469d818560208601614634565b6146a681614667565b840191505092915050565b600060208201905081810360008301526146cb8184614678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614703826146d8565b9050919050565b614713816146f8565b811461471e57600080fd5b50565b6000813590506147308161470a565b92915050565b6000819050919050565b61474981614736565b811461475457600080fd5b50565b60008135905061476681614740565b92915050565b60008060408385031215614783576147826146d3565b5b600061479185828601614721565b92505060206147a285828601614757565b9150509250929050565b60008115159050919050565b6147c1816147ac565b82525050565b60006020820190506147dc60008301846147b8565b92915050565b6000602082840312156147f8576147f76146d3565b5b600061480684828501614721565b91505092915050565b6000819050919050565b600061483461482f61482a846146d8565b61480f565b6146d8565b9050919050565b600061484682614819565b9050919050565b60006148588261483b565b9050919050565b6148688161484d565b82525050565b6000602082019050614883600083018461485f565b92915050565b61489281614736565b82525050565b60006020820190506148ad6000830184614889565b92915050565b6000602082840312156148c9576148c86146d3565b5b60006148d784828501614757565b91505092915050565b6000806000606084860312156148f9576148f86146d3565b5b600061490786828701614721565b935050602061491886828701614721565b925050604061492986828701614757565b9150509250925092565b61493c816146f8565b82525050565b60006020820190506149576000830184614933565b92915050565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d816147ac565b81146149a857600080fd5b50565b6000813590506149ba81614994565b92915050565b600080604083850312156149d7576149d66146d3565b5b60006149e585828601614721565b92505060206149f6858286016149ab565b9150509250929050565b600080600060608486031215614a1957614a186146d3565b5b6000614a2786828701614757565b9350506020614a3886828701614757565b9250506040614a4986828701614757565b9150509250925092565b600060208284031215614a6957614a686146d3565b5b6000614a77848285016149ab565b91505092915050565b60008060408385031215614a9757614a966146d3565b5b6000614aa585828601614721565b9250506020614ab685828601614721565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b0757607f821691505b60208210811415614b1b57614b1a614ac0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b57602083614623565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc782614736565b9150614bd283614736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0b57614c0a614b8d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5082614736565b9150614c5b83614736565b925082614c6b57614c6a614c16565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614cd2602f83614623565b9150614cdd82614c76565b604082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b6000614d1382614736565b9150614d1e83614736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5357614d52614b8d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614d94601d83614623565b9150614d9f82614d5e565b602082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e26603983614623565b9150614e3182614dca565b604082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b600081519050614e6b8161470a565b92915050565b600060208284031215614e8757614e866146d3565b5b6000614e9584828501614e5c565b91505092915050565b6000604082019050614eb36000830185614933565b614ec06020830184614933565b9392505050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614efd601d83614623565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f602483614623565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b6000604082019050614fda6000830185614933565b614fe76020830184614889565b9392505050565b600081519050614ffd81614994565b92915050565b600060208284031215615019576150186146d3565b5b600061502784828501614fee565b91505092915050565b60006060820190506150456000830186614933565b6150526020830185614933565b61505f6040830184614889565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150c3603583614623565b91506150ce82615067565b604082019050919050565b600060208201905081810360008301526150f2816150b6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615155603483614623565b9150615160826150f9565b604082019050919050565b6000602082019050818103600083015261518481615148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151e7602683614623565b91506151f28261518b565b604082019050919050565b60006020820190508181036000830152615216816151da565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615253601b83614623565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e5602483614623565b91506152f082615289565b604082019050919050565b60006020820190508181036000830152615314816152d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615377602283614623565b91506153828261531b565b604082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615409602583614623565b9150615414826153ad565b604082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549b602383614623565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615507601683614623565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006155bf604983614623565b91506155ca8261553d565b606082019050919050565b600060208201905081810360008301526155ee816155b2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615651603583614623565b915061565c826155f5565b604082019050919050565b6000602082019050818103600083015261568081615644565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156bd601383614623565b91506156c882615687565b602082019050919050565b600060208201905081810360008301526156ec816156b0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061574f603683614623565b915061575a826156f3565b604082019050919050565b6000602082019050818103600083015261577e81615742565b9050919050565b600061579082614736565b915061579b83614736565b9250828210156157ae576157ad614b8d565b5b828203905092915050565b600081905092915050565b50565b60006157d46000836157b9565b91506157df826157c4565b600082019050919050565b60006157f5826157c7565b9150819050919050565b60006060820190506158146000830186614889565b6158216020830185614889565b61582e6040830184614889565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615892602183614623565b915061589d82615836565b604082019050919050565b600060208201905081810360008301526158c181615885565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061594b61594661594184615926565b61480f565b614736565b9050919050565b61595b81615930565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615996816146f8565b82525050565b60006159a8838361598d565b60208301905092915050565b6000602082019050919050565b60006159cc82615961565b6159d6818561596c565b93506159e18361597d565b8060005b83811015615a125781516159f9888261599c565b9750615a04836159b4565b9250506001810190506159e5565b5085935050505092915050565b600060a082019050615a346000830188614889565b615a416020830187615952565b8181036040830152615a5381866159c1565b9050615a626060830185614933565b615a6f6080830184614889565b9695505050505050565b600060c082019050615a8e6000830189614933565b615a9b6020830188614889565b615aa86040830187615952565b615ab56060830186615952565b615ac26080830185614933565b615acf60a0830184614889565b979650505050505050565b600081519050615ae981614740565b92915050565b600080600060608486031215615b0857615b076146d3565b5b6000615b1686828701615ada565b9350506020615b2786828701615ada565b9250506040615b3886828701615ada565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9fd27275e3fbe4f61be09d00efaf504ecf4bb0c3ab14764223e2401bf720be764736f6c63430008090033
Deployed Bytecode Sourcemap
29324:16181:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7480:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9647:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30674:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29405:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8600:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37928:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30453:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30413;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35477:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10298:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29488:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8442:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11062:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29453:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29769:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38097:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45198:105;;;;;;;;;;;;;:::i;:::-;;30264:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29849:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8771:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21945:148;;;;;;;;;;;;;:::i;:::-;;34690:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35946:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29580:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30153;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36303:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34522:112;;;;;;;;;;;;;:::i;:::-;;21303:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29617:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30299:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36190:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7699:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37260:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30227:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30493:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30375:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11783:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9111:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37708:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30896:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29809:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37070:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33942:526;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36684:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35719:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30071:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29654:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45311:191;;;;;;;;;;;;;:::i;:::-;;35084:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30119:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9349:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29696:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34875:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30190:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22248:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30337:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29736:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7480:100;7534:13;7567:5;7560:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7480:100;:::o;9647:169::-;9730:4;9747:39;9756:12;:10;:12::i;:::-;9770:7;9779:6;9747:8;:39::i;:::-;9804:4;9797:11;;9647:169;;;;:::o;30674:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29405:41::-;;;;;;;;;;;;;:::o;8600:108::-;8661:7;8688:12;;8681:19;;8600:108;:::o;37928:157::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38035:9:::1;;;;;;;;;;;38007:38;;38024:9;38007:38;;;;;;;;;;;;38068:9;38056;;:21;;;;;;;;;;;;;;;;;;37928:157:::0;:::o;30453:33::-;;;;:::o;30413:::-;;;;:::o;35477:234::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35596:4:::1;35590;35586:1;35570:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35569:31;;;;:::i;:::-;35559:6;:41;;35551:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:6;35686;:17;;;;:::i;:::-;35663:20;:40;;;;35477:234:::0;:::o;10298:355::-;10438:4;10455:36;10465:6;10473:9;10484:6;10455:9;:36::i;:::-;10502:121;10511:6;10519:12;:10;:12::i;:::-;10533:89;10571:6;10533:89;;;;;;;;;;;;;;;;;:11;:19;10545:6;10533:19;;;;;;;;;;;;;;;:33;10553:12;:10;:12::i;:::-;10533:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10502:8;:121::i;:::-;10641:4;10634:11;;10298:355;;;;;:::o;29488:53::-;29534:6;29488:53;:::o;8442:93::-;8500:5;8525:2;8518:9;;8442:93;:::o;11062:218::-;11150:4;11167:83;11176:12;:10;:12::i;:::-;11190:7;11199:50;11238:10;11199:11;:25;11211:12;:10;:12::i;:::-;11199:25;;;;;;;;;;;;;;;:34;11225:7;11199:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11167:8;:83::i;:::-;11268:4;11261:11;;11062:218;;;;:::o;29453:28::-;;;;;;;;;;;;;:::o;29769:33::-;;;;;;;;;;;;;:::o;38097:125::-;38162:4;38186:19;:28;38206:7;38186:28;;;;;;;;;;;;;;;;;;;;;;;;;38179:35;;38097:125;;;:::o;45198:105::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45252:10:::1;45244:28;;:51;45273:21;45244:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45198:105::o:0;30264:28::-;;;;:::o;29849:30::-;;;;;;;;;;;;;:::o;8771:127::-;8845:7;8872:9;:18;8882:7;8872:18;;;;;;;;;;;;;;;;8865:25;;8771:127;;;:::o;21945:148::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22052:1:::1;22015:40;;22036:6;;;;;;;;;;;22015:40;;;;;;;;;;;;22083:1;22066:6;;:19;;;;;;;;;;;;;;;;;;21945:148::o:0;34690:120::-;34742:4;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34775:5:::1;34758:14;;:22;;;;;;;;;;;;;;;;;;34798:4;34791:11;;34690:120:::0;:::o;35946:144::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36078:4:::1;36036:31;:39;36068:6;36036:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35946:144:::0;;:::o;29580:30::-;;;;;;;;;;;;;:::o;30153:::-;;;;:::o;36303:369::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36437:13:::1;36419:15;:31;;;;36479:13;36461:15;:31;;;;36515:7;36503:9;:19;;;;36584:9;;36566:15;;36548;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36533:12;:60;;;;36628:2;36612:12;;:18;;36604:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36303:369:::0;;;:::o;34522:112::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34593:4:::1;34577:13;;:20;;;;;;;;;;;;;;;;;;34622:4;34608:11;;:18;;;;;;;;;;;;;;;;;;34522:112::o:0;21303:79::-;21341:7;21368:6;;;;;;;;;;;21361:13;;21303:79;:::o;29617:24::-;;;;;;;;;;;;;:::o;30299:31::-;;;;:::o;36190:101::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36276:7:::1;36262:11;;:21;;;;;;;;;;;;;;;;;;36190:101:::0;:::o;7699:104::-;7755:13;7788:7;7781:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7699:104;:::o;37260:244::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37367:13:::1;;;;;;;;;;;37359:21;;:4;:21;;;;37351:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37455:41;37484:4;37490:5;37455:28;:41::i;:::-;37260:244:::0;;:::o;30227:24::-;;;;:::o;30493:27::-;;;;:::o;30375:25::-;;;;:::o;11783:269::-;11876:4;11893:129;11902:12;:10;:12::i;:::-;11916:7;11925:96;11964:15;11925:96;;;;;;;;;;;;;;;;;:11;:25;11937:12;:10;:12::i;:::-;11925:25;;;;;;;;;;;;;;;:34;11951:7;11925:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11893:8;:129::i;:::-;12040:4;12033:11;;11783:269;;;;:::o;9111:175::-;9197:4;9214:42;9224:12;:10;:12::i;:::-;9238:9;9249:6;9214:9;:42::i;:::-;9274:4;9267:11;;9111:175;;;;:::o;37708:208::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37845:15:::1;;;;;;;;;;;37802:59;;37825:18;37802:59;;;;;;;;;;;;37890:18;37872:15;;:36;;;;;;;;;;;;;;;;;;37708:208:::0;:::o;30896:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29809:33::-;;;;;;;;;;;;;:::o;37070:182::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37186:8:::1;37155:19;:28;37175:7;37155:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37226:7;37210:34;;;37235:8;37210:34;;;;;;:::i;:::-;;;;;;;;37070:182:::0;;:::o;33942:526::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34004:35:::1;34061:6;34004:64;;34089:58;34123:16;34142:4;34089:25;:58::i;:::-;34176:16;34158:15;;:34;;;;;;;;;;;;;;;;;;34247:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34229:56;;;34294:4;34301:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34229:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34213:13;;:112;;;;;;;;;;;;;;;;;;34336:55;34370:13;;;;;;;;;;;34386:4;34336:25;:55::i;:::-;34402:58;34439:13;;;;;;;;;;;34455:4;34402:28;:58::i;:::-;33993:475;33942:526:::0;:::o;36684:378::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36820:13:::1;36801:16;:32;;;;36863:13;36844:16;:32;;;;36900:7;36887:10;:20;;;;36972:10;;36953:16;;36934;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;36918:13;:64;;;;37018:2;37001:13;;:19;;36993:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36684:378:::0;;;:::o;35719:215::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35841:4:::1;35835;35831:1;35815:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35814:31;;;;:::i;:::-;35804:6;:41;;35796:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:6;35909;:17;;;;:::i;:::-;35897:9;:29;;;;35719:215:::0;:::o;30071:39::-;;;;;;;;;;;;;:::o;29654:35::-;;;;:::o;45311:191::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45364:4:::1;:12;;;45385:4;45392:13;:11;:13::i;:::-;45364:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45417:4;:17;;;45443:4;45450:7;:5;:7::i;:::-;45459:24;45477:4;45459:9;:24::i;:::-;45417:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45311:191::o:0;35084:381::-;35165:4;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35221:6:::1;35217:1;35201:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35188:9;:39;;35180:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35336:4;35332:1;35316:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35303:9;:37;;35295:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35428:9;35407:18;:30;;;;35454:4;35447:11;;35084:381:::0;;;:::o;30119:27::-;;;;:::o;9349:151::-;9438:7;9465:11;:18;9477:5;9465:18;;;;;;;;;;;;;;;:27;9484:7;9465:27;;;;;;;;;;;;;;;;9458:34;;9349:151;;;;:::o;29696:33::-;;;;:::o;34875:134::-;34935:4;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34974:5:::1;34951:20;;:28;;;;;;;;;;;;;;;;;;34997:4;34990:11;;34875:134:::0;:::o;30190:30::-;;;;:::o;22248:244::-;21525:12;:10;:12::i;:::-;21515:22;;:6;;;;;;;;;;;:22;;;21507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22357:1:::1;22337:22;;:8;:22;;;;22329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22447:8;22418:38;;22439:6;;;;;;;;;;;22418:38;;;;;;;;;;;;22476:8;22467:6;;:17;;;;;;;;;;;;;;;;;;22248:244:::0;:::o;30337:31::-;;;;:::o;29736:24::-;;;;:::o;16347:181::-;16405:7;16425:9;16441:1;16437;:5;;;;:::i;:::-;16425:17;;16466:1;16461;:6;;16453:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16519:1;16512:8;;;16347:181;;;;:::o;116:98::-;169:7;196:10;189:17;;116:98;:::o;14969:380::-;15122:1;15105:19;;:5;:19;;;;15097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15203:1;15184:21;;:7;:21;;;;15176:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15287:6;15257:11;:18;15269:5;15257:18;;;;;;;;;;;;;;;:27;15276:7;15257:27;;;;;;;;;;;;;;;:36;;;;15325:7;15309:32;;15318:5;15309:32;;;15334:6;15309:32;;;;;;:::i;:::-;;;;;;;;14969:380;;;:::o;38234:4134::-;38382:1;38366:18;;:4;:18;;;;38358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38459:1;38445:16;;:2;:16;;;;38437:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38536:1;38526:6;:11;38523:92;;;38554:28;38570:4;38576:2;38580:1;38554:15;:28::i;:::-;38597:7;;38523:92;38638:14;;;;;;;;;;;38635:1841;;;38698:7;:5;:7::i;:::-;38690:15;;:4;:15;;;;:49;;;;;38732:7;:5;:7::i;:::-;38726:13;;:2;:13;;;;38690:49;:86;;;;;38774:1;38760:16;;:2;:16;;;;38690:86;:128;;;;;38811:6;38797:21;;:2;:21;;;;38690:128;:158;;;;;38840:8;;;;;;;;;;;38839:9;38690:158;38668:1797;;;38886:13;;;;;;;;;;;38882:148;;38931:19;:25;38951:4;38931:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38960:19;:23;38980:2;38960:23;;;;;;;;;;;;;;;;;;;;;;;;;38931:52;38923:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38882:148;39188:20;;;;;;;;;;;39184:423;;;39242:7;:5;:7::i;:::-;39236:13;;:2;:13;;;;:47;;;;;39267:15;;;;;;;;;;;39253:30;;:2;:30;;;;39236:47;:79;;;;;39301:13;;;;;;;;;;;39287:28;;:2;:28;;;;39236:79;39232:356;;;39393:12;39351:28;:39;39380:9;39351:39;;;;;;;;;;;;;;;;:54;39343:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39552:12;39510:28;:39;39539:9;39510:39;;;;;;;;;;;;;;;:54;;;;39232:356;39184:423;39676:25;:31;39702:4;39676:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39712:31;:35;39744:2;39712:35;;;;;;;;;;;;;;;;;;;;;;;;;39711:36;39676:71;39672:778;;;39794:20;;39784:6;:30;;39776:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39933:9;;39916:13;39926:2;39916:9;:13::i;:::-;39907:6;:22;;;;:::i;:::-;:35;;39899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39672:778;;;40060:25;:29;40086:2;40060:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40094:31;:37;40126:4;40094:37;;;;;;;;;;;;;;;;;;;;;;;;;40093:38;40060:71;40056:394;;;40178:20;;40168:6;:30;;40160:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40056:394;;;40304:31;:35;40336:2;40304:35;;;;;;;;;;;;;;;;;;;;;;;;;40300:150;;40397:9;;40380:13;40390:2;40380:9;:13::i;:::-;40371:6;:22;;;;:::i;:::-;:35;;40363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:150;40056:394;39672:778;38668:1797;38635:1841;40510:28;40541:24;40559:4;40541:9;:24::i;:::-;40510:55;;40586:12;40625:18;;40601:20;:42;;40586:57;;40674:7;:35;;;;;40698:11;;;;;;;;;;;40674:35;:61;;;;;40727:8;;;;;;;;;;;40726:9;40674:61;:110;;;;;40753:25;:31;40779:4;40753:31;;;;;;;;;;;;;;;;;;;;;;;;;40752:32;40674:110;:153;;;;;40802:19;:25;40822:4;40802:25;;;;;;;;;;;;;;;;;;;;;;;;;40801:26;40674:153;:194;;;;;40845:19;:23;40865:2;40845:23;;;;;;;;;;;;;;;;;;;;;;;;;40844:24;40674:194;40656:338;;;40906:4;40895:8;;:15;;;;;;;;;;;;;;;;;;40939:10;:8;:10::i;:::-;40977:5;40966:8;;:16;;;;;;;;;;;;;;;;;;40656:338;41006:12;41022:8;;;;;;;;;;;41021:9;41006:24;;41131:19;:25;41151:4;41131:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41160:19;:23;41180:2;41160:23;;;;;;;;;;;;;;;;;;;;;;;;;41131:52;41128:99;;;41210:5;41200:15;;41128:99;41247:12;41351:7;41348:967;;;41402:25;:29;41428:2;41402:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41451:1;41435:13;;:17;41402:50;41398:748;;;41479:34;41509:3;41479:25;41490:13;;41479:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41472:41;;41580:13;;41561:16;;41554:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41532:18;;:61;;;;;;;:::i;:::-;;;;;;;;41648:13;;41635:10;;41628:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41612:12;;:49;;;;;;;:::i;:::-;;;;;;;;41728:13;;41709:16;;41702:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41680:18;;:61;;;;;;;:::i;:::-;;;;;;;;41398:748;;;41802:25;:31;41828:4;41802:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41852:1;41837:12;;:16;41802:51;41799:347;;;41878:33;41907:3;41878:24;41889:12;;41878:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41871:40;;41974:12;;41956:15;;41949:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41927:18;;:59;;;;;;;:::i;:::-;;;;;;;;42040:12;;42028:9;;42021:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42005:12;;:47;;;;;;;:::i;:::-;;;;;;;;42118:12;;42100:15;;42093:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42071:18;;:59;;;;;;;:::i;:::-;;;;;;;;41799:347;41398:748;42184:1;42177:4;:8;42174:93;;;42209:42;42225:4;42239;42246;42209:15;:42::i;:::-;42174:93;42299:4;42289:14;;;;;:::i;:::-;;;41348:967;42327:33;42343:4;42349:2;42353:6;42327:15;:33::i;:::-;38347:4021;;;;38234:4134;;;;:::o;17250:192::-;17336:7;17369:1;17364;:6;;17372:12;17356:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17396:9;17412:1;17408;:5;;;;:::i;:::-;17396:17;;17433:1;17426:8;;;17250:192;;;;;:::o;37512:188::-;37629:5;37595:25;:31;37621:4;37595:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37686:5;37652:40;;37680:4;37652:40;;;;;;;;;;;;37512:188;;:::o;12542:573::-;12700:1;12682:20;;:6;:20;;;;12674:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12784:1;12763:23;;:9;:23;;;;12755:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12839:47;12860:6;12868:9;12879:6;12839:20;:47::i;:::-;12919:71;12941:6;12919:71;;;;;;;;;;;;;;;;;:9;:17;12929:6;12919:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12899:9;:17;12909:6;12899:17;;;;;;;;;;;;;;;:91;;;;13024:32;13049:6;13024:9;:20;13034:9;13024:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13001:9;:20;13011:9;13001:20;;;;;;;;;;;;;;;:55;;;;13089:9;13072:35;;13081:6;13072:35;;;13100:6;13072:35;;;;;;:::i;:::-;;;;;;;;12542:573;;;:::o;43530:1656::-;43569:23;43595:24;43613:4;43595:9;:24::i;:::-;43569:50;;43630:25;43700:12;;43679:18;;43658;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43630:82;;43723:12;43778:1;43759:15;:20;:46;;;;43804:1;43783:17;:22;43759:46;43756:60;;;43808:7;;;;;43756:60;43870:2;43849:18;;:23;;;;:::i;:::-;43831:15;:41;43828:111;;;43925:2;43904:18;;:23;;;;:::i;:::-;43886:41;;43828:111;44008:23;44093:1;44073:17;44052:18;;44034:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44008:86;;44105:26;44134:36;44154:15;44134;:19;;:36;;;;:::i;:::-;44105:65;;44191:25;44219:21;44191:49;;44253:36;44270:18;44253:16;:36::i;:::-;44311:18;44332:44;44358:17;44332:21;:25;;:44;;;;:::i;:::-;44311:65;;44397:23;44423:57;44462:17;44423:34;44438:18;;44423:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44397:83;;44491:17;44511:51;44544:17;44511:28;44526:12;;44511:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44491:71;;44593:23;44650:9;44632:15;44619:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44593:66;;44701:1;44680:18;:22;;;;44734:1;44713:18;:22;;;;44761:1;44746:12;:16;;;;44804:9;;;;;;;;;;;44796:23;;44827:9;44796:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44783:58;;;;;44883:1;44865:15;:19;:42;;;;;44906:1;44888:15;:19;44865:42;44862:210;;;44923:46;44936:15;44953;44923:12;:46::i;:::-;44989:71;45004:18;45024:15;45041:18;;44989:71;;;;;;;;:::i;:::-;;;;;;;;44862:210;45123:15;;;;;;;;;;;45115:29;;45152:21;45115:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45102:76;;;;;43558:1628;;;;;;;;;;43530:1656;:::o;17701:471::-;17759:7;18009:1;18004;:6;18000:47;;;18034:1;18027:8;;;;18000:47;18059:9;18075:1;18071;:5;;;;:::i;:::-;18059:17;;18104:1;18099;18095;:5;;;;:::i;:::-;:10;18087:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18163:1;18156:8;;;17701:471;;;;;:::o;18648:132::-;18706:7;18733:39;18737:1;18740;18733:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18726:46;;18648:132;;;;:::o;15952:125::-;;;;:::o;16811:136::-;16869:7;16896:43;16900:1;16903;16896:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16889:50;;16811:136;;;;:::o;42376:601::-;42504:21;42542:1;42528:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42504:40;;42573:4;42555;42560:1;42555:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42599:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42589:4;42594:1;42589:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42634:62;42651:4;42666:15;;;;;;;;;;;42684:11;42634:8;:62::i;:::-;42735:15;;;;;;;;;;;:66;;;42816:11;42842:1;42886:4;42913;42933:15;42735:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42431:546;42376:601;:::o;43001:521::-;43149:62;43166:4;43181:15;;;;;;;;;;;43199:11;43149:8;:62::i;:::-;43254:15;;;;;;;;;;;:31;;;43293:9;43326:4;43346:11;43372:1;43415;43458:15;;;;;;;;;;;43488;43254:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43001:521;;:::o;19276:278::-;19362:7;19394:1;19390;:5;19397:12;19382:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19421:9;19437:1;19433;:5;;;;:::i;:::-;19421:17;;19545:1;19538:8;;;19276:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:143::-;14918:5;14949:6;14943:13;14934:22;;14965:33;14992:5;14965:33;:::i;:::-;14861:143;;;;:::o;15010:351::-;15080:6;15129:2;15117:9;15108:7;15104:23;15100:32;15097:119;;;15135:79;;:::i;:::-;15097:119;15255:1;15280:64;15336:7;15327:6;15316:9;15312:22;15280:64;:::i;:::-;15270:74;;15226:128;15010:351;;;;:::o;15367:332::-;15488:4;15526:2;15515:9;15511:18;15503:26;;15539:71;15607:1;15596:9;15592:17;15583:6;15539:71;:::i;:::-;15620:72;15688:2;15677:9;15673:18;15664:6;15620:72;:::i;:::-;15367:332;;;;;:::o;15705:179::-;15845:31;15841:1;15833:6;15829:14;15822:55;15705:179;:::o;15890:366::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;15890:366;;;:::o;16262:419::-;16428:4;16466:2;16455:9;16451:18;16443:26;;16515:9;16509:4;16505:20;16501:1;16490:9;16486:17;16479:47;16543:131;16669:4;16543:131;:::i;:::-;16535:139;;16262:419;;;:::o;16687:223::-;16827:34;16823:1;16815:6;16811:14;16804:58;16896:6;16891:2;16883:6;16879:15;16872:31;16687:223;:::o;16916:366::-;17058:3;17079:67;17143:2;17138:3;17079:67;:::i;:::-;17072:74;;17155:93;17244:3;17155:93;:::i;:::-;17273:2;17268:3;17264:12;17257:19;;16916:366;;;:::o;17288:419::-;17454:4;17492:2;17481:9;17477:18;17469:26;;17541:9;17535:4;17531:20;17527:1;17516:9;17512:17;17505:47;17569:131;17695:4;17569:131;:::i;:::-;17561:139;;17288:419;;;:::o;17713:332::-;17834:4;17872:2;17861:9;17857:18;17849:26;;17885:71;17953:1;17942:9;17938:17;17929:6;17885:71;:::i;:::-;17966:72;18034:2;18023:9;18019:18;18010:6;17966:72;:::i;:::-;17713:332;;;;;:::o;18051:137::-;18105:5;18136:6;18130:13;18121:22;;18152:30;18176:5;18152:30;:::i;:::-;18051:137;;;;:::o;18194:345::-;18261:6;18310:2;18298:9;18289:7;18285:23;18281:32;18278:119;;;18316:79;;:::i;:::-;18278:119;18436:1;18461:61;18514:7;18505:6;18494:9;18490:22;18461:61;:::i;:::-;18451:71;;18407:125;18194:345;;;;:::o;18545:442::-;18694:4;18732:2;18721:9;18717:18;18709:26;;18745:71;18813:1;18802:9;18798:17;18789:6;18745:71;:::i;:::-;18826:72;18894:2;18883:9;18879:18;18870:6;18826:72;:::i;:::-;18908;18976:2;18965:9;18961:18;18952:6;18908:72;:::i;:::-;18545:442;;;;;;:::o;18993:240::-;19133:34;19129:1;19121:6;19117:14;19110:58;19202:23;19197:2;19189:6;19185:15;19178:48;18993:240;:::o;19239:366::-;19381:3;19402:67;19466:2;19461:3;19402:67;:::i;:::-;19395:74;;19478:93;19567:3;19478:93;:::i;:::-;19596:2;19591:3;19587:12;19580:19;;19239:366;;;:::o;19611:419::-;19777:4;19815:2;19804:9;19800:18;19792:26;;19864:9;19858:4;19854:20;19850:1;19839:9;19835:17;19828:47;19892:131;20018:4;19892:131;:::i;:::-;19884:139;;19611:419;;;:::o;20036:239::-;20176:34;20172:1;20164:6;20160:14;20153:58;20245:22;20240:2;20232:6;20228:15;20221:47;20036:239;:::o;20281:366::-;20423:3;20444:67;20508:2;20503:3;20444:67;:::i;:::-;20437:74;;20520:93;20609:3;20520:93;:::i;:::-;20638:2;20633:3;20629:12;20622:19;;20281:366;;;:::o;20653:419::-;20819:4;20857:2;20846:9;20842:18;20834:26;;20906:9;20900:4;20896:20;20892:1;20881:9;20877:17;20870:47;20934:131;21060:4;20934:131;:::i;:::-;20926:139;;20653:419;;;:::o;21078:225::-;21218:34;21214:1;21206:6;21202:14;21195:58;21287:8;21282:2;21274:6;21270:15;21263:33;21078:225;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:177::-;22246:29;22242:1;22234:6;22230:14;22223:53;22106:177;:::o;22289:366::-;22431:3;22452:67;22516:2;22511:3;22452:67;:::i;:::-;22445:74;;22528:93;22617:3;22528:93;:::i;:::-;22646:2;22641:3;22637:12;22630:19;;22289:366;;;:::o;22661:419::-;22827:4;22865:2;22854:9;22850:18;22842:26;;22914:9;22908:4;22904:20;22900:1;22889:9;22885:17;22878:47;22942:131;23068:4;22942:131;:::i;:::-;22934:139;;22661:419;;;:::o;23086:223::-;23226:34;23222:1;23214:6;23210:14;23203:58;23295:6;23290:2;23282:6;23278:15;23271:31;23086:223;:::o;23315:366::-;23457:3;23478:67;23542:2;23537:3;23478:67;:::i;:::-;23471:74;;23554:93;23643:3;23554:93;:::i;:::-;23672:2;23667:3;23663:12;23656:19;;23315:366;;;:::o;23687:419::-;23853:4;23891:2;23880:9;23876:18;23868:26;;23940:9;23934:4;23930:20;23926:1;23915:9;23911:17;23904:47;23968:131;24094:4;23968:131;:::i;:::-;23960:139;;23687:419;;;:::o;24112:221::-;24252:34;24248:1;24240:6;24236:14;24229:58;24321:4;24316:2;24308:6;24304:15;24297:29;24112:221;:::o;24339:366::-;24481:3;24502:67;24566:2;24561:3;24502:67;:::i;:::-;24495:74;;24578:93;24667:3;24578:93;:::i;:::-;24696:2;24691:3;24687:12;24680:19;;24339:366;;;:::o;24711:419::-;24877:4;24915:2;24904:9;24900:18;24892:26;;24964:9;24958:4;24954:20;24950:1;24939:9;24935:17;24928:47;24992:131;25118:4;24992:131;:::i;:::-;24984:139;;24711:419;;;:::o;25136:224::-;25276:34;25272:1;25264:6;25260:14;25253:58;25345:7;25340:2;25332:6;25328:15;25321:32;25136:224;:::o;25366:366::-;25508:3;25529:67;25593:2;25588:3;25529:67;:::i;:::-;25522:74;;25605:93;25694:3;25605:93;:::i;:::-;25723:2;25718:3;25714:12;25707:19;;25366:366;;;:::o;25738:419::-;25904:4;25942:2;25931:9;25927:18;25919:26;;25991:9;25985:4;25981:20;25977:1;25966:9;25962:17;25955:47;26019:131;26145:4;26019:131;:::i;:::-;26011:139;;25738:419;;;:::o;26163:222::-;26303:34;26299:1;26291:6;26287:14;26280:58;26372:5;26367:2;26359:6;26355:15;26348:30;26163:222;:::o;26391:366::-;26533:3;26554:67;26618:2;26613:3;26554:67;:::i;:::-;26547:74;;26630:93;26719:3;26630:93;:::i;:::-;26748:2;26743:3;26739:12;26732:19;;26391:366;;;:::o;26763:419::-;26929:4;26967:2;26956:9;26952:18;26944:26;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27044:131;27170:4;27044:131;:::i;:::-;27036:139;;26763:419;;;:::o;27188:172::-;27328:24;27324:1;27316:6;27312:14;27305:48;27188:172;:::o;27366:366::-;27508:3;27529:67;27593:2;27588:3;27529:67;:::i;:::-;27522:74;;27605:93;27694:3;27605:93;:::i;:::-;27723:2;27718:3;27714:12;27707:19;;27366:366;;;:::o;27738:419::-;27904:4;27942:2;27931:9;27927:18;27919:26;;27991:9;27985:4;27981:20;27977:1;27966:9;27962:17;27955:47;28019:131;28145:4;28019:131;:::i;:::-;28011:139;;27738:419;;;:::o;28163:297::-;28303:34;28299:1;28291:6;28287:14;28280:58;28372:34;28367:2;28359:6;28355:15;28348:59;28441:11;28436:2;28428:6;28424:15;28417:36;28163:297;:::o;28466:366::-;28608:3;28629:67;28693:2;28688:3;28629:67;:::i;:::-;28622:74;;28705:93;28794:3;28705:93;:::i;:::-;28823:2;28818:3;28814:12;28807:19;;28466:366;;;:::o;28838:419::-;29004:4;29042:2;29031:9;29027:18;29019:26;;29091:9;29085:4;29081:20;29077:1;29066:9;29062:17;29055:47;29119:131;29245:4;29119:131;:::i;:::-;29111:139;;28838:419;;;:::o;29263:240::-;29403:34;29399:1;29391:6;29387:14;29380:58;29472:23;29467:2;29459:6;29455:15;29448:48;29263:240;:::o;29509:366::-;29651:3;29672:67;29736:2;29731:3;29672:67;:::i;:::-;29665:74;;29748:93;29837:3;29748:93;:::i;:::-;29866:2;29861:3;29857:12;29850:19;;29509:366;;;:::o;29881:419::-;30047:4;30085:2;30074:9;30070:18;30062:26;;30134:9;30128:4;30124:20;30120:1;30109:9;30105:17;30098:47;30162:131;30288:4;30162:131;:::i;:::-;30154:139;;29881:419;;;:::o;30306:169::-;30446:21;30442:1;30434:6;30430:14;30423:45;30306:169;:::o;30481:366::-;30623:3;30644:67;30708:2;30703:3;30644:67;:::i;:::-;30637:74;;30720:93;30809:3;30720:93;:::i;:::-;30838:2;30833:3;30829:12;30822:19;;30481:366;;;:::o;30853:419::-;31019:4;31057:2;31046:9;31042:18;31034:26;;31106:9;31100:4;31096:20;31092:1;31081:9;31077:17;31070:47;31134:131;31260:4;31134:131;:::i;:::-;31126:139;;30853:419;;;:::o;31278:241::-;31418:34;31414:1;31406:6;31402:14;31395:58;31487:24;31482:2;31474:6;31470:15;31463:49;31278:241;:::o;31525:366::-;31667:3;31688:67;31752:2;31747:3;31688:67;:::i;:::-;31681:74;;31764:93;31853:3;31764:93;:::i;:::-;31882:2;31877:3;31873:12;31866:19;;31525:366;;;:::o;31897:419::-;32063:4;32101:2;32090:9;32086:18;32078:26;;32150:9;32144:4;32140:20;32136:1;32125:9;32121:17;32114:47;32178:131;32304:4;32178:131;:::i;:::-;32170:139;;31897:419;;;:::o;32322:191::-;32362:4;32382:20;32400:1;32382:20;:::i;:::-;32377:25;;32416:20;32434:1;32416:20;:::i;:::-;32411:25;;32455:1;32452;32449:8;32446:34;;;32460:18;;:::i;:::-;32446:34;32505:1;32502;32498:9;32490:17;;32322:191;;;;:::o;32519:147::-;32620:11;32657:3;32642:18;;32519:147;;;;:::o;32672:114::-;;:::o;32792:398::-;32951:3;32972:83;33053:1;33048:3;32972:83;:::i;:::-;32965:90;;33064:93;33153:3;33064:93;:::i;:::-;33182:1;33177:3;33173:11;33166:18;;32792:398;;;:::o;33196:379::-;33380:3;33402:147;33545:3;33402:147;:::i;:::-;33395:154;;33566:3;33559:10;;33196:379;;;:::o;33581:442::-;33730:4;33768:2;33757:9;33753:18;33745:26;;33781:71;33849:1;33838:9;33834:17;33825:6;33781:71;:::i;:::-;33862:72;33930:2;33919:9;33915:18;33906:6;33862:72;:::i;:::-;33944;34012:2;34001:9;33997:18;33988:6;33944:72;:::i;:::-;33581:442;;;;;;:::o;34029:220::-;34169:34;34165:1;34157:6;34153:14;34146:58;34238:3;34233:2;34225:6;34221:15;34214:28;34029:220;:::o;34255:366::-;34397:3;34418:67;34482:2;34477:3;34418:67;:::i;:::-;34411:74;;34494:93;34583:3;34494:93;:::i;:::-;34612:2;34607:3;34603:12;34596:19;;34255:366;;;:::o;34627:419::-;34793:4;34831:2;34820:9;34816:18;34808:26;;34880:9;34874:4;34870:20;34866:1;34855:9;34851:17;34844:47;34908:131;35034:4;34908:131;:::i;:::-;34900:139;;34627:419;;;:::o;35052:180::-;35100:77;35097:1;35090:88;35197:4;35194:1;35187:15;35221:4;35218:1;35211:15;35238:180;35286:77;35283:1;35276:88;35383:4;35380:1;35373:15;35407:4;35404:1;35397:15;35424:85;35469:7;35498:5;35487:16;;35424:85;;;:::o;35515:158::-;35573:9;35606:61;35624:42;35633:32;35659:5;35633:32;:::i;:::-;35624:42;:::i;:::-;35606:61;:::i;:::-;35593:74;;35515:158;;;:::o;35679:147::-;35774:45;35813:5;35774:45;:::i;:::-;35769:3;35762:58;35679:147;;:::o;35832:114::-;35899:6;35933:5;35927:12;35917:22;;35832:114;;;:::o;35952:184::-;36051:11;36085:6;36080:3;36073:19;36125:4;36120:3;36116:14;36101:29;;35952:184;;;;:::o;36142:132::-;36209:4;36232:3;36224:11;;36262:4;36257:3;36253:14;36245:22;;36142:132;;;:::o;36280:108::-;36357:24;36375:5;36357:24;:::i;:::-;36352:3;36345:37;36280:108;;:::o;36394:179::-;36463:10;36484:46;36526:3;36518:6;36484:46;:::i;:::-;36562:4;36557:3;36553:14;36539:28;;36394:179;;;;:::o;36579:113::-;36649:4;36681;36676:3;36672:14;36664:22;;36579:113;;;:::o;36728:732::-;36847:3;36876:54;36924:5;36876:54;:::i;:::-;36946:86;37025:6;37020:3;36946:86;:::i;:::-;36939:93;;37056:56;37106:5;37056:56;:::i;:::-;37135:7;37166:1;37151:284;37176:6;37173:1;37170:13;37151:284;;;37252:6;37246:13;37279:63;37338:3;37323:13;37279:63;:::i;:::-;37272:70;;37365:60;37418:6;37365:60;:::i;:::-;37355:70;;37211:224;37198:1;37195;37191:9;37186:14;;37151:284;;;37155:14;37451:3;37444:10;;36852:608;;;36728:732;;;;:::o;37466:831::-;37729:4;37767:3;37756:9;37752:19;37744:27;;37781:71;37849:1;37838:9;37834:17;37825:6;37781:71;:::i;:::-;37862:80;37938:2;37927:9;37923:18;37914:6;37862:80;:::i;:::-;37989:9;37983:4;37979:20;37974:2;37963:9;37959:18;37952:48;38017:108;38120:4;38111:6;38017:108;:::i;:::-;38009:116;;38135:72;38203:2;38192:9;38188:18;38179:6;38135:72;:::i;:::-;38217:73;38285:3;38274:9;38270:19;38261:6;38217:73;:::i;:::-;37466:831;;;;;;;;:::o;38303:807::-;38552:4;38590:3;38579:9;38575:19;38567:27;;38604:71;38672:1;38661:9;38657:17;38648:6;38604:71;:::i;:::-;38685:72;38753:2;38742:9;38738:18;38729:6;38685:72;:::i;:::-;38767:80;38843:2;38832:9;38828:18;38819:6;38767:80;:::i;:::-;38857;38933:2;38922:9;38918:18;38909:6;38857:80;:::i;:::-;38947:73;39015:3;39004:9;39000:19;38991:6;38947:73;:::i;:::-;39030;39098:3;39087:9;39083:19;39074:6;39030:73;:::i;:::-;38303:807;;;;;;;;;:::o;39116:143::-;39173:5;39204:6;39198:13;39189:22;;39220:33;39247:5;39220:33;:::i;:::-;39116:143;;;;:::o;39265:663::-;39353:6;39361;39369;39418:2;39406:9;39397:7;39393:23;39389:32;39386:119;;;39424:79;;:::i;:::-;39386:119;39544:1;39569:64;39625:7;39616:6;39605:9;39601:22;39569:64;:::i;:::-;39559:74;;39515:128;39682:2;39708:64;39764:7;39755:6;39744:9;39740:22;39708:64;:::i;:::-;39698:74;;39653:129;39821:2;39847:64;39903:7;39894:6;39883:9;39879:22;39847:64;:::i;:::-;39837:74;;39792:129;39265:663;;;;;:::o
Swarm Source
ipfs://a9fd27275e3fbe4f61be09d00efaf504ecf4bb0c3ab14764223e2401bf720be7
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.