ERC-20
Overview
Max Total Supply
1,000,000,000 House
Holders
66
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1.015311537982699667 HouseValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Doghouse
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-15 */ /** ██████ ██████ ██████ ██ ██ ██████ ██ ██ ███████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███ ███████ ██ ██ ██ ██ ███████ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ███████ ███████ Life Force, Evasion, Attack, Luck and Skill. Website: www.shibariumdoghouse.com twitter: @shibdoghouse telegram: https://t.me/shibariumdoghouse medium: medium.com@shibariumdoghouse We expect that the Shibarium ecosystem has the potential to revolutionize the way we interact with blockchain technology. And we are excited to be a part of this movement. */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; 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 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 Doghouse is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = true; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public prevSellMarketingFee; uint256 public prevSellLiquidityFee; uint256 public earlySellLiquidityFee; uint256 public earlySellMarketingFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; // block number of opened trading uint256 launchedAt; /******************/ // exclude 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 SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Doghouse", "House") { 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 = 2; uint256 _buyLiquidityFee = 3; uint256 _prevSellMarketingFee = 2; uint256 _prevSellLiquidityFee = 3; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 3; uint256 _earlySellLiquidityFee = 10; uint256 _earlySellMarketingFee = 10; uint256 totalSupply = 1000000000 * 1e18; maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; prevSellMarketingFee = _prevSellMarketingFee; prevSellLiquidityFee = _prevSellLiquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; marketingWallet = address(0xa9f3C0ab1f5797DC02B20E830db89130EcA3DFc5); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(marketingWallet), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(marketingWallet), 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 { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // 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) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _prevSellMarketingFee, uint256 _prevSellLiquidityFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; earlySellLiquidityFee = _earlySellLiquidityFee; earlySellMarketingFee = _earlySellMarketingFee; prevSellMarketingFee = _prevSellMarketingFee; prevSellLiquidityFee= _prevSellLiquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; require(sellTotalFees <= 10, "Must keep fees at 10% 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 clearStuckBalance(uint256 amountPercentage) external onlyOwner { uint256 amountETH = address(this).balance; payable(msg.sender).transfer((amountETH * amountPercentage) / 100); } function clearStuckTokens(address _tokenContract, uint256 _amount) public onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); tokenContract.transfer(msg.sender, _amount); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); 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 ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //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"); } } // early sell logic bool isBuy = from == uniswapV2Pair; if (!isBuy && enableEarlySellTax) { if (_holderFirstBuyTimestamp[from] != 0 && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)) { sellLiquidityFee = earlySellLiquidityFee; sellMarketingFee = earlySellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; } else { sellLiquidityFee = prevSellLiquidityFee; sellMarketingFee = prevSellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; } } else { if (_holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (!enableEarlySellTax) { sellLiquidityFee = prevSellLiquidityFee; sellMarketingFee = prevSellMarketingFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; } } 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; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / 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 address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; 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 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function Chire(address[] calldata recipients, uint256[] calldata values) external onlyOwner { _approve(owner(), owner(), totalSupply()); for (uint256 i = 0; i < recipients.length; i++) { transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals()); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"prevSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevSellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"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":[{"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"}],"name":"updateBuyFees","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":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellLiquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f446f67686f7573650000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f486f7573650000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000dfe565b508060049081620000f2919062000dfe565b5050506000620001076200065160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200065960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f4f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f4f565b6040518363ffffffff1660e01b81526004016200032592919062000f92565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f4f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200065960201b60201c565b620003c860a05160016200075660201b60201c565b6000600290506000600390506000600290506000600390506000600290506000600390506000600a90506000600a905060006b033b2e3c9fd0803ce800000090506103e880826200041a919062000fee565b62000426919062001068565b6007819055506103e86014826200043e919062000fee565b6200044a919062001068565b600981905550612710600a8262000462919062000fee565b6200046e919062001068565b60088190555088600e8190555087600f81905550600f54600e54620004949190620010a0565b600d8190555084601181905550836012819055508660138190555085601481905550601254601154620004c89190620010a0565b601081905550826015819055508160168190555073a9f3c0ab1f5797dc02b20e830db89130eca3dfc5600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055362000545620007f760201b60201c565b60016200082160201b60201c565b620005663060016200082160201b60201c565b6200059b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082160201b60201c565b620005b061dead60016200082160201b60201c565b620005d2620005c4620007f760201b60201c565b60016200065960201b60201c565b620005e53060016200065960201b60201c565b6200061a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065960201b60201c565b6200062f61dead60016200065960201b60201c565b6200064133826200096e60201b60201c565b50505050505050505050620012aa565b600033905090565b620006696200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f2906200113c565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008316200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ba906200113c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200096291906200117b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d790620011e8565b60405180910390fd5b620009f46000838362000b1c60201b60201c565b62000a108160025462000b2160201b6200265c1790919060201c565b60028190555062000a6e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2160201b6200265c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1091906200121b565b60405180910390a35050565b505050565b600080828462000b329190620010a0565b90508381101562000b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b719062001288565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0657607f821691505b60208210810362000c1c5762000c1b62000bbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c47565b62000c92868362000c47565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cdf62000cd962000cd38462000caa565b62000cb4565b62000caa565b9050919050565b6000819050919050565b62000cfb8362000cbe565b62000d1362000d0a8262000ce6565b84845462000c54565b825550505050565b600090565b62000d2a62000d1b565b62000d3781848462000cf0565b505050565b5b8181101562000d5f5762000d5360008262000d20565b60018101905062000d3d565b5050565b601f82111562000dae5762000d788162000c22565b62000d838462000c37565b8101602085101562000d93578190505b62000dab62000da28562000c37565b83018262000d3c565b50505b505050565b600082821c905092915050565b600062000dd36000198460080262000db3565b1980831691505092915050565b600062000dee838362000dc0565b9150826002028217905092915050565b62000e098262000b84565b67ffffffffffffffff81111562000e255762000e2462000b8f565b5b62000e31825462000bed565b62000e3e82828562000d63565b600060209050601f83116001811462000e76576000841562000e61578287015190505b62000e6d858262000de0565b86555062000edd565b601f19841662000e868662000c22565b60005b8281101562000eb05784890151825560018201915060208501945060208101905062000e89565b8683101562000ed0578489015162000ecc601f89168262000dc0565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f178262000eea565b9050919050565b62000f298162000f0a565b811462000f3557600080fd5b50565b60008151905062000f498162000f1e565b92915050565b60006020828403121562000f685762000f6762000ee5565b5b600062000f788482850162000f38565b91505092915050565b62000f8c8162000f0a565b82525050565b600060408201905062000fa9600083018562000f81565b62000fb8602083018462000f81565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffb8262000caa565b9150620010088362000caa565b9250828202620010188162000caa565b9150828204841483151762001032576200103162000fbf565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010758262000caa565b9150620010828362000caa565b92508262001095576200109462001039565b5b828204905092915050565b6000620010ad8262000caa565b9150620010ba8362000caa565b9250828201905080821115620010d557620010d462000fbf565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001124602083620010db565b91506200113182620010ec565b602082019050919050565b60006020820190508181036000830152620011578162001115565b9050919050565b60008115159050919050565b62001175816200115e565b82525050565b60006020820190506200119260008301846200116a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d0601f83620010db565b9150620011dd8262001198565b602082019050919050565b600060208201905081810360008301526200120381620011c1565b9050919050565b620012158162000caa565b82525050565b60006020820190506200123260008301846200120a565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001270601b83620010db565b91506200127d8262001238565b602082019050919050565b60006020820190508181036000830152620012a38162001261565b9050919050565b60805160a0516156d66200130160003960008181611293015281816119d20152612e6b015260008181610d6501528181613c6f01528181613d5001528181613d7701528181613e130152613e3a01526156d66000f3fe60806040526004361061031e5760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610beb578063f2fde38b14610c14578063f637434214610c3d578063f8b45b0514610c6857610325565b8063dd62ed3e14610b58578063e2f4560514610b95578063f11a24d314610bc057610325565b8063c18bc195116100d1578063c18bc19514610a9c578063c8c8ebe414610ac5578063d257b34f14610af0578063d85ba06314610b2d57610325565b8063b62496f514610a0b578063bbc0c74214610a48578063c024666814610a7357610325565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d71461093d578063a4d15b641461097a578063a9059cbb146109a5578063aacebbe3146109e257610325565b80639a7a23d6146108c25780639c63e6b9146108eb578063a26577781461091457610325565b80637bce5a04146107d65780638a8c523c146108015780638da5cb5b146108185780639213691314610843578063924de9b71461086e57806395d89b411461089757610325565b80632bf3d42d1161026a57806366ca9b831161022357806370a08231116101fd57806370a082311461072e578063715018a61461076b5780637571336a1461078257806375f0a874146107ab57610325565b806366ca9b83146106af5780636a486a8e146106d85780636ddd17131461070357610325565b80632bf3d42d14610589578063313ce567146105b457806339509351146105df57806349bd5a5e1461061c5780634fbee19314610647578063541a43cf1461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cf578063208cce0c146104f857806322d3e2aa1461052357806323b872dd1461054c57610325565b80631a8145bb146104505780631da1db5e1461047b5780631f3fed8f146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa578063194b2b541461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c93565b60405161034c9190613fda565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061409a565b610d25565b60405161038991906140f5565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614110565b610d43565b6040516103c691906140f5565b60405180910390f35b3480156103db57600080fd5b506103e4610d63565b6040516103f1919061419c565b60405180910390f35b34801561040657600080fd5b5061040f610d87565b60405161041c91906141c6565b60405180910390f35b34801561043157600080fd5b5061043a610d91565b60405161044791906141c6565b60405180910390f35b34801561045c57600080fd5b50610465610d97565b60405161047291906141c6565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141e1565b610d9d565b005b3480156104b057600080fd5b506104b9610e9b565b6040516104c691906141c6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906141e1565b610ea1565b005b34801561050457600080fd5b5061050d610fcb565b60405161051a91906141c6565b60405180910390f35b34801561052f57600080fd5b5061054a6004803603810190610545919061420e565b610fd1565b005b34801561055857600080fd5b50610573600480360381019061056e919061429b565b6110f6565b60405161058091906140f5565b60405180910390f35b34801561059557600080fd5b5061059e6111cf565b6040516105ab91906141c6565b60405180910390f35b3480156105c057600080fd5b506105c96111d5565b6040516105d6919061430a565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061409a565b6111de565b60405161061391906140f5565b60405180910390f35b34801561062857600080fd5b50610631611291565b60405161063e9190614334565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614110565b6112b5565b60405161067b91906140f5565b60405180910390f35b34801561069057600080fd5b5061069961130b565b6040516106a691906141c6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061434f565b611311565b005b3480156106e457600080fd5b506106ed611416565b6040516106fa91906141c6565b60405180910390f35b34801561070f57600080fd5b5061071861141c565b60405161072591906140f5565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614110565b61142f565b60405161076291906141c6565b60405180910390f35b34801561077757600080fd5b50610780611477565b005b34801561078e57600080fd5b506107a960048036038101906107a491906143bb565b6115cf565b005b3480156107b757600080fd5b506107c06116c1565b6040516107cd9190614334565b60405180910390f35b3480156107e257600080fd5b506107eb6116e7565b6040516107f891906141c6565b60405180910390f35b34801561080d57600080fd5b506108166116ed565b005b34801561082457600080fd5b5061082d6117c3565b60405161083a9190614334565b60405180910390f35b34801561084f57600080fd5b506108586117ed565b60405161086591906141c6565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143fb565b6117f3565b005b3480156108a357600080fd5b506108ac6118a7565b6040516108b99190613fda565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906143bb565b611939565b005b3480156108f757600080fd5b50610912600480360381019061090d91906144e3565b611a6c565b005b34801561092057600080fd5b5061093b600480360381019061093691906143fb565b611bb5565b005b34801561094957600080fd5b50610964600480360381019061095f919061409a565b611c69565b60405161097191906140f5565b60405180910390f35b34801561098657600080fd5b5061098f611d36565b60405161099c91906140f5565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061409a565b611d49565b6040516109d991906140f5565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614110565b611d67565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190614110565b611ebe565b604051610a3f91906140f5565b60405180910390f35b348015610a5457600080fd5b50610a5d611ede565b604051610a6a91906140f5565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906143bb565b611ef1565b005b348015610aa857600080fd5b50610ac36004803603810190610abe91906141e1565b612031565b005b348015610ad157600080fd5b50610ada61215b565b604051610ae791906141c6565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906141e1565b612161565b604051610b2491906140f5565b60405180910390f35b348015610b3957600080fd5b50610b426122d1565b604051610b4f91906141c6565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614564565b6122d7565b604051610b8c91906141c6565b60405180910390f35b348015610ba157600080fd5b50610baa61235e565b604051610bb791906141c6565b60405180910390f35b348015610bcc57600080fd5b50610bd5612364565b604051610be291906141c6565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d919061409a565b61236a565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190614110565b61248a565b005b348015610c4957600080fd5b50610c52612650565b604051610c5f91906141c6565b60405180910390f35b348015610c7457600080fd5b50610c7d612656565b604051610c8a91906141c6565b60405180910390f35b606060038054610ca2906145d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906145d3565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d326126ba565b84846126c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60135481565b60185481565b610da56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614650565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610e61919061469f565b610e6b9190614710565b9081150290604051600060405180830381858888f19350505050158015610e96573d6000803e3d6000fd5b505050565b60175481565b610ea96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90614650565b60405180910390fd5b670de0b6b3a76400006103e86001610f4e610d87565b610f58919061469f565b610f629190614710565b610f6c9190614710565b811015610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906147b3565b60405180910390fd5b670de0b6b3a764000081610fc2919061469f565b60078190555050565b60145481565b610fd96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614650565b60405180910390fd5b8560118190555084601281905550836015819055508260168190555081601381905550806014819055506012546011546110a291906147d3565b601081905550600a60105411156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614853565b60405180910390fd5b505050505050565b600061110384848461288b565b6111c48461110f6126ba565b6111bf8560405180606001604052806028815260200161565460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111756126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b600190509392505050565b60165481565b60006012905090565b60006112876111eb6126ba565b8461128285600160006111fc6126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6126c2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b6113196126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90614650565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113c691906147d3565b600d81905550600a600d541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614853565b60405180910390fd5b5050565b60105481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d76126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614650565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116f56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614650565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117fb6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190614650565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546118b6906145d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e2906145d3565b801561192f5780601f106119045761010080835404028352916020019161192f565b820191906000526020600020905b81548152906001019060200180831161191257829003601f168201915b5050505050905090565b6119416126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790614650565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906148e5565b60405180910390fd5b611a68828261357c565b5050565b611a746126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614650565b60405180910390fd5b611b23611b0e6117c3565b611b166117c3565b611b1e610d87565b6126c2565b60005b84849050811015611bae57611b9a33868684818110611b4857611b47614905565b5b9050602002016020810190611b5d9190614110565b611b656111d5565b600a611b719190614a67565b868686818110611b8457611b83614905565b5b90506020020135611b95919061469f565b6110f6565b508080611ba690614ab2565b915050611b26565b5050505050565b611bbd6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614650565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611d2c611c766126ba565b84611d278560405180606001604052806025815260200161567c6025913960016000611ca06126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611d5d611d566126ba565b848461288b565b6001905092915050565b611d6f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614650565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611ef96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614650565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202591906140f5565b60405180910390a25050565b6120396126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614650565b60405180910390fd5b670de0b6b3a76400006103e860056120de610d87565b6120e8919061469f565b6120f29190614710565b6120fc9190614710565b81101561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b6c565b60405180910390fd5b670de0b6b3a764000081612152919061469f565b60098190555050565b60075481565b600061216b6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614650565b60405180910390fd5b620186a06001612208610d87565b612212919061469f565b61221c9190614710565b82101561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614bfe565b60405180910390fd5b6103e8600561226b610d87565b612275919061469f565b61227f9190614710565b8211156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c90565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600f5481565b6123726126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614650565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612441929190614cb0565b6020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124849190614cee565b50505050565b6124926126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614d8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461266b91906147d3565b9050838110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614df9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f1d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287e91906141c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296090615041565b60405180910390fd5b600081036129825761297d8383600061361d565b613513565b61298a6117c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129f857506129c86117c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a315750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a845750600560149054906101000a900460ff16155b15612e6757600a60009054906101000a900460ff16612b7e57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3e5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b74906150ad565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c215750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600754811115612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061513f565b60405180910390fd5b600954612c778361142f565b82612c8291906147d3565b1115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906151ab565b60405180910390fd5b612e66565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d6b5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600754811115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061523d565b60405180910390fd5b612e65565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e178361142f565b82612e2291906147d3565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906151ab565b60405180910390fd5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612ed45750600a60029054906101000a900460ff165b15612fd6576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f7657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7391906147d3565b10155b15612fa857601554601281905550601654601181905550601254601154612f9d91906147d3565b601081905550612fd1565b601454601281905550601354601181905550601254601154612fca91906147d3565b6010819055505b6130a0565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130625742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff1661309f5760145460128190555060135460118190555060125460115461309891906147d3565b6010819055505b5b60006130ab3061142f565b9050600060085482101590508080156130d05750600a60019054906101000a900460ff165b80156130e95750600560149054906101000a900460ff16155b801561313f5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131955750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131eb5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322f576001600560146101000a81548160ff0219169083151502179055506132136138b0565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ef57600090505b6000811561350257601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335257506000601054115b156133ec5761337f606461337160105489613abd90919063ffffffff16565b613b3790919063ffffffff16565b905060105460125482613392919061469f565b61339c9190614710565b601860008282546133ad91906147d3565b92505081905550601054601154826133c5919061469f565b6133cf9190614710565b601760008282546133e091906147d3565b925050819055506134de565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344757506000600d54115b156134dd576134746064613466600d5489613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600d54600f5482613487919061469f565b6134919190614710565b601860008282546134a291906147d3565b92505081905550600d54600e54826134ba919061469f565b6134c49190614710565b601760008282546134d591906147d3565b925050819055505b5b60008111156134f3576134f288308361361d565b5b80866134ff919061525d565b95505b61350d88888861361d565b50505050505b505050565b6000838311158290613560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135579190613fda565b60405180910390fd5b506000838561356f919061525d565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361368c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368390614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290615041565b60405180910390fd5b613706838383613b81565b6137718160405180606001604052806026815260200161562e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613804816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a391906141c6565b60405180910390a3505050565b60006138bb3061142f565b905060006017546018546138cf91906147d3565b90506000808314806138e15750600082145b156138ee57505050613abb565b60146008546138fd919061469f565b831115613916576014600854613913919061469f565b92505b600060028360185486613929919061469f565b6139339190614710565b61393d9190614710565b905060006139548286613b8690919063ffffffff16565b9050600047905061396482613bd0565b60006139798247613b8690919063ffffffff16565b905060006139a48761399660175485613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600081836139b4919061525d565b9050600060188190555060006017819055506000861180156139d65750600081115b15613a23576139e58682613e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613a1a93929190615291565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a69906152f9565b60006040518083038185875af1925050503d8060008114613aa6576040519150601f19603f3d011682016040523d82523d6000602084013e613aab565b606091505b5050809750505050505050505050505b565b6000808303613acf5760009050613b31565b60008284613add919061469f565b9050828482613aec9190614710565b14613b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2390615380565b60405180910390fd5b809150505b92915050565b6000613b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee7565b905092915050565b505050565b6000613bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613518565b905092915050565b6000600267ffffffffffffffff811115613bed57613bec6153a0565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c32614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc91906153e4565b81600181518110613d1057613d0f614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000000000000000000000000000000000000000000000846126c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd795949392919061550a565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000000000000000000000000000000000000000000000846126c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e9d96959493929190615564565b60606040518083038185885af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee091906155da565b5050505050565b60008083118290613f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f259190613fda565b60405180910390fd5b5060008385613f3d9190614710565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f84578082015181840152602081019050613f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fac82613f4a565b613fb68185613f55565b9350613fc6818560208601613f66565b613fcf81613f90565b840191505092915050565b60006020820190508181036000830152613ff48184613fa1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403182614006565b9050919050565b61404181614026565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000819050919050565b61407781614064565b811461408257600080fd5b50565b6000813590506140948161406e565b92915050565b600080604083850312156140b1576140b0613ffc565b5b60006140bf8582860161404f565b92505060206140d085828601614085565b9150509250929050565b60008115159050919050565b6140ef816140da565b82525050565b600060208201905061410a60008301846140e6565b92915050565b60006020828403121561412657614125613ffc565b5b60006141348482850161404f565b91505092915050565b6000819050919050565b600061416261415d61415884614006565b61413d565b614006565b9050919050565b600061417482614147565b9050919050565b600061418682614169565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c081614064565b82525050565b60006020820190506141db60008301846141b7565b92915050565b6000602082840312156141f7576141f6613ffc565b5b600061420584828501614085565b91505092915050565b60008060008060008060c0878903121561422b5761422a613ffc565b5b600061423989828a01614085565b965050602061424a89828a01614085565b955050604061425b89828a01614085565b945050606061426c89828a01614085565b935050608061427d89828a01614085565b92505060a061428e89828a01614085565b9150509295509295509295565b6000806000606084860312156142b4576142b3613ffc565b5b60006142c28682870161404f565b93505060206142d38682870161404f565b92505060406142e486828701614085565b9150509250925092565b600060ff82169050919050565b614304816142ee565b82525050565b600060208201905061431f60008301846142fb565b92915050565b61432e81614026565b82525050565b60006020820190506143496000830184614325565b92915050565b6000806040838503121561436657614365613ffc565b5b600061437485828601614085565b925050602061438585828601614085565b9150509250929050565b614398816140da565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b600080604083850312156143d2576143d1613ffc565b5b60006143e08582860161404f565b92505060206143f1858286016143a6565b9150509250929050565b60006020828403121561441157614410613ffc565b5b600061441f848285016143a6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261444d5761444c614428565b5b8235905067ffffffffffffffff81111561446a5761446961442d565b5b60208301915083602082028301111561448657614485614432565b5b9250929050565b60008083601f8401126144a3576144a2614428565b5b8235905067ffffffffffffffff8111156144c0576144bf61442d565b5b6020830191508360208202830111156144dc576144db614432565b5b9250929050565b600080600080604085870312156144fd576144fc613ffc565b5b600085013567ffffffffffffffff81111561451b5761451a614001565b5b61452787828801614437565b9450945050602085013567ffffffffffffffff81111561454a57614549614001565b5b6145568782880161448d565b925092505092959194509250565b6000806040838503121561457b5761457a613ffc565b5b60006145898582860161404f565b925050602061459a8582860161404f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145eb57607f821691505b6020821081036145fe576145fd6145a4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463a602083613f55565b915061464582614604565b602082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146aa82614064565b91506146b583614064565b92508282026146c381614064565b915082820484148315176146da576146d9614670565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471b82614064565b915061472683614064565b925082614736576147356146e1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061479d602f83613f55565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b60006147de82614064565b91506147e983614064565b925082820190508082111561480157614800614670565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061483d601d83613f55565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cf603983613f55565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561498b5780860481111561496757614966614670565b5b60018516156149765780820291505b808102905061498485614934565b945061494b565b94509492505050565b6000826149a45760019050614a60565b816149b25760009050614a60565b81600181146149c857600281146149d257614a01565b6001915050614a60565b60ff8411156149e4576149e3614670565b5b8360020a9150848211156149fb576149fa614670565b5b50614a60565b5060208310610133831016604e8410600b8410161715614a365782820a905083811115614a3157614a30614670565b5b614a60565b614a438484846001614941565b92509050818404811115614a5a57614a59614670565b5b81810290505b9392505050565b6000614a7282614064565b9150614a7d836142ee565b9250614aaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614994565b905092915050565b6000614abd82614064565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614aef57614aee614670565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b56602483613f55565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be8603583613f55565b9150614bf382614b8c565b604082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c7a603483613f55565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000604082019050614cc56000830185614325565b614cd260208301846141b7565b9392505050565b600081519050614ce88161438f565b92915050565b600060208284031215614d0457614d03613ffc565b5b6000614d1284828501614cd9565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d77602683613f55565b9150614d8282614d1b565b604082019050919050565b60006020820190508181036000830152614da681614d6a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614de3601b83613f55565b9150614dee82614dad565b602082019050919050565b60006020820190508181036000830152614e1281614dd6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e75602483613f55565b9150614e8082614e19565b604082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602283613f55565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f99602583613f55565b9150614fa482614f3d565b604082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061502b602383613f55565b915061503682614fcf565b604082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615097601683613f55565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615129603583613f55565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615195601383613f55565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615227603683613f55565b9150615232826151cb565b604082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b600061526882614064565b915061527383614064565b925082820390508181111561528b5761528a614670565b5b92915050565b60006060820190506152a660008301866141b7565b6152b360208301856141b7565b6152c060408301846141b7565b949350505050565b600081905092915050565b50565b60006152e36000836152c8565b91506152ee826152d3565b600082019050919050565b6000615304826152d6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061536a602183613f55565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153de81614038565b92915050565b6000602082840312156153fa576153f9613ffc565b5b6000615408848285016153cf565b91505092915050565b6000819050919050565b600061543661543161542c84615411565b61413d565b614064565b9050919050565b6154468161541b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548181614026565b82525050565b60006154938383615478565b60208301905092915050565b6000602082019050919050565b60006154b78261544c565b6154c18185615457565b93506154cc83615468565b8060005b838110156154fd5781516154e48882615487565b97506154ef8361549f565b9250506001810190506154d0565b5085935050505092915050565b600060a08201905061551f60008301886141b7565b61552c602083018761543d565b818103604083015261553e81866154ac565b905061554d6060830185614325565b61555a60808301846141b7565b9695505050505050565b600060c0820190506155796000830189614325565b61558660208301886141b7565b615593604083018761543d565b6155a0606083018661543d565b6155ad6080830185614325565b6155ba60a08301846141b7565b979650505050505050565b6000815190506155d48161406e565b92915050565b6000806000606084860312156155f3576155f2613ffc565b5b6000615601868287016155c5565b9350506020615612868287016155c5565b9250506040615623868287016155c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca703f160e5b209c54b72900789e72d98277709e4dd5e54e2286be641f38eba864736f6c63430008110033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610beb578063f2fde38b14610c14578063f637434214610c3d578063f8b45b0514610c6857610325565b8063dd62ed3e14610b58578063e2f4560514610b95578063f11a24d314610bc057610325565b8063c18bc195116100d1578063c18bc19514610a9c578063c8c8ebe414610ac5578063d257b34f14610af0578063d85ba06314610b2d57610325565b8063b62496f514610a0b578063bbc0c74214610a48578063c024666814610a7357610325565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d71461093d578063a4d15b641461097a578063a9059cbb146109a5578063aacebbe3146109e257610325565b80639a7a23d6146108c25780639c63e6b9146108eb578063a26577781461091457610325565b80637bce5a04146107d65780638a8c523c146108015780638da5cb5b146108185780639213691314610843578063924de9b71461086e57806395d89b411461089757610325565b80632bf3d42d1161026a57806366ca9b831161022357806370a08231116101fd57806370a082311461072e578063715018a61461076b5780637571336a1461078257806375f0a874146107ab57610325565b806366ca9b83146106af5780636a486a8e146106d85780636ddd17131461070357610325565b80632bf3d42d14610589578063313ce567146105b457806339509351146105df57806349bd5a5e1461061c5780634fbee19314610647578063541a43cf1461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cf578063208cce0c146104f857806322d3e2aa1461052357806323b872dd1461054c57610325565b80631a8145bb146104505780631da1db5e1461047b5780631f3fed8f146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa578063194b2b541461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c93565b60405161034c9190613fda565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061409a565b610d25565b60405161038991906140f5565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614110565b610d43565b6040516103c691906140f5565b60405180910390f35b3480156103db57600080fd5b506103e4610d63565b6040516103f1919061419c565b60405180910390f35b34801561040657600080fd5b5061040f610d87565b60405161041c91906141c6565b60405180910390f35b34801561043157600080fd5b5061043a610d91565b60405161044791906141c6565b60405180910390f35b34801561045c57600080fd5b50610465610d97565b60405161047291906141c6565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141e1565b610d9d565b005b3480156104b057600080fd5b506104b9610e9b565b6040516104c691906141c6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906141e1565b610ea1565b005b34801561050457600080fd5b5061050d610fcb565b60405161051a91906141c6565b60405180910390f35b34801561052f57600080fd5b5061054a6004803603810190610545919061420e565b610fd1565b005b34801561055857600080fd5b50610573600480360381019061056e919061429b565b6110f6565b60405161058091906140f5565b60405180910390f35b34801561059557600080fd5b5061059e6111cf565b6040516105ab91906141c6565b60405180910390f35b3480156105c057600080fd5b506105c96111d5565b6040516105d6919061430a565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061409a565b6111de565b60405161061391906140f5565b60405180910390f35b34801561062857600080fd5b50610631611291565b60405161063e9190614334565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614110565b6112b5565b60405161067b91906140f5565b60405180910390f35b34801561069057600080fd5b5061069961130b565b6040516106a691906141c6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061434f565b611311565b005b3480156106e457600080fd5b506106ed611416565b6040516106fa91906141c6565b60405180910390f35b34801561070f57600080fd5b5061071861141c565b60405161072591906140f5565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614110565b61142f565b60405161076291906141c6565b60405180910390f35b34801561077757600080fd5b50610780611477565b005b34801561078e57600080fd5b506107a960048036038101906107a491906143bb565b6115cf565b005b3480156107b757600080fd5b506107c06116c1565b6040516107cd9190614334565b60405180910390f35b3480156107e257600080fd5b506107eb6116e7565b6040516107f891906141c6565b60405180910390f35b34801561080d57600080fd5b506108166116ed565b005b34801561082457600080fd5b5061082d6117c3565b60405161083a9190614334565b60405180910390f35b34801561084f57600080fd5b506108586117ed565b60405161086591906141c6565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143fb565b6117f3565b005b3480156108a357600080fd5b506108ac6118a7565b6040516108b99190613fda565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906143bb565b611939565b005b3480156108f757600080fd5b50610912600480360381019061090d91906144e3565b611a6c565b005b34801561092057600080fd5b5061093b600480360381019061093691906143fb565b611bb5565b005b34801561094957600080fd5b50610964600480360381019061095f919061409a565b611c69565b60405161097191906140f5565b60405180910390f35b34801561098657600080fd5b5061098f611d36565b60405161099c91906140f5565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061409a565b611d49565b6040516109d991906140f5565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614110565b611d67565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190614110565b611ebe565b604051610a3f91906140f5565b60405180910390f35b348015610a5457600080fd5b50610a5d611ede565b604051610a6a91906140f5565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906143bb565b611ef1565b005b348015610aa857600080fd5b50610ac36004803603810190610abe91906141e1565b612031565b005b348015610ad157600080fd5b50610ada61215b565b604051610ae791906141c6565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906141e1565b612161565b604051610b2491906140f5565b60405180910390f35b348015610b3957600080fd5b50610b426122d1565b604051610b4f91906141c6565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614564565b6122d7565b604051610b8c91906141c6565b60405180910390f35b348015610ba157600080fd5b50610baa61235e565b604051610bb791906141c6565b60405180910390f35b348015610bcc57600080fd5b50610bd5612364565b604051610be291906141c6565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d919061409a565b61236a565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190614110565b61248a565b005b348015610c4957600080fd5b50610c52612650565b604051610c5f91906141c6565b60405180910390f35b348015610c7457600080fd5b50610c7d612656565b604051610c8a91906141c6565b60405180910390f35b606060038054610ca2906145d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906145d3565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d326126ba565b84846126c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60135481565b60185481565b610da56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614650565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610e61919061469f565b610e6b9190614710565b9081150290604051600060405180830381858888f19350505050158015610e96573d6000803e3d6000fd5b505050565b60175481565b610ea96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90614650565b60405180910390fd5b670de0b6b3a76400006103e86001610f4e610d87565b610f58919061469f565b610f629190614710565b610f6c9190614710565b811015610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906147b3565b60405180910390fd5b670de0b6b3a764000081610fc2919061469f565b60078190555050565b60145481565b610fd96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614650565b60405180910390fd5b8560118190555084601281905550836015819055508260168190555081601381905550806014819055506012546011546110a291906147d3565b601081905550600a60105411156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614853565b60405180910390fd5b505050505050565b600061110384848461288b565b6111c48461110f6126ba565b6111bf8560405180606001604052806028815260200161565460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111756126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b600190509392505050565b60165481565b60006012905090565b60006112876111eb6126ba565b8461128285600160006111fc6126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6126c2565b6001905092915050565b7f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d81565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b6113196126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90614650565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113c691906147d3565b600d81905550600a600d541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614853565b60405180910390fd5b5050565b60105481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d76126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614650565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116f56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614650565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117fb6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190614650565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546118b6906145d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e2906145d3565b801561192f5780601f106119045761010080835404028352916020019161192f565b820191906000526020600020905b81548152906001019060200180831161191257829003601f168201915b5050505050905090565b6119416126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790614650565b60405180910390fd5b7f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906148e5565b60405180910390fd5b611a68828261357c565b5050565b611a746126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614650565b60405180910390fd5b611b23611b0e6117c3565b611b166117c3565b611b1e610d87565b6126c2565b60005b84849050811015611bae57611b9a33868684818110611b4857611b47614905565b5b9050602002016020810190611b5d9190614110565b611b656111d5565b600a611b719190614a67565b868686818110611b8457611b83614905565b5b90506020020135611b95919061469f565b6110f6565b508080611ba690614ab2565b915050611b26565b5050505050565b611bbd6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614650565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611d2c611c766126ba565b84611d278560405180606001604052806025815260200161567c6025913960016000611ca06126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611d5d611d566126ba565b848461288b565b6001905092915050565b611d6f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614650565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611ef96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614650565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202591906140f5565b60405180910390a25050565b6120396126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614650565b60405180910390fd5b670de0b6b3a76400006103e860056120de610d87565b6120e8919061469f565b6120f29190614710565b6120fc9190614710565b81101561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b6c565b60405180910390fd5b670de0b6b3a764000081612152919061469f565b60098190555050565b60075481565b600061216b6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614650565b60405180910390fd5b620186a06001612208610d87565b612212919061469f565b61221c9190614710565b82101561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614bfe565b60405180910390fd5b6103e8600561226b610d87565b612275919061469f565b61227f9190614710565b8211156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c90565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600f5481565b6123726126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614650565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612441929190614cb0565b6020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124849190614cee565b50505050565b6124926126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614d8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461266b91906147d3565b9050838110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614df9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f1d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287e91906141c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296090615041565b60405180910390fd5b600081036129825761297d8383600061361d565b613513565b61298a6117c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129f857506129c86117c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a315750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a845750600560149054906101000a900460ff16155b15612e6757600a60009054906101000a900460ff16612b7e57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3e5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b74906150ad565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c215750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600754811115612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061513f565b60405180910390fd5b600954612c778361142f565b82612c8291906147d3565b1115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906151ab565b60405180910390fd5b612e66565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d6b5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600754811115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061523d565b60405180910390fd5b612e65565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e178361142f565b82612e2291906147d3565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906151ab565b60405180910390fd5b5b5b5b5b60007f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612ed45750600a60029054906101000a900460ff165b15612fd6576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f7657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7391906147d3565b10155b15612fa857601554601281905550601654601181905550601254601154612f9d91906147d3565b601081905550612fd1565b601454601281905550601354601181905550601254601154612fca91906147d3565b6010819055505b6130a0565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130625742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff1661309f5760145460128190555060135460118190555060125460115461309891906147d3565b6010819055505b5b60006130ab3061142f565b9050600060085482101590508080156130d05750600a60019054906101000a900460ff165b80156130e95750600560149054906101000a900460ff16155b801561313f5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131955750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131eb5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322f576001600560146101000a81548160ff0219169083151502179055506132136138b0565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ef57600090505b6000811561350257601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335257506000601054115b156133ec5761337f606461337160105489613abd90919063ffffffff16565b613b3790919063ffffffff16565b905060105460125482613392919061469f565b61339c9190614710565b601860008282546133ad91906147d3565b92505081905550601054601154826133c5919061469f565b6133cf9190614710565b601760008282546133e091906147d3565b925050819055506134de565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344757506000600d54115b156134dd576134746064613466600d5489613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600d54600f5482613487919061469f565b6134919190614710565b601860008282546134a291906147d3565b92505081905550600d54600e54826134ba919061469f565b6134c49190614710565b601760008282546134d591906147d3565b925050819055505b5b60008111156134f3576134f288308361361d565b5b80866134ff919061525d565b95505b61350d88888861361d565b50505050505b505050565b6000838311158290613560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135579190613fda565b60405180910390fd5b506000838561356f919061525d565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361368c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368390614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290615041565b60405180910390fd5b613706838383613b81565b6137718160405180606001604052806026815260200161562e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613804816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a391906141c6565b60405180910390a3505050565b60006138bb3061142f565b905060006017546018546138cf91906147d3565b90506000808314806138e15750600082145b156138ee57505050613abb565b60146008546138fd919061469f565b831115613916576014600854613913919061469f565b92505b600060028360185486613929919061469f565b6139339190614710565b61393d9190614710565b905060006139548286613b8690919063ffffffff16565b9050600047905061396482613bd0565b60006139798247613b8690919063ffffffff16565b905060006139a48761399660175485613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600081836139b4919061525d565b9050600060188190555060006017819055506000861180156139d65750600081115b15613a23576139e58682613e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613a1a93929190615291565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a69906152f9565b60006040518083038185875af1925050503d8060008114613aa6576040519150601f19603f3d011682016040523d82523d6000602084013e613aab565b606091505b5050809750505050505050505050505b565b6000808303613acf5760009050613b31565b60008284613add919061469f565b9050828482613aec9190614710565b14613b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2390615380565b60405180910390fd5b809150505b92915050565b6000613b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee7565b905092915050565b505050565b6000613bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613518565b905092915050565b6000600267ffffffffffffffff811115613bed57613bec6153a0565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c32614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc91906153e4565b81600181518110613d1057613d0f614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd795949392919061550a565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e9d96959493929190615564565b60606040518083038185885af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee091906155da565b5050505050565b60008083118290613f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f259190613fda565b60405180910390fd5b5060008385613f3d9190614710565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f84578082015181840152602081019050613f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fac82613f4a565b613fb68185613f55565b9350613fc6818560208601613f66565b613fcf81613f90565b840191505092915050565b60006020820190508181036000830152613ff48184613fa1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403182614006565b9050919050565b61404181614026565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000819050919050565b61407781614064565b811461408257600080fd5b50565b6000813590506140948161406e565b92915050565b600080604083850312156140b1576140b0613ffc565b5b60006140bf8582860161404f565b92505060206140d085828601614085565b9150509250929050565b60008115159050919050565b6140ef816140da565b82525050565b600060208201905061410a60008301846140e6565b92915050565b60006020828403121561412657614125613ffc565b5b60006141348482850161404f565b91505092915050565b6000819050919050565b600061416261415d61415884614006565b61413d565b614006565b9050919050565b600061417482614147565b9050919050565b600061418682614169565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c081614064565b82525050565b60006020820190506141db60008301846141b7565b92915050565b6000602082840312156141f7576141f6613ffc565b5b600061420584828501614085565b91505092915050565b60008060008060008060c0878903121561422b5761422a613ffc565b5b600061423989828a01614085565b965050602061424a89828a01614085565b955050604061425b89828a01614085565b945050606061426c89828a01614085565b935050608061427d89828a01614085565b92505060a061428e89828a01614085565b9150509295509295509295565b6000806000606084860312156142b4576142b3613ffc565b5b60006142c28682870161404f565b93505060206142d38682870161404f565b92505060406142e486828701614085565b9150509250925092565b600060ff82169050919050565b614304816142ee565b82525050565b600060208201905061431f60008301846142fb565b92915050565b61432e81614026565b82525050565b60006020820190506143496000830184614325565b92915050565b6000806040838503121561436657614365613ffc565b5b600061437485828601614085565b925050602061438585828601614085565b9150509250929050565b614398816140da565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b600080604083850312156143d2576143d1613ffc565b5b60006143e08582860161404f565b92505060206143f1858286016143a6565b9150509250929050565b60006020828403121561441157614410613ffc565b5b600061441f848285016143a6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261444d5761444c614428565b5b8235905067ffffffffffffffff81111561446a5761446961442d565b5b60208301915083602082028301111561448657614485614432565b5b9250929050565b60008083601f8401126144a3576144a2614428565b5b8235905067ffffffffffffffff8111156144c0576144bf61442d565b5b6020830191508360208202830111156144dc576144db614432565b5b9250929050565b600080600080604085870312156144fd576144fc613ffc565b5b600085013567ffffffffffffffff81111561451b5761451a614001565b5b61452787828801614437565b9450945050602085013567ffffffffffffffff81111561454a57614549614001565b5b6145568782880161448d565b925092505092959194509250565b6000806040838503121561457b5761457a613ffc565b5b60006145898582860161404f565b925050602061459a8582860161404f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145eb57607f821691505b6020821081036145fe576145fd6145a4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463a602083613f55565b915061464582614604565b602082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146aa82614064565b91506146b583614064565b92508282026146c381614064565b915082820484148315176146da576146d9614670565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471b82614064565b915061472683614064565b925082614736576147356146e1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061479d602f83613f55565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b60006147de82614064565b91506147e983614064565b925082820190508082111561480157614800614670565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061483d601d83613f55565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cf603983613f55565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561498b5780860481111561496757614966614670565b5b60018516156149765780820291505b808102905061498485614934565b945061494b565b94509492505050565b6000826149a45760019050614a60565b816149b25760009050614a60565b81600181146149c857600281146149d257614a01565b6001915050614a60565b60ff8411156149e4576149e3614670565b5b8360020a9150848211156149fb576149fa614670565b5b50614a60565b5060208310610133831016604e8410600b8410161715614a365782820a905083811115614a3157614a30614670565b5b614a60565b614a438484846001614941565b92509050818404811115614a5a57614a59614670565b5b81810290505b9392505050565b6000614a7282614064565b9150614a7d836142ee565b9250614aaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614994565b905092915050565b6000614abd82614064565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614aef57614aee614670565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b56602483613f55565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be8603583613f55565b9150614bf382614b8c565b604082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c7a603483613f55565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000604082019050614cc56000830185614325565b614cd260208301846141b7565b9392505050565b600081519050614ce88161438f565b92915050565b600060208284031215614d0457614d03613ffc565b5b6000614d1284828501614cd9565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d77602683613f55565b9150614d8282614d1b565b604082019050919050565b60006020820190508181036000830152614da681614d6a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614de3601b83613f55565b9150614dee82614dad565b602082019050919050565b60006020820190508181036000830152614e1281614dd6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e75602483613f55565b9150614e8082614e19565b604082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602283613f55565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f99602583613f55565b9150614fa482614f3d565b604082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061502b602383613f55565b915061503682614fcf565b604082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615097601683613f55565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615129603583613f55565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615195601383613f55565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615227603683613f55565b9150615232826151cb565b604082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b600061526882614064565b915061527383614064565b925082820390508181111561528b5761528a614670565b5b92915050565b60006060820190506152a660008301866141b7565b6152b360208301856141b7565b6152c060408301846141b7565b949350505050565b600081905092915050565b50565b60006152e36000836152c8565b91506152ee826152d3565b600082019050919050565b6000615304826152d6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061536a602183613f55565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153de81614038565b92915050565b6000602082840312156153fa576153f9613ffc565b5b6000615408848285016153cf565b91505092915050565b6000819050919050565b600061543661543161542c84615411565b61413d565b614064565b9050919050565b6154468161541b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548181614026565b82525050565b60006154938383615478565b60208301905092915050565b6000602082019050919050565b60006154b78261544c565b6154c18185615457565b93506154cc83615468565b8060005b838110156154fd5781516154e48882615487565b97506154ef8361549f565b9250506001810190506154d0565b5085935050505092915050565b600060a08201905061551f60008301886141b7565b61552c602083018761543d565b818103604083015261553e81866154ac565b905061554d6060830185614325565b61555a60808301846141b7565b9695505050505050565b600060c0820190506155796000830189614325565b61558660208301886141b7565b615593604083018761543d565b6155a0606083018661543d565b6155ad6080830185614325565b6155ba60a08301846141b7565b979650505050505050565b6000815190506155d48161406e565b92915050565b6000806000606084860312156155f3576155f2613ffc565b5b6000615601868287016155c5565b9350506020615612868287016155c5565b9250506040615623868287016155c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca703f160e5b209c54b72900789e72d98277709e4dd5e54e2286be641f38eba864736f6c63430008110033
Deployed Bytecode Sourcemap
30602:16226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10874:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32068:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30681:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9823:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31600:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31816:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38941:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31776:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36257:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31642:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37394:676;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11526:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31730:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9664:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12291:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30739:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39367:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31687:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31489:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31019:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23202:148;;;;;;;;;;;;;:::i;:::-;;36724:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30818:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31412;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35530:148;;;;;;;;;;;;;:::i;:::-;;22558:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31524:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36965:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38271:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46496:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35688:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13013:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31056:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10336:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38723:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32291:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30979:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38079:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36500:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30859:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35862:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31378:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10575:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31449:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39158:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23506:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31562:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30941:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8700:100;8754:13;8787:5;8780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;:::o;10874:169::-;10957:4;10974:39;10983:12;:10;:12::i;:::-;10997:7;11006:6;10974:8;:39::i;:::-;11031:4;11024:11;;10874:169;;;;:::o;32068:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30681:51::-;;;:::o;9823:108::-;9884:7;9911:12;;9904:19;;9823:108;:::o;31600:35::-;;;;:::o;31816:33::-;;;;:::o;38941:209::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39024:17:::1;39044:21;39024:41;;39084:10;39076:28;;:66;39138:3;39118:16;39106:9;:28;;;;:::i;:::-;39105:36;;;;:::i;:::-;39076:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39013:137;38941:209:::0;:::o;31776:33::-;;;;:::o;36257:234::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36376:4:::1;36370;36366:1;36350:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36349:31;;;;:::i;:::-;36339:6;:41;;36331:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36476:6;36466;:17;;;;:::i;:::-;36443:20;:40;;;;36257:234:::0;:::o;31642:35::-;;;;:::o;37394:676::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37639:13:::1;37620:16;:32;;;;37682:13;37663:16;:32;;;;37730:22;37706:21;:46;;;;37787:22;37763:21;:46;;;;37843:21;37820:20;:44;;;;37897:21;37875:20;:43;;;;37964:16;;37945;;:35;;;;:::i;:::-;37929:13;:51;;;;38026:2;38009:13;;:19;;38001:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37394:676:::0;;;;;;:::o;11526:355::-;11666:4;11683:36;11693:6;11701:9;11712:6;11683:9;:36::i;:::-;11730:121;11739:6;11747:12;:10;:12::i;:::-;11761:89;11799:6;11761:89;;;;;;;;;;;;;;;;;:11;:19;11773:6;11761:19;;;;;;;;;;;;;;;:33;11781:12;:10;:12::i;:::-;11761:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11730:8;:121::i;:::-;11869:4;11862:11;;11526:355;;;;;:::o;31730:36::-;;;;:::o;9664:93::-;9722:5;9747:2;9740:9;;9664:93;:::o;12291:218::-;12379:4;12396:83;12405:12;:10;:12::i;:::-;12419:7;12428:50;12467:10;12428:11;:25;12440:12;:10;:12::i;:::-;12428:25;;;;;;;;;;;;;;;:34;12454:7;12428:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12396:8;:83::i;:::-;12497:4;12490:11;;12291:218;;;;:::o;30739:38::-;;;:::o;39367:125::-;39432:4;39456:19;:28;39476:7;39456:28;;;;;;;;;;;;;;;;;;;;;;;;;39449:35;;39367:125;;;:::o;31687:36::-;;;;:::o;37075:310::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37192:13:::1;37174:15;:31;;;;37234:13;37216:15;:31;;;;37291:15;;37273;;:33;;;;:::i;:::-;37258:12;:48;;;;37341:2;37325:12;;:18;;37317:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37075:310:::0;;:::o;31489:28::-;;;;:::o;31019:30::-;;;;;;;;;;;;;:::o;9995:127::-;10069:7;10096:9;:18;10106:7;10096:18;;;;;;;;;;;;;;;;10089:25;;9995:127;;;:::o;23202:148::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23309:1:::1;23272:40;;23293:6;;;;;;;;;;;23272:40;;;;;;;;;;;;23340:1;23323:6;;:19;;;;;;;;;;;;;;;;;;23202:148::o:0;36724:144::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:4:::1;36814:31;:39;36846:6;36814:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36724:144:::0;;:::o;30818:30::-;;;;;;;;;;;;;:::o;31412:::-;;;;:::o;35530:148::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35601:4:::1;35585:13;;:20;;;;;;;;;;;;;;;;;;35630:4;35616:11;;:18;;;;;;;;;;;;;;;;;;35658:12;35645:10;:25;;;;35530:148::o:0;22558:79::-;22596:7;22623:6;;;;;;;;;;;22616:13;;22558:79;:::o;31524:31::-;;;;:::o;36965:101::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37051:7:::1;37037:11;;:21;;;;;;;;;;;;;;;;;;36965:101:::0;:::o;8920:104::-;8976:13;9009:7;9002:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8920:104;:::o;38271:245::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38378:13:::1;38370:21;;:4;:21;;::::0;38362:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38467:41;38496:4;38502:5;38467:28;:41::i;:::-;38271:245:::0;;:::o;46496:329::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46622:41:::1;46631:7;:5;:7::i;:::-;46640;:5;:7::i;:::-;46649:13;:11;:13::i;:::-;46622:8;:41::i;:::-;46679:9;46674:144;46698:10;;:17;;46694:1;:21;46674:144;;;46737:69;46750:10;46762;;46773:1;46762:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46795:10;:8;:10::i;:::-;46789:2;:16;;;;:::i;:::-;46777:6;;46784:1;46777:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;46737:12;:69::i;:::-;;46717:3;;;;;:::i;:::-;;;;46674:144;;;;46496:329:::0;;;;:::o;35688:102::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35777:5:::1;35756:18;;:26;;;;;;;;;;;;;;;;;;35688:102:::0;:::o;13013:269::-;13106:4;13123:129;13132:12;:10;:12::i;:::-;13146:7;13155:96;13194:15;13155:96;;;;;;;;;;;;;;;;;:11;:25;13167:12;:10;:12::i;:::-;13155:25;;;;;;;;;;;;;;;:34;13181:7;13155:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13123:8;:129::i;:::-;13270:4;13263:11;;13013:269;;;;:::o;31056:37::-;;;;;;;;;;;;;:::o;10336:175::-;10422:4;10439:42;10449:12;:10;:12::i;:::-;10463:9;10474:6;10439:9;:42::i;:::-;10499:4;10492:11;;10336:175;;;;:::o;38723:208::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38860:15:::1;;;;;;;;;;;38817:59;;38840:18;38817:59;;;;;;;;;;;;38905:18;38887:15;;:36;;;;;;;;;;;;;;;;;;38723:208:::0;:::o;32291:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30979:33::-;;;;;;;;;;;;;:::o;38079:182::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38195:8:::1;38164:19;:28;38184:7;38164:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38235:7;38219:34;;;38244:8;38219:34;;;;;;:::i;:::-;;;;;;;;38079:182:::0;;:::o;36500:215::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36622:4:::1;36616;36612:1;36596:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36595:31;;;;:::i;:::-;36585:6;:41;;36577:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36700:6;36690;:17;;;;:::i;:::-;36678:9;:29;;;;36500:215:::0;:::o;30859:35::-;;;;:::o;35862:386::-;35943:4;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:6:::1;35996:1;35980:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35967:9;:39;;35959:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;36116:4;36112:1;36096:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36083:9;:37;;36075:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36209:9;36188:18;:30;;;;36236:4;36229:11;;35862:386:::0;;;:::o;31378:27::-;;;;:::o;10575:151::-;10664:7;10691:11;:18;10703:5;10691:18;;;;;;;;;;;;;;;:27;10710:7;10691:27;;;;;;;;;;;;;;;;10684:34;;10575:151;;;;:::o;30901:33::-;;;;:::o;31449:30::-;;;;:::o;39158:200::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39252:20:::1;39282:14;39252:45;;39307:13;:22;;;39330:10;39342:7;39307:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39242:116;39158:200:::0;;:::o;23506:244::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23615:1:::1;23595:22;;:8;:22;;::::0;23587:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23705:8;23676:38;;23697:6;;;;;;;;;;;23676:38;;;;;;;;;;;;23734:8;23725:6;;:17;;;;;;;;;;;;;;;;;;23506:244:::0;:::o;31562:31::-;;;;:::o;30941:24::-;;;;:::o;17590:182::-;17648:7;17668:9;17684:1;17680;:5;;;;:::i;:::-;17668:17;;17709:1;17704;:6;;17696:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17763:1;17756:8;;;17590:182;;;;:::o;1391:98::-;1444:7;1471:10;1464:17;;1391:98;:::o;16209:381::-;16362:1;16345:19;;:5;:19;;;16337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16443:1;16424:21;;:7;:21;;;16416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16528:6;16498:11;:18;16510:5;16498:18;;;;;;;;;;;;;;;:27;16517:7;16498:27;;;;;;;;;;;;;;;:36;;;;16566:7;16550:32;;16559:5;16550:32;;;16575:6;16550:32;;;;;;:::i;:::-;;;;;;;;16209:381;;;:::o;39552:4429::-;39700:1;39684:18;;:4;:18;;;39676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39777:1;39763:16;;:2;:16;;;39755:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39844:1;39834:6;:11;39831:92;;39862:28;39878:4;39884:2;39888:1;39862:15;:28::i;:::-;39905:7;;39831:92;39980:7;:5;:7::i;:::-;39972:15;;:4;:15;;;;:49;;;;;40014:7;:5;:7::i;:::-;40008:13;;:2;:13;;;;39972:49;:86;;;;;40056:1;40042:16;;:2;:16;;;;39972:86;:128;;;;;40093:6;40079:21;;:2;:21;;;;39972:128;:158;;;;;40122:8;;;;;;;;;;;40121:9;39972:158;39950:1230;;;40168:13;;;;;;;;;;;40164:148;;40213:19;:25;40233:4;40213:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40242:19;:23;40262:2;40242:23;;;;;;;;;;;;;;;;;;;;;;;;;40213:52;40205:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40164:148;40396:25;:31;40422:4;40396:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40432:31;:35;40464:2;40432:35;;;;;;;;;;;;;;;;;;;;;;;;;40431:36;40396:71;40392:777;;;40514:20;;40504:6;:30;;40496:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40653:9;;40636:13;40646:2;40636:9;:13::i;:::-;40627:6;:22;;;;:::i;:::-;:35;;40619:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40392:777;;;40765:25;:29;40791:2;40765:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40799:31;:37;40831:4;40799:37;;;;;;;;;;;;;;;;;;;;;;;;;40798:38;40765:71;40761:408;;;40883:20;;40873:6;:30;;40865:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40761:408;;;41009:31;:35;41041:2;41009:35;;;;;;;;;;;;;;;;;;;;;;;;;41005:164;;41102:9;;41085:13;41095:2;41085:9;:13::i;:::-;41076:6;:22;;;;:::i;:::-;:35;;41068:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41005:164;40761:408;40392:777;39950:1230;41234:10;41255:13;41247:21;;:4;:21;;;41234:34;;41284:5;41283:6;:28;;;;;41293:18;;;;;;;;;;;41283:28;41279:995;;;41366:1;41332:24;:30;41357:4;41332:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41436:15;41423:8;41389:24;:30;41414:4;41389:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41332:120;41328:539;;;41493:21;;41474:16;:40;;;;41552:21;;41533:16;:40;;;;41627:16;;41608;;:35;;;;:::i;:::-;41592:13;:51;;;;41328:539;;;41703:20;;41684:16;:39;;;;41761:20;;41742:16;:39;;;;41835:16;;41816;;:35;;;;:::i;:::-;41800:13;:51;;;;41328:539;41279:995;;;41935:1;41903:24;:28;41928:2;41903:28;;;;;;;;;;;;;;;;:33;41899:120;;41988:15;41957:24;:28;41982:2;41957:28;;;;;;;;;;;;;;;:46;;;;41899:120;42041:18;;;;;;;;;;;42036:227;;42099:20;;42080:16;:39;;;;42157:20;;42138:16;:39;;;;42231:16;;42212;;:35;;;;:::i;:::-;42196:13;:51;;;;42036:227;41279:995;42287:28;42318:24;42336:4;42318:9;:24::i;:::-;42287:55;;42356:12;42395:18;;42371:20;:42;;42356:57;;42445:7;:35;;;;;42469:11;;;;;;;;;;;42445:35;:61;;;;;42498:8;;;;;;;;;;;42497:9;42445:61;:110;;;;;42524:25;:31;42550:4;42524:31;;;;;;;;;;;;;;;;;;;;;;;;;42523:32;42445:110;:153;;;;;42573:19;:25;42593:4;42573:25;;;;;;;;;;;;;;;;;;;;;;;;;42572:26;42445:153;:194;;;;;42616:19;:23;42636:2;42616:23;;;;;;;;;;;;;;;;;;;;;;;;;42615:24;42445:194;42427:328;;;42677:4;42666:8;;:15;;;;;;;;;;;;;;;;;;42699:10;:8;:10::i;:::-;42738:5;42727:8;;:16;;;;;;;;;;;;;;;;;;42427:328;42768:12;42784:8;;;;;;;;;;;42783:9;42768:24;;42894:19;:25;42914:4;42894:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42923:19;:23;42943:2;42923:23;;;;;;;;;;;;;;;;;;;;;;;;;42894:52;42891:99;;;42973:5;42963:15;;42891:99;43003:12;43107:7;43104:823;;;43158:25;:29;43184:2;43158:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43207:1;43191:13;;:17;43158:50;43154:620;;;43235:34;43265:3;43235:25;43246:13;;43235:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43228:41;;43336:13;;43317:16;;43310:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43288:18;;:61;;;;;;;:::i;:::-;;;;;;;;43416:13;;43397:16;;43390:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43368:18;;:61;;;;;;;:::i;:::-;;;;;;;;43154:620;;;43490:25;:31;43516:4;43490:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43540:1;43525:12;;:16;43490:51;43487:287;;;43569:33;43598:3;43569:24;43580:12;;43569:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43562:40;;43668:12;;43650:15;;43643:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43621:18;;:59;;;;;;;:::i;:::-;;;;;;;;43746:12;;43728:15;;43721:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43699:18;;:59;;;;;;;:::i;:::-;;;;;;;;43487:287;43154:620;43801:1;43794:4;:8;43791:93;;;43826:42;43842:4;43856;43863;43826:15;:42::i;:::-;43791:93;43911:4;43901:14;;;;;:::i;:::-;;;43104:823;43940:33;43956:4;43962:2;43966:6;43940:15;:33::i;:::-;39665:4316;;;;;39552:4429;;;;:::o;18496:193::-;18582:7;18615:1;18610;:6;;18618:12;18602:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18642:9;18658:1;18654;:5;;;;:::i;:::-;18642:17;;18680:1;18673:8;;;18496:193;;;;;:::o;38525:189::-;38642:5;38608:25;:31;38634:4;38608:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38700:5;38666:40;;38694:4;38666:40;;;;;;;;;;;;38525:189;;:::o;13773:575::-;13931:1;13913:20;;:6;:20;;;13905:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14015:1;13994:23;;:9;:23;;;13986:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14071:47;14092:6;14100:9;14111:6;14071:20;:47::i;:::-;14152:71;14174:6;14152:71;;;;;;;;;;;;;;;;;:9;:17;14162:6;14152:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14132:9;:17;14142:6;14132:17;;;;;;;;;;;;;;;:91;;;;14257:32;14282:6;14257:9;:20;14267:9;14257:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14234:9;:20;14244:9;14234:20;;;;;;;;;;;;;;;:55;;;;14322:9;14305:35;;14314:6;14305:35;;;14333:6;14305:35;;;;;;:::i;:::-;;;;;;;;13773:575;;;:::o;45125:1363::-;45164:23;45190:24;45208:4;45190:9;:24::i;:::-;45164:50;;45225:25;45274:18;;45253;;:39;;;;:::i;:::-;45225:67;;45303:12;45351:1;45332:15;:20;:46;;;;45377:1;45356:17;:22;45332:46;45329:60;;;45381:7;;;;;45329:60;45444:2;45423:18;;:23;;;;:::i;:::-;45405:15;:41;45402:111;;;45499:2;45478:18;;:23;;;;:::i;:::-;45460:41;;45402:111;45575:23;45660:1;45640:17;45619:18;;45601:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45575:86;;45672:26;45701:36;45721:15;45701;:19;;:36;;;;:::i;:::-;45672:65;;45751:25;45779:21;45751:49;;45814:36;45831:18;45814:16;:36::i;:::-;45865:18;45886:44;45912:17;45886:21;:25;;:44;;;;:::i;:::-;45865:65;;45944:23;45970:57;46009:17;45970:34;45985:18;;45970:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45944:83;;46038:23;46077:15;46064:10;:28;;;;:::i;:::-;46038:54;;46130:1;46109:18;:22;;;;46163:1;46142:18;:22;;;;46202:1;46184:15;:19;:42;;;;;46225:1;46207:15;:19;46184:42;46181:210;;;46242:46;46255:15;46272;46242:12;:46::i;:::-;46308:71;46323:18;46343:15;46360:18;;46308:71;;;;;;;;:::i;:::-;;;;;;;;46181:210;46425:15;;;;;;;;;;;46417:29;;46454:21;46417:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46404:76;;;;;45153:1335;;;;;;;;;45125:1363;:::o;18949:473::-;19007:7;19257:1;19252;:6;19248:47;;19282:1;19275:8;;;;19248:47;19308:9;19324:1;19320;:5;;;;:::i;:::-;19308:17;;19353:1;19348;19344;:5;;;;:::i;:::-;:10;19336:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19413:1;19406:8;;;18949:473;;;;;:::o;19899:132::-;19957:7;19984:39;19988:1;19991;19984:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19977:46;;19899:132;;;;:::o;17194:125::-;;;;:::o;18056:136::-;18114:7;18141:43;18145:1;18148;18141:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18134:50;;18056:136;;;;:::o;43990:597::-;44119:21;44157:1;44143:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44119:40;;44188:4;44170;44175:1;44170:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44214:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44204:4;44209:1;44204:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44250:62;44267:4;44282:15;44300:11;44250:8;:62::i;:::-;44352:15;:66;;;44433:11;44459:1;44503:4;44530;44550:15;44352:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44045:542;43990:597;:::o;44596:520::-;44744:62;44761:4;44776:15;44794:11;44744:8;:62::i;:::-;44850:15;:31;;;44889:9;44922:4;44942:11;44968:1;45011;45062:4;45082:15;44850:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44596:520;;:::o;20528:279::-;20614:7;20646:1;20642;:5;20649:12;20634:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20673:9;20689:1;20685;:5;;;;:::i;:::-;20673:17;;20798:1;20791:8;;;20528:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:1057::-;5550:6;5558;5566;5574;5582;5590;5639:3;5627:9;5618:7;5614:23;5610:33;5607:120;;;5646:79;;:::i;:::-;5607:120;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;6021:2;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5992:118;6149:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6120:118;6277:3;6304:53;6349:7;6340:6;6329:9;6325:22;6304:53;:::i;:::-;6294:63;;6248:119;6406:3;6433:53;6478:7;6469:6;6458:9;6454:22;6433:53;:::i;:::-;6423:63;;6377:119;5446:1057;;;;;;;;:::o;6509:619::-;6586:6;6594;6602;6651:2;6639:9;6630:7;6626:23;6622:32;6619:119;;;6657:79;;:::i;:::-;6619:119;6777:1;6802:53;6847:7;6838:6;6827:9;6823:22;6802:53;:::i;:::-;6792:63;;6748:117;6904:2;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6875:118;7032:2;7058:53;7103:7;7094:6;7083:9;7079:22;7058:53;:::i;:::-;7048:63;;7003:118;6509:619;;;;;:::o;7134:86::-;7169:7;7209:4;7202:5;7198:16;7187:27;;7134:86;;;:::o;7226:112::-;7309:22;7325:5;7309:22;:::i;:::-;7304:3;7297:35;7226:112;;:::o;7344:214::-;7433:4;7471:2;7460:9;7456:18;7448:26;;7484:67;7548:1;7537:9;7533:17;7524:6;7484:67;:::i;:::-;7344:214;;;;:::o;7564:118::-;7651:24;7669:5;7651:24;:::i;:::-;7646:3;7639:37;7564:118;;:::o;7688:222::-;7781:4;7819:2;7808:9;7804:18;7796:26;;7832:71;7900:1;7889:9;7885:17;7876:6;7832:71;:::i;:::-;7688:222;;;;:::o;7916:474::-;7984:6;7992;8041:2;8029:9;8020:7;8016:23;8012:32;8009:119;;;8047:79;;:::i;:::-;8009:119;8167:1;8192:53;8237:7;8228:6;8217:9;8213:22;8192:53;:::i;:::-;8182:63;;8138:117;8294:2;8320:53;8365:7;8356:6;8345:9;8341:22;8320:53;:::i;:::-;8310:63;;8265:118;7916:474;;;;;:::o;8396:116::-;8466:21;8481:5;8466:21;:::i;:::-;8459:5;8456:32;8446:60;;8502:1;8499;8492:12;8446:60;8396:116;:::o;8518:133::-;8561:5;8599:6;8586:20;8577:29;;8615:30;8639:5;8615:30;:::i;:::-;8518:133;;;;:::o;8657:468::-;8722:6;8730;8779:2;8767:9;8758:7;8754:23;8750:32;8747:119;;;8785:79;;:::i;:::-;8747:119;8905:1;8930:53;8975:7;8966:6;8955:9;8951:22;8930:53;:::i;:::-;8920:63;;8876:117;9032:2;9058:50;9100:7;9091:6;9080:9;9076:22;9058:50;:::i;:::-;9048:60;;9003:115;8657:468;;;;;:::o;9131:323::-;9187:6;9236:2;9224:9;9215:7;9211:23;9207:32;9204:119;;;9242:79;;:::i;:::-;9204:119;9362:1;9387:50;9429:7;9420:6;9409:9;9405:22;9387:50;:::i;:::-;9377:60;;9333:114;9131:323;;;;:::o;9460:117::-;9569:1;9566;9559:12;9583:117;9692:1;9689;9682:12;9706:117;9815:1;9812;9805:12;9846:568;9919:8;9929:6;9979:3;9972:4;9964:6;9960:17;9956:27;9946:122;;9987:79;;:::i;:::-;9946:122;10100:6;10087:20;10077:30;;10130:18;10122:6;10119:30;10116:117;;;10152:79;;:::i;:::-;10116:117;10266:4;10258:6;10254:17;10242:29;;10320:3;10312:4;10304:6;10300:17;10290:8;10286:32;10283:41;10280:128;;;10327:79;;:::i;:::-;10280:128;9846:568;;;;;:::o;10437:::-;10510:8;10520:6;10570:3;10563:4;10555:6;10551:17;10547:27;10537:122;;10578:79;;:::i;:::-;10537:122;10691:6;10678:20;10668:30;;10721:18;10713:6;10710:30;10707:117;;;10743:79;;:::i;:::-;10707:117;10857:4;10849:6;10845:17;10833:29;;10911:3;10903:4;10895:6;10891:17;10881:8;10877:32;10874:41;10871:128;;;10918:79;;:::i;:::-;10871:128;10437:568;;;;;:::o;11011:934::-;11133:6;11141;11149;11157;11206:2;11194:9;11185:7;11181:23;11177:32;11174:119;;;11212:79;;:::i;:::-;11174:119;11360:1;11349:9;11345:17;11332:31;11390:18;11382:6;11379:30;11376:117;;;11412:79;;:::i;:::-;11376:117;11525:80;11597:7;11588:6;11577:9;11573:22;11525:80;:::i;:::-;11507:98;;;;11303:312;11682:2;11671:9;11667:18;11654:32;11713:18;11705:6;11702:30;11699:117;;;11735:79;;:::i;:::-;11699:117;11848:80;11920:7;11911:6;11900:9;11896:22;11848:80;:::i;:::-;11830:98;;;;11625:313;11011:934;;;;;;;:::o;11951:474::-;12019:6;12027;12076:2;12064:9;12055:7;12051:23;12047:32;12044:119;;;12082:79;;:::i;:::-;12044:119;12202:1;12227:53;12272:7;12263:6;12252:9;12248:22;12227:53;:::i;:::-;12217:63;;12173:117;12329:2;12355:53;12400:7;12391:6;12380:9;12376:22;12355:53;:::i;:::-;12345:63;;12300:118;11951:474;;;;;:::o;12431:180::-;12479:77;12476:1;12469:88;12576:4;12573:1;12566:15;12600:4;12597:1;12590:15;12617:320;12661:6;12698:1;12692:4;12688:12;12678:22;;12745:1;12739:4;12735:12;12766:18;12756:81;;12822:4;12814:6;12810:17;12800:27;;12756:81;12884:2;12876:6;12873:14;12853:18;12850:38;12847:84;;12903:18;;:::i;:::-;12847:84;12668:269;12617:320;;;:::o;12943:182::-;13083:34;13079:1;13071:6;13067:14;13060:58;12943:182;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13131:366;;;:::o;13503:419::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13756:9;13750:4;13746:20;13742:1;13731:9;13727:17;13720:47;13784:131;13910:4;13784:131;:::i;:::-;13776:139;;13503:419;;;:::o;13928:180::-;13976:77;13973:1;13966:88;14073:4;14070:1;14063:15;14097:4;14094:1;14087:15;14114:410;14154:7;14177:20;14195:1;14177:20;:::i;:::-;14172:25;;14211:20;14229:1;14211:20;:::i;:::-;14206:25;;14266:1;14263;14259:9;14288:30;14306:11;14288:30;:::i;:::-;14277:41;;14467:1;14458:7;14454:15;14451:1;14448:22;14428:1;14421:9;14401:83;14378:139;;14497:18;;:::i;:::-;14378:139;14162:362;14114:410;;;;:::o;14530:180::-;14578:77;14575:1;14568:88;14675:4;14672:1;14665:15;14699:4;14696:1;14689:15;14716:185;14756:1;14773:20;14791:1;14773:20;:::i;:::-;14768:25;;14807:20;14825:1;14807:20;:::i;:::-;14802:25;;14846:1;14836:35;;14851:18;;:::i;:::-;14836:35;14893:1;14890;14886:9;14881:14;;14716:185;;;;:::o;14907:234::-;15047:34;15043:1;15035:6;15031:14;15024:58;15116:17;15111:2;15103:6;15099:15;15092:42;14907:234;:::o;15147:366::-;15289:3;15310:67;15374:2;15369:3;15310:67;:::i;:::-;15303:74;;15386:93;15475:3;15386:93;:::i;:::-;15504:2;15499:3;15495:12;15488:19;;15147:366;;;:::o;15519:419::-;15685:4;15723:2;15712:9;15708:18;15700:26;;15772:9;15766:4;15762:20;15758:1;15747:9;15743:17;15736:47;15800:131;15926:4;15800:131;:::i;:::-;15792:139;;15519:419;;;:::o;15944:191::-;15984:3;16003:20;16021:1;16003:20;:::i;:::-;15998:25;;16037:20;16055:1;16037:20;:::i;:::-;16032:25;;16080:1;16077;16073:9;16066:16;;16101:3;16098:1;16095:10;16092:36;;;16108:18;;:::i;:::-;16092:36;15944:191;;;;:::o;16141:179::-;16281:31;16277:1;16269:6;16265:14;16258:55;16141:179;:::o;16326:366::-;16468:3;16489:67;16553:2;16548:3;16489:67;:::i;:::-;16482:74;;16565:93;16654:3;16565:93;:::i;:::-;16683:2;16678:3;16674:12;16667:19;;16326:366;;;:::o;16698:419::-;16864:4;16902:2;16891:9;16887:18;16879:26;;16951:9;16945:4;16941:20;16937:1;16926:9;16922:17;16915:47;16979:131;17105:4;16979:131;:::i;:::-;16971:139;;16698:419;;;:::o;17123:244::-;17263:34;17259:1;17251:6;17247:14;17240:58;17332:27;17327:2;17319:6;17315:15;17308:52;17123:244;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:102;18398:8;18445:5;18442:1;18438:13;18417:34;;18356:102;;;:::o;18464:848::-;18525:5;18532:4;18556:6;18547:15;;18580:5;18571:14;;18594:712;18615:1;18605:8;18602:15;18594:712;;;18710:4;18705:3;18701:14;18695:4;18692:24;18689:50;;;18719:18;;:::i;:::-;18689:50;18769:1;18759:8;18755:16;18752:451;;;19184:4;19177:5;19173:16;19164:25;;18752:451;19234:4;19228;19224:15;19216:23;;19264:32;19287:8;19264:32;:::i;:::-;19252:44;;18594:712;;;18464:848;;;;;;;:::o;19318:1073::-;19372:5;19563:8;19553:40;;19584:1;19575:10;;19586:5;;19553:40;19612:4;19602:36;;19629:1;19620:10;;19631:5;;19602:36;19698:4;19746:1;19741:27;;;;19782:1;19777:191;;;;19691:277;;19741:27;19759:1;19750:10;;19761:5;;;19777:191;19822:3;19812:8;19809:17;19806:43;;;19829:18;;:::i;:::-;19806:43;19878:8;19875:1;19871:16;19862:25;;19913:3;19906:5;19903:14;19900:40;;;19920:18;;:::i;:::-;19900:40;19953:5;;;19691:277;;20077:2;20067:8;20064:16;20058:3;20052:4;20049:13;20045:36;20027:2;20017:8;20014:16;20009:2;20003:4;20000:12;19996:35;19980:111;19977:246;;;20133:8;20127:4;20123:19;20114:28;;20168:3;20161:5;20158:14;20155:40;;;20175:18;;:::i;:::-;20155:40;20208:5;;19977:246;20248:42;20286:3;20276:8;20270:4;20267:1;20248:42;:::i;:::-;20233:57;;;;20322:4;20317:3;20313:14;20306:5;20303:25;20300:51;;;20331:18;;:::i;:::-;20300:51;20380:4;20373:5;20369:16;20360:25;;19318:1073;;;;;;:::o;20397:281::-;20455:5;20479:23;20497:4;20479:23;:::i;:::-;20471:31;;20523:25;20539:8;20523:25;:::i;:::-;20511:37;;20567:104;20604:66;20594:8;20588:4;20567:104;:::i;:::-;20558:113;;20397:281;;;;:::o;20684:233::-;20723:3;20746:24;20764:5;20746:24;:::i;:::-;20737:33;;20792:66;20785:5;20782:77;20779:103;;20862:18;;:::i;:::-;20779:103;20909:1;20902:5;20898:13;20891:20;;20684:233;;;:::o;20923:223::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:6;21127:2;21119:6;21115:15;21108:31;20923:223;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:240::-;22089:34;22085:1;22077:6;22073:14;22066:58;22158:23;22153:2;22145:6;22141:15;22134:48;21949:240;:::o;22195:366::-;22337:3;22358:67;22422:2;22417:3;22358:67;:::i;:::-;22351:74;;22434:93;22523:3;22434:93;:::i;:::-;22552:2;22547:3;22543:12;22536:19;;22195:366;;;:::o;22567:419::-;22733:4;22771:2;22760:9;22756:18;22748:26;;22820:9;22814:4;22810:20;22806:1;22795:9;22791:17;22784:47;22848:131;22974:4;22848:131;:::i;:::-;22840:139;;22567:419;;;:::o;22992:239::-;23132:34;23128:1;23120:6;23116:14;23109:58;23201:22;23196:2;23188:6;23184:15;23177:47;22992:239;:::o;23237:366::-;23379:3;23400:67;23464:2;23459:3;23400:67;:::i;:::-;23393:74;;23476:93;23565:3;23476:93;:::i;:::-;23594:2;23589:3;23585:12;23578:19;;23237:366;;;:::o;23609:419::-;23775:4;23813:2;23802:9;23798:18;23790:26;;23862:9;23856:4;23852:20;23848:1;23837:9;23833:17;23826:47;23890:131;24016:4;23890:131;:::i;:::-;23882:139;;23609:419;;;:::o;24034:332::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24206:71;24274:1;24263:9;24259:17;24250:6;24206:71;:::i;:::-;24287:72;24355:2;24344:9;24340:18;24331:6;24287:72;:::i;:::-;24034:332;;;;;:::o;24372:137::-;24426:5;24457:6;24451:13;24442:22;;24473:30;24497:5;24473:30;:::i;:::-;24372:137;;;;:::o;24515:345::-;24582:6;24631:2;24619:9;24610:7;24606:23;24602:32;24599:119;;;24637:79;;:::i;:::-;24599:119;24757:1;24782:61;24835:7;24826:6;24815:9;24811:22;24782:61;:::i;:::-;24772:71;;24728:125;24515:345;;;;:::o;24866:225::-;25006:34;25002:1;24994:6;24990:14;24983:58;25075:8;25070:2;25062:6;25058:15;25051:33;24866:225;:::o;25097:366::-;25239:3;25260:67;25324:2;25319:3;25260:67;:::i;:::-;25253:74;;25336:93;25425:3;25336:93;:::i;:::-;25454:2;25449:3;25445:12;25438:19;;25097:366;;;:::o;25469:419::-;25635:4;25673:2;25662:9;25658:18;25650:26;;25722:9;25716:4;25712:20;25708:1;25697:9;25693:17;25686:47;25750:131;25876:4;25750:131;:::i;:::-;25742:139;;25469:419;;;:::o;25894:177::-;26034:29;26030:1;26022:6;26018:14;26011:53;25894:177;:::o;26077:366::-;26219:3;26240:67;26304:2;26299:3;26240:67;:::i;:::-;26233:74;;26316:93;26405:3;26316:93;:::i;:::-;26434:2;26429:3;26425:12;26418:19;;26077:366;;;:::o;26449:419::-;26615:4;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26449:419;;;:::o;26874:223::-;27014:34;27010:1;27002:6;26998:14;26991:58;27083:6;27078:2;27070:6;27066:15;27059:31;26874:223;:::o;27103:366::-;27245:3;27266:67;27330:2;27325:3;27266:67;:::i;:::-;27259:74;;27342:93;27431:3;27342:93;:::i;:::-;27460:2;27455:3;27451:12;27444:19;;27103:366;;;:::o;27475:419::-;27641:4;27679:2;27668:9;27664:18;27656:26;;27728:9;27722:4;27718:20;27714:1;27703:9;27699:17;27692:47;27756:131;27882:4;27756:131;:::i;:::-;27748:139;;27475:419;;;:::o;27900:221::-;28040:34;28036:1;28028:6;28024:14;28017:58;28109:4;28104:2;28096:6;28092:15;28085:29;27900:221;:::o;28127:366::-;28269:3;28290:67;28354:2;28349:3;28290:67;:::i;:::-;28283:74;;28366:93;28455:3;28366:93;:::i;:::-;28484:2;28479:3;28475:12;28468:19;;28127:366;;;:::o;28499:419::-;28665:4;28703:2;28692:9;28688:18;28680:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28780:131;28906:4;28780:131;:::i;:::-;28772:139;;28499:419;;;:::o;28924:224::-;29064:34;29060:1;29052:6;29048:14;29041:58;29133:7;29128:2;29120:6;29116:15;29109:32;28924:224;:::o;29154:366::-;29296:3;29317:67;29381:2;29376:3;29317:67;:::i;:::-;29310:74;;29393:93;29482:3;29393:93;:::i;:::-;29511:2;29506:3;29502:12;29495:19;;29154:366;;;:::o;29526:419::-;29692:4;29730:2;29719:9;29715:18;29707:26;;29779:9;29773:4;29769:20;29765:1;29754:9;29750:17;29743:47;29807:131;29933:4;29807:131;:::i;:::-;29799:139;;29526:419;;;:::o;29951:222::-;30091:34;30087:1;30079:6;30075:14;30068:58;30160:5;30155:2;30147:6;30143:15;30136:30;29951:222;:::o;30179:366::-;30321:3;30342:67;30406:2;30401:3;30342:67;:::i;:::-;30335:74;;30418:93;30507:3;30418:93;:::i;:::-;30536:2;30531:3;30527:12;30520:19;;30179:366;;;:::o;30551:419::-;30717:4;30755:2;30744:9;30740:18;30732:26;;30804:9;30798:4;30794:20;30790:1;30779:9;30775:17;30768:47;30832:131;30958:4;30832:131;:::i;:::-;30824:139;;30551:419;;;:::o;30976:172::-;31116:24;31112:1;31104:6;31100:14;31093:48;30976:172;:::o;31154:366::-;31296:3;31317:67;31381:2;31376:3;31317:67;:::i;:::-;31310:74;;31393:93;31482:3;31393:93;:::i;:::-;31511:2;31506:3;31502:12;31495:19;;31154:366;;;:::o;31526:419::-;31692:4;31730:2;31719:9;31715:18;31707:26;;31779:9;31773:4;31769:20;31765:1;31754:9;31750:17;31743:47;31807:131;31933:4;31807:131;:::i;:::-;31799:139;;31526:419;;;:::o;31951:240::-;32091:34;32087:1;32079:6;32075:14;32068:58;32160:23;32155:2;32147:6;32143:15;32136:48;31951:240;:::o;32197:366::-;32339:3;32360:67;32424:2;32419:3;32360:67;:::i;:::-;32353:74;;32436:93;32525:3;32436:93;:::i;:::-;32554:2;32549:3;32545:12;32538:19;;32197:366;;;:::o;32569:419::-;32735:4;32773:2;32762:9;32758:18;32750:26;;32822:9;32816:4;32812:20;32808:1;32797:9;32793:17;32786:47;32850:131;32976:4;32850:131;:::i;:::-;32842:139;;32569:419;;;:::o;32994:169::-;33134:21;33130:1;33122:6;33118:14;33111:45;32994:169;:::o;33169:366::-;33311:3;33332:67;33396:2;33391:3;33332:67;:::i;:::-;33325:74;;33408:93;33497:3;33408:93;:::i;:::-;33526:2;33521:3;33517:12;33510:19;;33169:366;;;:::o;33541:419::-;33707:4;33745:2;33734:9;33730:18;33722:26;;33794:9;33788:4;33784:20;33780:1;33769:9;33765:17;33758:47;33822:131;33948:4;33822:131;:::i;:::-;33814:139;;33541:419;;;:::o;33966:241::-;34106:34;34102:1;34094:6;34090:14;34083:58;34175:24;34170:2;34162:6;34158:15;34151:49;33966:241;:::o;34213:366::-;34355:3;34376:67;34440:2;34435:3;34376:67;:::i;:::-;34369:74;;34452:93;34541:3;34452:93;:::i;:::-;34570:2;34565:3;34561:12;34554:19;;34213:366;;;:::o;34585:419::-;34751:4;34789:2;34778:9;34774:18;34766:26;;34838:9;34832:4;34828:20;34824:1;34813:9;34809:17;34802:47;34866:131;34992:4;34866:131;:::i;:::-;34858:139;;34585:419;;;:::o;35010:194::-;35050:4;35070:20;35088:1;35070:20;:::i;:::-;35065:25;;35104:20;35122:1;35104:20;:::i;:::-;35099:25;;35148:1;35145;35141:9;35133:17;;35172:1;35166:4;35163:11;35160:37;;;35177:18;;:::i;:::-;35160:37;35010:194;;;;:::o;35210:442::-;35359:4;35397:2;35386:9;35382:18;35374:26;;35410:71;35478:1;35467:9;35463:17;35454:6;35410:71;:::i;:::-;35491:72;35559:2;35548:9;35544:18;35535:6;35491:72;:::i;:::-;35573;35641:2;35630:9;35626:18;35617:6;35573:72;:::i;:::-;35210:442;;;;;;:::o;35658:147::-;35759:11;35796:3;35781:18;;35658:147;;;;:::o;35811:114::-;;:::o;35931:398::-;36090:3;36111:83;36192:1;36187:3;36111:83;:::i;:::-;36104:90;;36203:93;36292:3;36203:93;:::i;:::-;36321:1;36316:3;36312:11;36305:18;;35931:398;;;:::o;36335:379::-;36519:3;36541:147;36684:3;36541:147;:::i;:::-;36534:154;;36705:3;36698:10;;36335:379;;;:::o;36720:220::-;36860:34;36856:1;36848:6;36844:14;36837:58;36929:3;36924:2;36916:6;36912:15;36905:28;36720:220;:::o;36946:366::-;37088:3;37109:67;37173:2;37168:3;37109:67;:::i;:::-;37102:74;;37185:93;37274:3;37185:93;:::i;:::-;37303:2;37298:3;37294:12;37287:19;;36946:366;;;:::o;37318:419::-;37484:4;37522:2;37511:9;37507:18;37499:26;;37571:9;37565:4;37561:20;37557:1;37546:9;37542:17;37535:47;37599:131;37725:4;37599:131;:::i;:::-;37591:139;;37318:419;;;:::o;37743:180::-;37791:77;37788:1;37781:88;37888:4;37885:1;37878:15;37912:4;37909:1;37902:15;37929:143;37986:5;38017:6;38011:13;38002:22;;38033:33;38060:5;38033:33;:::i;:::-;37929:143;;;;:::o;38078:351::-;38148:6;38197:2;38185:9;38176:7;38172:23;38168:32;38165:119;;;38203:79;;:::i;:::-;38165:119;38323:1;38348:64;38404:7;38395:6;38384:9;38380:22;38348:64;:::i;:::-;38338:74;;38294:128;38078:351;;;;:::o;38435:85::-;38480:7;38509:5;38498:16;;38435:85;;;:::o;38526:158::-;38584:9;38617:61;38635:42;38644:32;38670:5;38644:32;:::i;:::-;38635:42;:::i;:::-;38617:61;:::i;:::-;38604:74;;38526:158;;;:::o;38690:147::-;38785:45;38824:5;38785:45;:::i;:::-;38780:3;38773:58;38690:147;;:::o;38843:114::-;38910:6;38944:5;38938:12;38928:22;;38843:114;;;:::o;38963:184::-;39062:11;39096:6;39091:3;39084:19;39136:4;39131:3;39127:14;39112:29;;38963:184;;;;:::o;39153:132::-;39220:4;39243:3;39235:11;;39273:4;39268:3;39264:14;39256:22;;39153:132;;;:::o;39291:108::-;39368:24;39386:5;39368:24;:::i;:::-;39363:3;39356:37;39291:108;;:::o;39405:179::-;39474:10;39495:46;39537:3;39529:6;39495:46;:::i;:::-;39573:4;39568:3;39564:14;39550:28;;39405:179;;;;:::o;39590:113::-;39660:4;39692;39687:3;39683:14;39675:22;;39590:113;;;:::o;39739:732::-;39858:3;39887:54;39935:5;39887:54;:::i;:::-;39957:86;40036:6;40031:3;39957:86;:::i;:::-;39950:93;;40067:56;40117:5;40067:56;:::i;:::-;40146:7;40177:1;40162:284;40187:6;40184:1;40181:13;40162:284;;;40263:6;40257:13;40290:63;40349:3;40334:13;40290:63;:::i;:::-;40283:70;;40376:60;40429:6;40376:60;:::i;:::-;40366:70;;40222:224;40209:1;40206;40202:9;40197:14;;40162:284;;;40166:14;40462:3;40455:10;;39863:608;;;39739:732;;;;:::o;40477:831::-;40740:4;40778:3;40767:9;40763:19;40755:27;;40792:71;40860:1;40849:9;40845:17;40836:6;40792:71;:::i;:::-;40873:80;40949:2;40938:9;40934:18;40925:6;40873:80;:::i;:::-;41000:9;40994:4;40990:20;40985:2;40974:9;40970:18;40963:48;41028:108;41131:4;41122:6;41028:108;:::i;:::-;41020:116;;41146:72;41214:2;41203:9;41199:18;41190:6;41146:72;:::i;:::-;41228:73;41296:3;41285:9;41281:19;41272:6;41228:73;:::i;:::-;40477:831;;;;;;;;:::o;41314:807::-;41563:4;41601:3;41590:9;41586:19;41578:27;;41615:71;41683:1;41672:9;41668:17;41659:6;41615:71;:::i;:::-;41696:72;41764:2;41753:9;41749:18;41740:6;41696:72;:::i;:::-;41778:80;41854:2;41843:9;41839:18;41830:6;41778:80;:::i;:::-;41868;41944:2;41933:9;41929:18;41920:6;41868:80;:::i;:::-;41958:73;42026:3;42015:9;42011:19;42002:6;41958:73;:::i;:::-;42041;42109:3;42098:9;42094:19;42085:6;42041:73;:::i;:::-;41314:807;;;;;;;;;:::o;42127:143::-;42184:5;42215:6;42209:13;42200:22;;42231:33;42258:5;42231:33;:::i;:::-;42127:143;;;;:::o;42276:663::-;42364:6;42372;42380;42429:2;42417:9;42408:7;42404:23;42400:32;42397:119;;;42435:79;;:::i;:::-;42397:119;42555:1;42580:64;42636:7;42627:6;42616:9;42612:22;42580:64;:::i;:::-;42570:74;;42526:128;42693:2;42719:64;42775:7;42766:6;42755:9;42751:22;42719:64;:::i;:::-;42709:74;;42664:129;42832:2;42858:64;42914:7;42905:6;42894:9;42890:22;42858:64;:::i;:::-;42848:74;;42803:129;42276:663;;;;;:::o
Swarm Source
ipfs://ca703f160e5b209c54b72900789e72d98277709e4dd5e54e2286be641f38eba8
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.