Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
MEME
Overview
Max Total Supply
80,000,000,000 LAMBOINU
Holders
83 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
LAMBOINU
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-18 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _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 LAMBOINU is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public partnerWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public tradingActiveBlock; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyPartnerFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellPartnerFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForPartner; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event partnerWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event BuyBackTriggered(uint256 amount); constructor() ERC20("Lamborghinu", "LAMBOINU") { address newOwner = address(msg.sender); 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 = 10; uint256 _buyLiquidityFee = 3; uint256 _buyPartnerFee = 1; // 30% sell tax to start, will be reduced over time. uint256 _sellMarketingFee = 10; uint256 _sellLiquidityFee = 4; uint256 _sellPartnerFee = 1; uint256 totalSupply = 80000000000 * 1e9; maxTransactionAmount = 800000000; // 1% maxTransactionAmountTxn swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet maxWallet = 800000000; // 1% max wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyPartnerFee = _buyPartnerFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyPartnerFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellPartnerFee = _sellPartnerFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellPartnerFee; marketingWallet = address(0xA295CDa8cFe82411B008e935e553C93F334216F4); // set as marketing wallet partnerWallet = address(0x1d9a09C2E58E16F4b076a07D6d7936a5e353B4F0); // set as buyback wallet // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(partnerWallet, true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(partnerWallet, 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(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**9); } function updateMaxwalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.5%"); maxWallet = newNum * (10**9); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _partnerFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyPartnerFee = _partnerFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyPartnerFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _partnerFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellPartnerFee = _partnerFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellPartnerFee; require(sellTotalFees <= 15, "Must keep fees at 30% 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 updatepartnerWallet(address newWallet) external onlyOwner { emit partnerWalletUpdated(newWallet, partnerWallet); partnerWallet = newWallet; } 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(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ if(tradingActiveBlock + 2 >= block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){ fees = amount.mul(99).div(100); tokensForLiquidity += fees * 33 / 99; tokensForPartner += fees * 33 / 99; tokensForMarketing += fees * 33 / 99; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForPartner += fees * sellPartnerFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForPartner += fees * buyPartnerFee / 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 deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForPartner; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // 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 ethForBuyBack = ethBalance.mul(tokensForPartner).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForPartner = 0; (bool success,) = address(marketingWallet).call{value: ethForMarketing}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // keep leftover ETH for buyback (success,) = address(partnerWallet).call{value: address(this).balance}(""); } // useful for buybacks or to reclaim any BNB on the contract in a way that helps holders. function buyBackTokens(uint256 bnbAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); emit BuyBackTriggered(bnbAmountInWei); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"partnerWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnbAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","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":"buyPartnerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"sellPartnerFee","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":[],"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":"tokensForPartner","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_partnerFee","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":"updateMaxAmount","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":"_partnerFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatepartnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f4c616d626f726768696e750000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4c414d424f494e5500000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000da5565b5080600490805190602001906200011b92919062000da5565b505050600062000130620006c660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000200816001620006ce60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b6919062000ebf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031957600080fd5b505afa1580156200032e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000354919062000ebf565b6040518363ffffffff1660e01b81526004016200037392919062000f02565b602060405180830381600087803b1580156200038e57600080fd5b505af1158015620003a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c9919062000ebf565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200041160a0516001620006ce60201b60201c565b6200042660a0516001620007cb60201b60201c565b6000600a90506000600390506000600190506000600a905060006004905060006001905060006804563918244f4000009050632faf080060088190555061271060058262000475919062000f68565b62000481919062000ff8565b600981905550632faf0800600a81905550866010819055508560118190555084601281905550601254601154601054620004bc919062001030565b620004c8919062001030565b600f81905550836014819055508260158190555081601681905550601654601554601454620004f8919062001030565b62000504919062001030565b60138190555073a295cda8cfe82411b008e935e553c93f334216f4600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731d9a09c2e58e16f4b076a07d6d7936a5e353b4f0600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c78960016200086c60201b60201c565b620005da3060016200086c60201b60201c565b620005ef61dead60016200086c60201b60201c565b62000624600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086c60201b60201c565b62000637896001620006ce60201b60201c565b6200064a306001620006ce60201b60201c565b6200067f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ce60201b60201c565b6200069461dead6001620006ce60201b60201c565b620006a68982620009b960201b60201c565b620006b78962000b6860201b60201c565b50505050505050505062001359565b600033905090565b620006de620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076790620010ee565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200087c620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200090e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090590620010ee565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ad91906200112d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a23906200119a565b60405180910390fd5b62000a406000838362000d3d60201b60201c565b62000a5c8160025462000d4260201b6200290e1790919060201c565b60028190555062000aba816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d4260201b6200290e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b5c9190620011cd565b60405180910390a35050565b62000b78620006c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0190620010ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c749062001260565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000d53919062001030565b90508381101562000d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9290620012d2565b60405180910390fd5b8091505092915050565b82805462000db39062001323565b90600052602060002090601f01602090048101928262000dd7576000855562000e23565b82601f1062000df257805160ff191683800117855562000e23565b8280016001018555821562000e23579182015b8281111562000e2257825182559160200191906001019062000e05565b5b50905062000e32919062000e36565b5090565b5b8082111562000e5157600081600090555060010162000e37565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e878262000e5a565b9050919050565b62000e998162000e7a565b811462000ea557600080fd5b50565b60008151905062000eb98162000e8e565b92915050565b60006020828403121562000ed85762000ed762000e55565b5b600062000ee88482850162000ea8565b91505092915050565b62000efc8162000e7a565b82525050565b600060408201905062000f19600083018562000ef1565b62000f28602083018462000ef1565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f758262000f2f565b915062000f828362000f2f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fbe5762000fbd62000f39565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010058262000f2f565b9150620010128362000f2f565b92508262001025576200102462000fc9565b5b828204905092915050565b60006200103d8262000f2f565b91506200104a8362000f2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001082576200108162000f39565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010d66020836200108d565b9150620010e3826200109e565b602082019050919050565b600060208201905081810360008301526200110981620010c7565b9050919050565b60008115159050919050565b620011278162001110565b82525050565b60006020820190506200114460008301846200111c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001182601f836200108d565b91506200118f826200114a565b602082019050919050565b60006020820190508181036000830152620011b58162001173565b9050919050565b620011c78162000f2f565b82525050565b6000602082019050620011e46000830184620011bc565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012486026836200108d565b91506200125582620011ea565b604082019050919050565b600060208201905081810360008301526200127b8162001239565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012ba601b836200108d565b9150620012c78262001282565b602082019050919050565b60006020820190508181036000830152620012ed81620012ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200133c57607f821691505b60208210811415620013535762001352620012f4565b5b50919050565b60805160a0516158d0620013c560003960008181611164015281816119850152612ef7015260008181610f63015281816127050152818161284001528181612e9f01528181614113015281816142030152818161422a015281816142c601526142ed01526158d06000f3fe60806040526004361061036f5760003560e01c80638a8c523c116101c6578063c876d0b9116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b14610cc1578063f637434214610cea578063f8b45b0514610d15578063fc155d1d14610d4057610376565b8063e884f26014610c40578063ee40166e14610c6b578063f11a24d314610c9657610376565b8063d85ba063116100d1578063d85ba06314610b84578063dcd3342d14610baf578063dd62ed3e14610bd8578063e2f4560514610c1557610376565b8063c876d0b914610af1578063c8c8ebe414610b1c578063d257b34f14610b4757610376565b8063a9059cbb11610164578063b62496f51161013e578063b62496f514610a37578063bbc0c74214610a74578063c024666814610a9f578063c17b5b8c14610ac857610376565b8063a9059cbb146109a8578063aacebbe3146109e5578063ac1407b414610a0e57610376565b8063924de9b7116101a0578063924de9b7146108ee57806395d89b41146109175780639a7a23d614610942578063a457c2d71461096b57610376565b80638a8c523c146108815780638da5cb5b1461089857806392136913146108c357610376565b80634611fe7e116102a0578063715018a61161023e57806375f0a8741161021857806375f0a874146107d7578063776e47bd146108025780637bce5a041461082d5780638095d5641461085857610376565b8063715018a61461076c578063751039fc146107835780637571336a146107ae57610376565b80634fbee1931161027a5780634fbee1931461069c5780636a486a8e146106d95780636ddd17131461070457806370a082311461072f57610376565b80634611fe7e1461061b57806349bd5a5e146106465780634a62bb651461067157610376565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461054b57806327c8f83514610588578063313ce567146105b357806339509351146105de57610376565b80631a8145bb146104ca5780631ed7830e146104f55780631f3fed8f1461052057610376565b8063106b5da111610349578063106b5da11461040e57806310d5de53146104375780631694505e1461047457806318160ddd1461049f57610376565b8063053ed9991461037b57806306fdde03146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190614427565b60405180910390f35b3480156103b257600080fd5b506103bb610d6f565b6040516103c891906144db565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f3919061458c565b610e01565b60405161040591906145e7565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614602565b610e1f565b005b34801561044357600080fd5b5061045e6004803603810190610459919061462f565b610f41565b60405161046b91906145e7565b60405180910390f35b34801561048057600080fd5b50610489610f61565b60405161049691906146bb565b60405180910390f35b3480156104ab57600080fd5b506104b4610f85565b6040516104c19190614427565b60405180910390f35b3480156104d657600080fd5b506104df610f8f565b6040516104ec9190614427565b60405180910390f35b34801561050157600080fd5b5061050a610f95565b60405161051791906146e5565b60405180910390f35b34801561052c57600080fd5b50610535610fbb565b6040516105429190614427565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190614700565b610fc1565b60405161057f91906145e7565b60405180910390f35b34801561059457600080fd5b5061059d61109a565b6040516105aa91906146e5565b60405180910390f35b3480156105bf57600080fd5b506105c86110a0565b6040516105d5919061476f565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061458c565b6110a9565b60405161061291906145e7565b60405180910390f35b34801561062757600080fd5b5061063061115c565b60405161063d9190614427565b60405180910390f35b34801561065257600080fd5b5061065b611162565b60405161066891906146e5565b60405180910390f35b34801561067d57600080fd5b50610686611186565b60405161069391906145e7565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061462f565b611199565b6040516106d091906145e7565b60405180910390f35b3480156106e557600080fd5b506106ee6111ef565b6040516106fb9190614427565b60405180910390f35b34801561071057600080fd5b506107196111f5565b60405161072691906145e7565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061462f565b611208565b6040516107639190614427565b60405180910390f35b34801561077857600080fd5b50610781611250565b005b34801561078f57600080fd5b506107986113a8565b6040516107a591906145e7565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906147b6565b611463565b005b3480156107e357600080fd5b506107ec611555565b6040516107f991906146e5565b60405180910390f35b34801561080e57600080fd5b5061081761157b565b6040516108249190614427565b60405180910390f35b34801561083957600080fd5b50610842611581565b60405161084f9190614427565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a91906147f6565b611587565b005b34801561088d57600080fd5b506108966116a0565b005b3480156108a457600080fd5b506108ad611776565b6040516108ba91906146e5565b60405180910390f35b3480156108cf57600080fd5b506108d86117a0565b6040516108e59190614427565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190614849565b6117a6565b005b34801561092357600080fd5b5061092c61185a565b60405161093991906144db565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906147b6565b6118ec565b005b34801561097757600080fd5b50610992600480360381019061098d919061458c565b611a20565b60405161099f91906145e7565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca919061458c565b611aed565b6040516109dc91906145e7565b60405180910390f35b3480156109f157600080fd5b50610a0c6004803603810190610a07919061462f565b611b0b565b005b348015610a1a57600080fd5b50610a356004803603810190610a30919061462f565b611c62565b005b348015610a4357600080fd5b50610a5e6004803603810190610a59919061462f565b611db9565b604051610a6b91906145e7565b60405180910390f35b348015610a8057600080fd5b50610a89611dd9565b604051610a9691906145e7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147b6565b611dec565b005b348015610ad457600080fd5b50610aef6004803603810190610aea91906147f6565b611f2c565b005b348015610afd57600080fd5b50610b06612046565b604051610b1391906145e7565b60405180910390f35b348015610b2857600080fd5b50610b31612059565b604051610b3e9190614427565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b699190614602565b61205f565b604051610b7b91906145e7565b60405180910390f35b348015610b9057600080fd5b50610b996121cf565b604051610ba69190614427565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190614602565b6121d5565b005b348015610be457600080fd5b50610bff6004803603810190610bfa9190614876565b6122f7565b604051610c0c9190614427565b60405180910390f35b348015610c2157600080fd5b50610c2a61237e565b604051610c379190614427565b60405180910390f35b348015610c4c57600080fd5b50610c55612384565b604051610c6291906145e7565b60405180910390f35b348015610c7757600080fd5b50610c8061243f565b604051610c8d9190614427565b60405180910390f35b348015610ca257600080fd5b50610cab612445565b604051610cb89190614427565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce3919061462f565b61244b565b005b348015610cf657600080fd5b50610cff612612565b604051610d0c9190614427565b60405180910390f35b348015610d2157600080fd5b50610d2a612618565b604051610d379190614427565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614602565b61261e565b005b60195481565b606060038054610d7e906148e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610daa906148e5565b8015610df75780601f10610dcc57610100808354040283529160200191610df7565b820191906000526020600020905b815481529060010190602001808311610dda57829003601f168201915b5050505050905090565b6000610e15610e0e61296c565b8484612974565b6001905092915050565b610e2761296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614963565b60405180910390fd5b633b9aca006103e86005610ec8610f85565b610ed291906149b2565b610edc9190614a3b565b610ee69190614a3b565b811015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90614ade565b60405180910390fd5b633b9aca0081610f3891906149b2565b60088190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000610fce848484612b3f565b61108f84610fda61296c565b61108a8560405180606001604052806028815260200161584e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104061296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b612974565b600190509392505050565b61dead81565b60006009905090565b60006111526110b661296c565b8461114d85600160006110c761296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290e90919063ffffffff16565b612974565b6001905092915050565b60165481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125861296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614963565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113b261296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890614963565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61146b61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614963565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b60105481565b61158f61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590614963565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116469190614afe565b6116509190614afe565b600f81905550600f8054111561169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290614ba0565b60405180910390fd5b505050565b6116a861296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614963565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117ae61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614963565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611869906148e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611895906148e5565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614963565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614c32565b60405180910390fd5b611a1c828261396d565b5050565b6000611ae3611a2d61296c565b84611ade856040518060600160405280602581526020016158766025913960016000611a5761296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b612974565b6001905092915050565b6000611b01611afa61296c565b8484612b3f565b6001905092915050565b611b1361296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614963565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c6a61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090614963565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167face566a9bbc34b06438fbd60fce33a7190c8931322089b269a5f0adce1827ca260405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611df461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90614963565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2091906145e7565b60405180910390a25050565b611f3461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90614963565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611feb9190614afe565b611ff59190614afe565b601381905550600f6013541115612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614c9e565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60085481565b600061206961296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90614963565b60405180910390fd5b620186a06001612106610f85565b61211091906149b2565b61211a9190614a3b565b82101561215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614d30565b60405180910390fd5b6103e86005612169610f85565b61217391906149b2565b61217d9190614a3b565b8211156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614dc2565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6121dd61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614963565b60405180910390fd5b633b9aca006103e8600561227e610f85565b61228891906149b2565b6122929190614a3b565b61229c9190614a3b565b8110156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614ade565b60405180910390fd5b633b9aca00816122ee91906149b2565b600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061238e61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614963565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b60115481565b61245361296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614963565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990614e54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b61262661296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614963565b60405180910390fd5b6000600267ffffffffffffffff8111156126d2576126d1614e74565b5b6040519080825280602002602001820160405280156127005781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276957600080fd5b505afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a19190614eb8565b816000815181106127b5576127b4614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061280457612803614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016128a1949392919061500d565b6000604051808303818588803b1580156128ba57600080fd5b505af11580156128ce573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516129029190614427565b60405180910390a15050565b600080828461291d9190614afe565b905083811015612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906150a5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90615137565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906151c9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190614427565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061525b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c16906152ed565b60405180910390fd5b6000811415612c3957612c3483836000613a0e565b613904565b600b60009054906101000a900460ff16156132aa57612c56611776565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc45750612c94611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d37575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d505750600560149054906101000a900460ff16155b156132a957600b60019054906101000a900460ff16612e4a57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e0a5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090615359565b60405180910390fd5b5b600e60009054906101000a900460ff161561301257612e67611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612eee57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f4657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130115743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390615411565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b55750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576008548111156130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f6906154a3565b60405180910390fd5b600a5461310b83611208565b826131169190614afe565b1115613157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314e9061550f565b60405180910390fd5b6132a8565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131ff5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324e57600854811115613249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613240906155a1565b60405180910390fd5b6132a7565b600a5461325a83611208565b826132659190614afe565b11156132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d9061550f565b60405180910390fd5b5b5b5b5b60006132b530611208565b9050600060095482101590508080156132da5750600b60029054906101000a900460ff165b80156132f35750600560149054906101000a900460ff16155b80156133495750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561339f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133f55750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613439576001600560146101000a81548160ff02191690831515021790555061341d613ca3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134ef5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134f957600090505b600081156138f457436002600c546135119190614afe565b101580156135bc5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135bb5750601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613682576135e860646135da606388613f6090919063ffffffff16565b613fdb90919063ffffffff16565b905060636021826135f991906149b2565b6136039190614a3b565b601860008282546136149190614afe565b92505081905550606360218261362a91906149b2565b6136349190614a3b565b601960008282546136459190614afe565b92505081905550606360218261365b91906149b2565b6136659190614a3b565b601760008282546136769190614afe565b925050819055506138d0565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136dd57506000601354115b156137aa5761370a60646136fc60135488613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506013546015548261371d91906149b2565b6137279190614a3b565b601860008282546137389190614afe565b925050819055506013546016548261375091906149b2565b61375a9190614a3b565b6019600082825461376b9190614afe565b925050819055506013546014548261378391906149b2565b61378d9190614a3b565b6017600082825461379e9190614afe565b925050819055506138cf565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561380557506000600f54115b156138ce576138326064613824600f5488613f6090919063ffffffff16565b613fdb90919063ffffffff16565b9050600f546011548261384591906149b2565b61384f9190614a3b565b601860008282546138609190614afe565b92505081905550600f546012548261387891906149b2565b6138829190614a3b565b601960008282546138939190614afe565b92505081905550600f54601054826138ab91906149b2565b6138b59190614a3b565b601760008282546138c69190614afe565b925050819055505b5b5b60008111156138e5576138e4873083613a0e565b5b80856138f191906155c1565b94505b6138ff878787613a0e565b505050505b505050565b6000838311158290613951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394891906144db565b60405180910390fd5b506000838561396091906155c1565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a759061525b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae5906152ed565b60405180910390fd5b613af9838383614025565b613b6481604051806060016040528060268152602001615828602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c969190614427565b60405180910390a3505050565b6000613cae30611208565b90506000601954601754601854613cc59190614afe565b613ccf9190614afe565b90506000821480613ce05750600081145b15613cec575050613f5e565b600060028260185485613cff91906149b2565b613d099190614a3b565b613d139190614a3b565b90506000613d2a828561402a90919063ffffffff16565b90506000479050613d3a82614074565b6000613d4f824761402a90919063ffffffff16565b90506000613d7a86613d6c60175485613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506000613da587613d9760195486613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506000818385613db691906155c1565b613dc091906155c1565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613e2290615626565b60006040518083038185875af1925050503d8060008114613e5f576040519150601f19603f3d011682016040523d82523d6000602084013e613e64565b606091505b50509050600088118015613e785750600082115b15613ec557613e8788836142c0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613ebc9392919061563b565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f0b90615626565b60006040518083038185875af1925050503d8060008114613f48576040519150601f19603f3d011682016040523d82523d6000602084013e613f4d565b606091505b505080915050505050505050505050505b565b600080831415613f735760009050613fd5565b60008284613f8191906149b2565b9050828482613f909190614a3b565b14613fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc7906156e4565b60405180910390fd5b809150505b92915050565b600061401d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143ab565b905092915050565b505050565b600061406c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613909565b905092915050565b6000600267ffffffffffffffff81111561409157614090614e74565b5b6040519080825280602002602001820160405280156140bf5781602001602082028036833780820191505090505b50905030816000815181106140d7576140d6614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561417757600080fd5b505afa15801561418b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141af9190614eb8565b816001815181106141c3576141c2614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614228307f000000000000000000000000000000000000000000000000000000000000000084612974565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161428a959493929190615704565b600060405180830381600087803b1580156142a457600080fd5b505af11580156142b8573d6000803e3d6000fd5b505050505050565b6142eb307f000000000000000000000000000000000000000000000000000000000000000084612974565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016143529695949392919061575e565b6060604051808303818588803b15801561436b57600080fd5b505af115801561437f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a491906157d4565b5050505050565b600080831182906143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e991906144db565b60405180910390fd5b50600083856144019190614a3b565b9050809150509392505050565b6000819050919050565b6144218161440e565b82525050565b600060208201905061443c6000830184614418565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561447c578082015181840152602081019050614461565b8381111561448b576000848401525b50505050565b6000601f19601f8301169050919050565b60006144ad82614442565b6144b7818561444d565b93506144c781856020860161445e565b6144d081614491565b840191505092915050565b600060208201905081810360008301526144f581846144a2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452d82614502565b9050919050565b61453d81614522565b811461454857600080fd5b50565b60008135905061455a81614534565b92915050565b6145698161440e565b811461457457600080fd5b50565b60008135905061458681614560565b92915050565b600080604083850312156145a3576145a26144fd565b5b60006145b18582860161454b565b92505060206145c285828601614577565b9150509250929050565b60008115159050919050565b6145e1816145cc565b82525050565b60006020820190506145fc60008301846145d8565b92915050565b600060208284031215614618576146176144fd565b5b600061462684828501614577565b91505092915050565b600060208284031215614645576146446144fd565b5b60006146538482850161454b565b91505092915050565b6000819050919050565b600061468161467c61467784614502565b61465c565b614502565b9050919050565b600061469382614666565b9050919050565b60006146a582614688565b9050919050565b6146b58161469a565b82525050565b60006020820190506146d060008301846146ac565b92915050565b6146df81614522565b82525050565b60006020820190506146fa60008301846146d6565b92915050565b600080600060608486031215614719576147186144fd565b5b60006147278682870161454b565b93505060206147388682870161454b565b925050604061474986828701614577565b9150509250925092565b600060ff82169050919050565b61476981614753565b82525050565b60006020820190506147846000830184614760565b92915050565b614793816145cc565b811461479e57600080fd5b50565b6000813590506147b08161478a565b92915050565b600080604083850312156147cd576147cc6144fd565b5b60006147db8582860161454b565b92505060206147ec858286016147a1565b9150509250929050565b60008060006060848603121561480f5761480e6144fd565b5b600061481d86828701614577565b935050602061482e86828701614577565b925050604061483f86828701614577565b9150509250925092565b60006020828403121561485f5761485e6144fd565b5b600061486d848285016147a1565b91505092915050565b6000806040838503121561488d5761488c6144fd565b5b600061489b8582860161454b565b92505060206148ac8582860161454b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148fd57607f821691505b60208210811415614911576149106148b6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061494d60208361444d565b915061495882614917565b602082019050919050565b6000602082019050818103600083015261497c81614940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149bd8261440e565b91506149c88361440e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0157614a00614983565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a468261440e565b9150614a518361440e565b925082614a6157614a60614a0c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ac8602f8361444d565b9150614ad382614a6c565b604082019050919050565b60006020820190508181036000830152614af781614abb565b9050919050565b6000614b098261440e565b9150614b148361440e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b4957614b48614983565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614b8a601d8361444d565b9150614b9582614b54565b602082019050919050565b60006020820190508181036000830152614bb981614b7d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614c1c60398361444d565b9150614c2782614bc0565b604082019050919050565b60006020820190508181036000830152614c4b81614c0f565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614c88601d8361444d565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614d1a60358361444d565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614dac60348361444d565b9150614db782614d50565b604082019050919050565b60006020820190508181036000830152614ddb81614d9f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e3e60268361444d565b9150614e4982614de2565b604082019050919050565b60006020820190508181036000830152614e6d81614e31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614eb281614534565b92915050565b600060208284031215614ece57614ecd6144fd565b5b6000614edc84828501614ea3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614f39614f34614f2f84614f14565b61465c565b61440e565b9050919050565b614f4981614f1e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f8481614522565b82525050565b6000614f968383614f7b565b60208301905092915050565b6000602082019050919050565b6000614fba82614f4f565b614fc48185614f5a565b9350614fcf83614f6b565b8060005b83811015615000578151614fe78882614f8a565b9750614ff283614fa2565b925050600181019050614fd3565b5085935050505092915050565b60006080820190506150226000830187614f40565b81810360208301526150348186614faf565b905061504360408301856146d6565b6150506060830184614418565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061508f601b8361444d565b915061509a82615059565b602082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061512160248361444d565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151b360228361444d565b91506151be82615157565b604082019050919050565b600060208201905081810360008301526151e2816151a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061524560258361444d565b9150615250826151e9565b604082019050919050565b6000602082019050818103600083015261527481615238565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152d760238361444d565b91506152e28261527b565b604082019050919050565b60006020820190508181036000830152615306816152ca565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061534360168361444d565b915061534e8261530d565b602082019050919050565b6000602082019050818103600083015261537281615336565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006153fb60498361444d565b915061540682615379565b606082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061548d60358361444d565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006154f960138361444d565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061558b60368361444d565b91506155968261552f565b604082019050919050565b600060208201905081810360008301526155ba8161557e565b9050919050565b60006155cc8261440e565b91506155d78361440e565b9250828210156155ea576155e9614983565b5b828203905092915050565b600081905092915050565b50565b60006156106000836155f5565b915061561b82615600565b600082019050919050565b600061563182615603565b9150819050919050565b60006060820190506156506000830186614418565b61565d6020830185614418565b61566a6040830184614418565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156ce60218361444d565b91506156d982615672565b604082019050919050565b600060208201905081810360008301526156fd816156c1565b9050919050565b600060a0820190506157196000830188614418565b6157266020830187614f40565b81810360408301526157388186614faf565b905061574760608301856146d6565b6157546080830184614418565b9695505050505050565b600060c08201905061577360008301896146d6565b6157806020830188614418565b61578d6040830187614f40565b61579a6060830186614f40565b6157a760808301856146d6565b6157b460a0830184614418565b979650505050505050565b6000815190506157ce81614560565b92915050565b6000806000606084860312156157ed576157ec6144fd565b5b60006157fb868287016157bf565b935050602061580c868287016157bf565b925050604061581d868287016157bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206014e57639032966d3a4a0dd2d00628ba244299078b0c3e4ceb048088af660ce64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80638a8c523c116101c6578063c876d0b9116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b14610cc1578063f637434214610cea578063f8b45b0514610d15578063fc155d1d14610d4057610376565b8063e884f26014610c40578063ee40166e14610c6b578063f11a24d314610c9657610376565b8063d85ba063116100d1578063d85ba06314610b84578063dcd3342d14610baf578063dd62ed3e14610bd8578063e2f4560514610c1557610376565b8063c876d0b914610af1578063c8c8ebe414610b1c578063d257b34f14610b4757610376565b8063a9059cbb11610164578063b62496f51161013e578063b62496f514610a37578063bbc0c74214610a74578063c024666814610a9f578063c17b5b8c14610ac857610376565b8063a9059cbb146109a8578063aacebbe3146109e5578063ac1407b414610a0e57610376565b8063924de9b7116101a0578063924de9b7146108ee57806395d89b41146109175780639a7a23d614610942578063a457c2d71461096b57610376565b80638a8c523c146108815780638da5cb5b1461089857806392136913146108c357610376565b80634611fe7e116102a0578063715018a61161023e57806375f0a8741161021857806375f0a874146107d7578063776e47bd146108025780637bce5a041461082d5780638095d5641461085857610376565b8063715018a61461076c578063751039fc146107835780637571336a146107ae57610376565b80634fbee1931161027a5780634fbee1931461069c5780636a486a8e146106d95780636ddd17131461070457806370a082311461072f57610376565b80634611fe7e1461061b57806349bd5a5e146106465780634a62bb651461067157610376565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461054b57806327c8f83514610588578063313ce567146105b357806339509351146105de57610376565b80631a8145bb146104ca5780631ed7830e146104f55780631f3fed8f1461052057610376565b8063106b5da111610349578063106b5da11461040e57806310d5de53146104375780631694505e1461047457806318160ddd1461049f57610376565b8063053ed9991461037b57806306fdde03146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190614427565b60405180910390f35b3480156103b257600080fd5b506103bb610d6f565b6040516103c891906144db565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f3919061458c565b610e01565b60405161040591906145e7565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614602565b610e1f565b005b34801561044357600080fd5b5061045e6004803603810190610459919061462f565b610f41565b60405161046b91906145e7565b60405180910390f35b34801561048057600080fd5b50610489610f61565b60405161049691906146bb565b60405180910390f35b3480156104ab57600080fd5b506104b4610f85565b6040516104c19190614427565b60405180910390f35b3480156104d657600080fd5b506104df610f8f565b6040516104ec9190614427565b60405180910390f35b34801561050157600080fd5b5061050a610f95565b60405161051791906146e5565b60405180910390f35b34801561052c57600080fd5b50610535610fbb565b6040516105429190614427565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190614700565b610fc1565b60405161057f91906145e7565b60405180910390f35b34801561059457600080fd5b5061059d61109a565b6040516105aa91906146e5565b60405180910390f35b3480156105bf57600080fd5b506105c86110a0565b6040516105d5919061476f565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061458c565b6110a9565b60405161061291906145e7565b60405180910390f35b34801561062757600080fd5b5061063061115c565b60405161063d9190614427565b60405180910390f35b34801561065257600080fd5b5061065b611162565b60405161066891906146e5565b60405180910390f35b34801561067d57600080fd5b50610686611186565b60405161069391906145e7565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061462f565b611199565b6040516106d091906145e7565b60405180910390f35b3480156106e557600080fd5b506106ee6111ef565b6040516106fb9190614427565b60405180910390f35b34801561071057600080fd5b506107196111f5565b60405161072691906145e7565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061462f565b611208565b6040516107639190614427565b60405180910390f35b34801561077857600080fd5b50610781611250565b005b34801561078f57600080fd5b506107986113a8565b6040516107a591906145e7565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d091906147b6565b611463565b005b3480156107e357600080fd5b506107ec611555565b6040516107f991906146e5565b60405180910390f35b34801561080e57600080fd5b5061081761157b565b6040516108249190614427565b60405180910390f35b34801561083957600080fd5b50610842611581565b60405161084f9190614427565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a91906147f6565b611587565b005b34801561088d57600080fd5b506108966116a0565b005b3480156108a457600080fd5b506108ad611776565b6040516108ba91906146e5565b60405180910390f35b3480156108cf57600080fd5b506108d86117a0565b6040516108e59190614427565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190614849565b6117a6565b005b34801561092357600080fd5b5061092c61185a565b60405161093991906144db565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906147b6565b6118ec565b005b34801561097757600080fd5b50610992600480360381019061098d919061458c565b611a20565b60405161099f91906145e7565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca919061458c565b611aed565b6040516109dc91906145e7565b60405180910390f35b3480156109f157600080fd5b50610a0c6004803603810190610a07919061462f565b611b0b565b005b348015610a1a57600080fd5b50610a356004803603810190610a30919061462f565b611c62565b005b348015610a4357600080fd5b50610a5e6004803603810190610a59919061462f565b611db9565b604051610a6b91906145e7565b60405180910390f35b348015610a8057600080fd5b50610a89611dd9565b604051610a9691906145e7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147b6565b611dec565b005b348015610ad457600080fd5b50610aef6004803603810190610aea91906147f6565b611f2c565b005b348015610afd57600080fd5b50610b06612046565b604051610b1391906145e7565b60405180910390f35b348015610b2857600080fd5b50610b31612059565b604051610b3e9190614427565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b699190614602565b61205f565b604051610b7b91906145e7565b60405180910390f35b348015610b9057600080fd5b50610b996121cf565b604051610ba69190614427565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190614602565b6121d5565b005b348015610be457600080fd5b50610bff6004803603810190610bfa9190614876565b6122f7565b604051610c0c9190614427565b60405180910390f35b348015610c2157600080fd5b50610c2a61237e565b604051610c379190614427565b60405180910390f35b348015610c4c57600080fd5b50610c55612384565b604051610c6291906145e7565b60405180910390f35b348015610c7757600080fd5b50610c8061243f565b604051610c8d9190614427565b60405180910390f35b348015610ca257600080fd5b50610cab612445565b604051610cb89190614427565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce3919061462f565b61244b565b005b348015610cf657600080fd5b50610cff612612565b604051610d0c9190614427565b60405180910390f35b348015610d2157600080fd5b50610d2a612618565b604051610d379190614427565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614602565b61261e565b005b60195481565b606060038054610d7e906148e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610daa906148e5565b8015610df75780601f10610dcc57610100808354040283529160200191610df7565b820191906000526020600020905b815481529060010190602001808311610dda57829003601f168201915b5050505050905090565b6000610e15610e0e61296c565b8484612974565b6001905092915050565b610e2761296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90614963565b60405180910390fd5b633b9aca006103e86005610ec8610f85565b610ed291906149b2565b610edc9190614a3b565b610ee69190614a3b565b811015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90614ade565b60405180910390fd5b633b9aca0081610f3891906149b2565b60088190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000610fce848484612b3f565b61108f84610fda61296c565b61108a8560405180606001604052806028815260200161584e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104061296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b612974565b600190509392505050565b61dead81565b60006009905090565b60006111526110b661296c565b8461114d85600160006110c761296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290e90919063ffffffff16565b612974565b6001905092915050565b60165481565b7f000000000000000000000000562dd7176777928d7011aea673d9c981b02e63a381565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125861296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614963565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113b261296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890614963565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61146b61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614963565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b60105481565b61158f61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590614963565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116469190614afe565b6116509190614afe565b600f81905550600f8054111561169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290614ba0565b60405180910390fd5b505050565b6116a861296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614963565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117ae61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614963565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611869906148e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611895906148e5565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614963565b60405180910390fd5b7f000000000000000000000000562dd7176777928d7011aea673d9c981b02e63a373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614c32565b60405180910390fd5b611a1c828261396d565b5050565b6000611ae3611a2d61296c565b84611ade856040518060600160405280602581526020016158766025913960016000611a5761296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b612974565b6001905092915050565b6000611b01611afa61296c565b8484612b3f565b6001905092915050565b611b1361296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614963565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c6a61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090614963565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167face566a9bbc34b06438fbd60fce33a7190c8931322089b269a5f0adce1827ca260405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611df461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90614963565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2091906145e7565b60405180910390a25050565b611f3461296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90614963565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611feb9190614afe565b611ff59190614afe565b601381905550600f6013541115612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614c9e565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60085481565b600061206961296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90614963565b60405180910390fd5b620186a06001612106610f85565b61211091906149b2565b61211a9190614a3b565b82101561215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614d30565b60405180910390fd5b6103e86005612169610f85565b61217391906149b2565b61217d9190614a3b565b8211156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614dc2565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6121dd61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390614963565b60405180910390fd5b633b9aca006103e8600561227e610f85565b61228891906149b2565b6122929190614a3b565b61229c9190614a3b565b8110156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614ade565b60405180910390fd5b633b9aca00816122ee91906149b2565b600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061238e61296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614963565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b60115481565b61245361296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614963565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990614e54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b61262661296c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614963565b60405180910390fd5b6000600267ffffffffffffffff8111156126d2576126d1614e74565b5b6040519080825280602002602001820160405280156127005781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561276957600080fd5b505afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a19190614eb8565b816000815181106127b5576127b4614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061280457612803614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016128a1949392919061500d565b6000604051808303818588803b1580156128ba57600080fd5b505af11580156128ce573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516129029190614427565b60405180910390a15050565b600080828461291d9190614afe565b905083811015612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906150a5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90615137565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906151c9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190614427565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061525b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c16906152ed565b60405180910390fd5b6000811415612c3957612c3483836000613a0e565b613904565b600b60009054906101000a900460ff16156132aa57612c56611776565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cc45750612c94611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d37575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d505750600560149054906101000a900460ff16155b156132a957600b60019054906101000a900460ff16612e4a57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e0a5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090615359565b60405180910390fd5b5b600e60009054906101000a900460ff161561301257612e67611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612eee57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f4657507f000000000000000000000000562dd7176777928d7011aea673d9c981b02e63a373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130115743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390615411565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130b55750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576008548111156130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f6906154a3565b60405180910390fd5b600a5461310b83611208565b826131169190614afe565b1115613157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314e9061550f565b60405180910390fd5b6132a8565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131ff5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324e57600854811115613249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613240906155a1565b60405180910390fd5b6132a7565b600a5461325a83611208565b826132659190614afe565b11156132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d9061550f565b60405180910390fd5b5b5b5b5b60006132b530611208565b9050600060095482101590508080156132da5750600b60029054906101000a900460ff165b80156132f35750600560149054906101000a900460ff16155b80156133495750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561339f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133f55750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613439576001600560146101000a81548160ff02191690831515021790555061341d613ca3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134ef5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134f957600090505b600081156138f457436002600c546135119190614afe565b101580156135bc5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135bb5750601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613682576135e860646135da606388613f6090919063ffffffff16565b613fdb90919063ffffffff16565b905060636021826135f991906149b2565b6136039190614a3b565b601860008282546136149190614afe565b92505081905550606360218261362a91906149b2565b6136349190614a3b565b601960008282546136459190614afe565b92505081905550606360218261365b91906149b2565b6136659190614a3b565b601760008282546136769190614afe565b925050819055506138d0565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136dd57506000601354115b156137aa5761370a60646136fc60135488613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506013546015548261371d91906149b2565b6137279190614a3b565b601860008282546137389190614afe565b925050819055506013546016548261375091906149b2565b61375a9190614a3b565b6019600082825461376b9190614afe565b925050819055506013546014548261378391906149b2565b61378d9190614a3b565b6017600082825461379e9190614afe565b925050819055506138cf565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561380557506000600f54115b156138ce576138326064613824600f5488613f6090919063ffffffff16565b613fdb90919063ffffffff16565b9050600f546011548261384591906149b2565b61384f9190614a3b565b601860008282546138609190614afe565b92505081905550600f546012548261387891906149b2565b6138829190614a3b565b601960008282546138939190614afe565b92505081905550600f54601054826138ab91906149b2565b6138b59190614a3b565b601760008282546138c69190614afe565b925050819055505b5b5b60008111156138e5576138e4873083613a0e565b5b80856138f191906155c1565b94505b6138ff878787613a0e565b505050505b505050565b6000838311158290613951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394891906144db565b60405180910390fd5b506000838561396091906155c1565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a759061525b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae5906152ed565b60405180910390fd5b613af9838383614025565b613b6481604051806060016040528060268152602001615828602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139099092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c969190614427565b60405180910390a3505050565b6000613cae30611208565b90506000601954601754601854613cc59190614afe565b613ccf9190614afe565b90506000821480613ce05750600081145b15613cec575050613f5e565b600060028260185485613cff91906149b2565b613d099190614a3b565b613d139190614a3b565b90506000613d2a828561402a90919063ffffffff16565b90506000479050613d3a82614074565b6000613d4f824761402a90919063ffffffff16565b90506000613d7a86613d6c60175485613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506000613da587613d9760195486613f6090919063ffffffff16565b613fdb90919063ffffffff16565b90506000818385613db691906155c1565b613dc091906155c1565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051613e2290615626565b60006040518083038185875af1925050503d8060008114613e5f576040519150601f19603f3d011682016040523d82523d6000602084013e613e64565b606091505b50509050600088118015613e785750600082115b15613ec557613e8788836142c0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613ebc9392919061563b565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f0b90615626565b60006040518083038185875af1925050503d8060008114613f48576040519150601f19603f3d011682016040523d82523d6000602084013e613f4d565b606091505b505080915050505050505050505050505b565b600080831415613f735760009050613fd5565b60008284613f8191906149b2565b9050828482613f909190614a3b565b14613fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc7906156e4565b60405180910390fd5b809150505b92915050565b600061401d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143ab565b905092915050565b505050565b600061406c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613909565b905092915050565b6000600267ffffffffffffffff81111561409157614090614e74565b5b6040519080825280602002602001820160405280156140bf5781602001602082028036833780820191505090505b50905030816000815181106140d7576140d6614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561417757600080fd5b505afa15801561418b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141af9190614eb8565b816001815181106141c3576141c2614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614228307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612974565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161428a959493929190615704565b600060405180830381600087803b1580156142a457600080fd5b505af11580156142b8573d6000803e3d6000fd5b505050505050565b6142eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612974565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016143529695949392919061575e565b6060604051808303818588803b15801561436b57600080fd5b505af115801561437f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a491906157d4565b5050505050565b600080831182906143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e991906144db565b60405180910390fd5b50600083856144019190614a3b565b9050809150509392505050565b6000819050919050565b6144218161440e565b82525050565b600060208201905061443c6000830184614418565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561447c578082015181840152602081019050614461565b8381111561448b576000848401525b50505050565b6000601f19601f8301169050919050565b60006144ad82614442565b6144b7818561444d565b93506144c781856020860161445e565b6144d081614491565b840191505092915050565b600060208201905081810360008301526144f581846144a2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452d82614502565b9050919050565b61453d81614522565b811461454857600080fd5b50565b60008135905061455a81614534565b92915050565b6145698161440e565b811461457457600080fd5b50565b60008135905061458681614560565b92915050565b600080604083850312156145a3576145a26144fd565b5b60006145b18582860161454b565b92505060206145c285828601614577565b9150509250929050565b60008115159050919050565b6145e1816145cc565b82525050565b60006020820190506145fc60008301846145d8565b92915050565b600060208284031215614618576146176144fd565b5b600061462684828501614577565b91505092915050565b600060208284031215614645576146446144fd565b5b60006146538482850161454b565b91505092915050565b6000819050919050565b600061468161467c61467784614502565b61465c565b614502565b9050919050565b600061469382614666565b9050919050565b60006146a582614688565b9050919050565b6146b58161469a565b82525050565b60006020820190506146d060008301846146ac565b92915050565b6146df81614522565b82525050565b60006020820190506146fa60008301846146d6565b92915050565b600080600060608486031215614719576147186144fd565b5b60006147278682870161454b565b93505060206147388682870161454b565b925050604061474986828701614577565b9150509250925092565b600060ff82169050919050565b61476981614753565b82525050565b60006020820190506147846000830184614760565b92915050565b614793816145cc565b811461479e57600080fd5b50565b6000813590506147b08161478a565b92915050565b600080604083850312156147cd576147cc6144fd565b5b60006147db8582860161454b565b92505060206147ec858286016147a1565b9150509250929050565b60008060006060848603121561480f5761480e6144fd565b5b600061481d86828701614577565b935050602061482e86828701614577565b925050604061483f86828701614577565b9150509250925092565b60006020828403121561485f5761485e6144fd565b5b600061486d848285016147a1565b91505092915050565b6000806040838503121561488d5761488c6144fd565b5b600061489b8582860161454b565b92505060206148ac8582860161454b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148fd57607f821691505b60208210811415614911576149106148b6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061494d60208361444d565b915061495882614917565b602082019050919050565b6000602082019050818103600083015261497c81614940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149bd8261440e565b91506149c88361440e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0157614a00614983565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a468261440e565b9150614a518361440e565b925082614a6157614a60614a0c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ac8602f8361444d565b9150614ad382614a6c565b604082019050919050565b60006020820190508181036000830152614af781614abb565b9050919050565b6000614b098261440e565b9150614b148361440e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b4957614b48614983565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614b8a601d8361444d565b9150614b9582614b54565b602082019050919050565b60006020820190508181036000830152614bb981614b7d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614c1c60398361444d565b9150614c2782614bc0565b604082019050919050565b60006020820190508181036000830152614c4b81614c0f565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614c88601d8361444d565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614d1a60358361444d565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614dac60348361444d565b9150614db782614d50565b604082019050919050565b60006020820190508181036000830152614ddb81614d9f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e3e60268361444d565b9150614e4982614de2565b604082019050919050565b60006020820190508181036000830152614e6d81614e31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614eb281614534565b92915050565b600060208284031215614ece57614ecd6144fd565b5b6000614edc84828501614ea3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614f39614f34614f2f84614f14565b61465c565b61440e565b9050919050565b614f4981614f1e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f8481614522565b82525050565b6000614f968383614f7b565b60208301905092915050565b6000602082019050919050565b6000614fba82614f4f565b614fc48185614f5a565b9350614fcf83614f6b565b8060005b83811015615000578151614fe78882614f8a565b9750614ff283614fa2565b925050600181019050614fd3565b5085935050505092915050565b60006080820190506150226000830187614f40565b81810360208301526150348186614faf565b905061504360408301856146d6565b6150506060830184614418565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061508f601b8361444d565b915061509a82615059565b602082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061512160248361444d565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151b360228361444d565b91506151be82615157565b604082019050919050565b600060208201905081810360008301526151e2816151a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061524560258361444d565b9150615250826151e9565b604082019050919050565b6000602082019050818103600083015261527481615238565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152d760238361444d565b91506152e28261527b565b604082019050919050565b60006020820190508181036000830152615306816152ca565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061534360168361444d565b915061534e8261530d565b602082019050919050565b6000602082019050818103600083015261537281615336565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006153fb60498361444d565b915061540682615379565b606082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061548d60358361444d565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006154f960138361444d565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061558b60368361444d565b91506155968261552f565b604082019050919050565b600060208201905081810360008301526155ba8161557e565b9050919050565b60006155cc8261440e565b91506155d78361440e565b9250828210156155ea576155e9614983565b5b828203905092915050565b600081905092915050565b50565b60006156106000836155f5565b915061561b82615600565b600082019050919050565b600061563182615603565b9150819050919050565b60006060820190506156506000830186614418565b61565d6020830185614418565b61566a6040830184614418565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156ce60218361444d565b91506156d982615672565b604082019050919050565b600060208201905081810360008301526156fd816156c1565b9050919050565b600060a0820190506157196000830188614418565b6157266020830187614f40565b81810360408301526157388186614faf565b905061574760608301856146d6565b6157546080830184614418565b9695505050505050565b600060c08201905061577360008301896146d6565b6157806020830188614418565b61578d6040830187614f40565b61579a6060830186614f40565b6157a760808301856146d6565b6157b460a0830184614418565b979650505050505050565b6000815190506157ce81614560565b92915050565b6000806000606084860312156157ed576157ec6144fd565b5b60006157fb868287016157bf565b935050602061580c868287016157bf565b925050604061581d868287016157bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206014e57639032966d3a4a0dd2d00628ba244299078b0c3e4ceb048088af660ce64736f6c63430008090033
Deployed Bytecode Sourcemap
29432:16774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30678:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7589:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9755:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35448:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30863:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29510:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8708:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30638:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29742:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30598:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10406:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29613:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8551:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11170:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30556:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29568:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29898:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38122:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30445:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29978:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8879:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22053:148;;;;;;;;;;;;;:::i;:::-;;34661:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35921:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29705:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30404:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30330:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36278:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34449:156;;;;;;;;;;;;;:::i;:::-;;21411:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30480:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36165:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7808:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37267:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11891:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9219:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37715:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37935:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31085:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29938:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37077:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36675:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30248:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29783:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35055:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30296:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35685:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9457:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29825:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34846:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30022:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30367:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30518:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29865:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45628:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30678:31;;;;:::o;7589:100::-;7643:13;7676:5;7669:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7589:100;:::o;9755:169::-;9838:4;9855:39;9864:12;:10;:12::i;:::-;9878:7;9887:6;9855:8;:39::i;:::-;9912:4;9905:11;;9755:169;;;;:::o;35448:229::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35564:3:::1;35558:4;35554:1;35538:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35537:30;;;;:::i;:::-;35527:6;:40;;35519:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35663:5;35653:6;:16;;;;:::i;:::-;35630:20;:39;;;;35448:229:::0;:::o;30863:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29510:51::-;;;:::o;8708:108::-;8769:7;8796:12;;8789:19;;8708:108;:::o;30638:33::-;;;;:::o;29742:28::-;;;;;;;;;;;;;:::o;30598:33::-;;;;:::o;10406:355::-;10546:4;10563:36;10573:6;10581:9;10592:6;10563:9;:36::i;:::-;10610:121;10619:6;10627:12;:10;:12::i;:::-;10641:89;10679:6;10641:89;;;;;;;;;;;;;;;;;:11;:19;10653:6;10641:19;;;;;;;;;;;;;;;:33;10661:12;:10;:12::i;:::-;10641:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10610:8;:121::i;:::-;10749:4;10742:11;;10406:355;;;;;:::o;29613:53::-;29659:6;29613:53;:::o;8551:92::-;8609:5;8634:1;8627:8;;8551:92;:::o;11170:218::-;11258:4;11275:83;11284:12;:10;:12::i;:::-;11298:7;11307:50;11346:10;11307:11;:25;11319:12;:10;:12::i;:::-;11307:25;;;;;;;;;;;;;;;:34;11333:7;11307:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11275:8;:83::i;:::-;11376:4;11369:11;;11170:218;;;;:::o;30556:29::-;;;;:::o;29568:38::-;;;:::o;29898:33::-;;;;;;;;;;;;;:::o;38122:125::-;38187:4;38211:19;:28;38231:7;38211:28;;;;;;;;;;;;;;;;;;;;;;;;;38204:35;;38122:125;;;:::o;30445:28::-;;;;:::o;29978:31::-;;;;;;;;;;;;;:::o;8879:127::-;8953:7;8980:9;:18;8990:7;8980:18;;;;;;;;;;;;;;;;8973:25;;8879:127;;;:::o;22053:148::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22160:1:::1;22123:40;;22144:6;;;;;;;;;;;22123:40;;;;;;;;;;;;22191:1;22174:6;;:19;;;;;;;;;;;;;;;;;;22053:148::o:0;34661:120::-;34713:4;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34746:5:::1;34729:14;;:22;;;;;;;;;;;;;;;;;;34769:4;34762:11;;34661:120:::0;:::o;35921:144::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36053:4:::1;36011:31;:39;36043:6;36011:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35921:144:::0;;:::o;29705:30::-;;;;;;;;;;;;;:::o;30404:28::-;;;;:::o;30330:30::-;;;;:::o;36278:385::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36416:13:::1;36398:15;:31;;;;36458:13;36440:15;:31;;;;36498:11;36482:13;:27;;;;36571:13;;36553:15;;36535;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;36520:12;:64;;;;36619:2;36603:12:::0;::::1;:18;;36595:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36278:385:::0;;;:::o;34449:156::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34520:4:::1;34504:13;;:20;;;;;;;;;;;;;;;;;;34549:4;34535:11;;:18;;;;;;;;;;;;;;;;;;34585:12;34564:18;:33;;;;34449:156::o:0;21411:79::-;21449:7;21476:6;;;;;;;;;;;21469:13;;21411:79;:::o;30480:31::-;;;;:::o;36165:101::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36251:7:::1;36237:11;;:21;;;;;;;;;;;;;;;;;;36165:101:::0;:::o;7808:104::-;7864:13;7897:7;7890:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7808:104;:::o;37267:244::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37374:13:::1;37366:21;;:4;:21;;;;37358:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37462:41;37491:4;37497:5;37462:28;:41::i;:::-;37267:244:::0;;:::o;11891:269::-;11984:4;12001:129;12010:12;:10;:12::i;:::-;12024:7;12033:96;12072:15;12033:96;;;;;;;;;;;;;;;;;:11;:25;12045:12;:10;:12::i;:::-;12033:25;;;;;;;;;;;;;;;:34;12059:7;12033:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12001:8;:129::i;:::-;12148:4;12141:11;;11891:269;;;;:::o;9219:175::-;9305:4;9322:42;9332:12;:10;:12::i;:::-;9346:9;9357:6;9322:9;:42::i;:::-;9382:4;9375:11;;9219:175;;;;:::o;37715:208::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37852:15:::1;;;;;;;;;;;37809:59;;37832:18;37809:59;;;;;;;;;;;;37897:18;37879:15;;:36;;;;;;;;;;;;;;;;;;37715:208:::0;:::o;37935:173::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38050:13:::1;;;;;;;;;;;38018:46;;38039:9;38018:46;;;;;;;;;;;;38091:9;38075:13;;:25;;;;;;;;;;;;;;;;;;37935:173:::0;:::o;31085:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29938:33::-;;;;;;;;;;;;;:::o;37077:182::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37193:8:::1;37162:19;:28;37182:7;37162:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37233:7;37217:34;;;37242:8;37217:34;;;;;;:::i;:::-;;;;;;;;37077:182:::0;;:::o;36675:394::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36815:13:::1;36796:16;:32;;;;36858:13;36839:16;:32;;;;36899:11;36882:14;:28;;;;36975:14;;36956:16;;36937;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;36921:13;:68;;;;37025:2;37008:13;;:19;;37000:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36675:394:::0;;;:::o;30248:39::-;;;;;;;;;;;;;:::o;29783:35::-;;;;:::o;35055:381::-;35136:4;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35192:6:::1;35188:1;35172:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35159:9;:39;;35151:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35307:4;35303:1;35287:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35274:9;:37;;35266:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35399:9;35378:18;:30;;;;35425:4;35418:11;;35055:381:::0;;;:::o;30296:27::-;;;;:::o;35685:224::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35807:3:::1;35801:4;35797:1;35781:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35780:30;;;;:::i;:::-;35770:6;:40;;35762:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35895:5;35885:6;:16;;;;:::i;:::-;35873:9;:28;;;;35685:224:::0;:::o;9457:151::-;9546:7;9573:11;:18;9585:5;9573:18;;;;;;;;;;;;;;;:27;9592:7;9573:27;;;;;;;;;;;;;;;;9566:34;;9457:151;;;;:::o;29825:33::-;;;;:::o;34846:134::-;34906:4;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34945:5:::1;34922:20;;:28;;;;;;;;;;;;;;;;;;34968:4;34961:11;;34846:134:::0;:::o;30022:33::-;;;;:::o;30367:30::-;;;;:::o;22356:244::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:1:::1;22445:22;;:8;:22;;;;22437:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22555:8;22526:38;;22547:6;;;;;;;;;;;22526:38;;;;;;;;;;;;22584:8;22575:6;;:17;;;;;;;;;;;;;;;;;;22356:244:::0;:::o;30518:31::-;;;;:::o;29865:24::-;;;;:::o;45628:575::-;21633:12;:10;:12::i;:::-;21623:22;;:6;;;;;;;;;;;:22;;;21615:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45763:21:::1;45801:1;45787:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45763:40;;45824:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45814:4;45819:1;45814:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;45875:4;45857;45862:1;45857:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;45919:15;:66;;;45993:14;46023:1;46072:4;46099:6;46121:15;45919:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;46163:32;46180:14;46163:32;;;;;;:::i;:::-;;;;;;;;45694:509;45628:575:::0;:::o;16455:181::-;16513:7;16533:9;16549:1;16545;:5;;;;:::i;:::-;16533:17;;16574:1;16569;:6;;16561:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16627:1;16620:8;;;16455:181;;;;:::o;225:98::-;278:7;305:10;298:17;;225:98;:::o;15077:380::-;15230:1;15213:19;;:5;:19;;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15311:1;15292:21;;:7;:21;;;;15284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15395:6;15365:11;:18;15377:5;15365:18;;;;;;;;;;;;;;;:27;15384:7;15365:27;;;;;;;;;;;;;;;:36;;;;15433:7;15417:32;;15426:5;15417:32;;;15442:6;15417:32;;;;;;:::i;:::-;;;;;;;;15077:380;;;:::o;38309:4477::-;38457:1;38441:18;;:4;:18;;;;38433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38534:1;38520:16;;:2;:16;;;;38512:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38611:1;38601:6;:11;38598:92;;;38629:28;38645:4;38651:2;38655:1;38629:15;:28::i;:::-;38672:7;;38598:92;38713:14;;;;;;;;;;;38710:1801;;;38773:7;:5;:7::i;:::-;38765:15;;:4;:15;;;;:49;;;;;38807:7;:5;:7::i;:::-;38801:13;;:2;:13;;;;38765:49;:86;;;;;38849:1;38835:16;;:2;:16;;;;38765:86;:128;;;;;38886:6;38872:21;;:2;:21;;;;38765:128;:158;;;;;38915:8;;;;;;;;;;;38914:9;38765:158;38743:1757;;;38961:13;;;;;;;;;;;38957:148;;39006:19;:25;39026:4;39006:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39035:19;:23;39055:2;39035:23;;;;;;;;;;;;;;;;;;;;;;;;;39006:52;38998:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38957:148;39263:20;;;;;;;;;;;39259:423;;;39317:7;:5;:7::i;:::-;39311:13;;:2;:13;;;;:47;;;;;39342:15;39328:30;;:2;:30;;;;39311:47;:79;;;;;39376:13;39362:28;;:2;:28;;;;39311:79;39307:356;;;39468:12;39426:28;:39;39455:9;39426:39;;;;;;;;;;;;;;;;:54;39418:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39627:12;39585:28;:39;39614:9;39585:39;;;;;;;;;;;;;;;:54;;;;39307:356;39259:423;39751:25;:31;39777:4;39751:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39787:31;:35;39819:2;39787:35;;;;;;;;;;;;;;;;;;;;;;;;;39786:36;39751:71;39747:738;;;39869:20;;39859:6;:30;;39851:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40008:9;;39991:13;40001:2;39991:9;:13::i;:::-;39982:6;:22;;;;:::i;:::-;:35;;39974:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39747:738;;;40135:25;:29;40161:2;40135:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40169:31;:37;40201:4;40169:37;;;;;;;;;;;;;;;;;;;;;;;;;40168:38;40135:71;40131:354;;;40253:20;;40243:6;:30;;40235:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40131:354;;;40432:9;;40415:13;40425:2;40415:9;:13::i;:::-;40406:6;:22;;;;:::i;:::-;:35;;40398:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40131:354;39747:738;38743:1757;38710:1801;40545:28;40576:24;40594:4;40576:9;:24::i;:::-;40545:55;;40621:12;40660:18;;40636:20;:42;;40621:57;;40709:7;:35;;;;;40733:11;;;;;;;;;;;40709:35;:61;;;;;40762:8;;;;;;;;;;;40761:9;40709:61;:110;;;;;40788:25;:31;40814:4;40788:31;;;;;;;;;;;;;;;;;;;;;;;;;40787:32;40709:110;:153;;;;;40837:19;:25;40857:4;40837:25;;;;;;;;;;;;;;;;;;;;;;;;;40836:26;40709:153;:194;;;;;40880:19;:23;40900:2;40880:23;;;;;;;;;;;;;;;;;;;;;;;;;40879:24;40709:194;40691:338;;;40941:4;40930:8;;:15;;;;;;;;;;;;;;;;;;40974:10;:8;:10::i;:::-;41012:5;41001:8;;:16;;;;;;;;;;;;;;;;;;40691:338;41049:12;41065:8;;;;;;;;;;;41064:9;41049:24;;41174:19;:25;41194:4;41174:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41203:19;:23;41223:2;41203:23;;;;;;;;;;;;;;;;;;;;;;;;;41174:52;41171:99;;;41253:5;41243:15;;41171:99;41290:12;41394:7;41391:1342;;;41446:12;41441:1;41420:18;;:22;;;;:::i;:::-;:38;;:108;;;;;41463:25;:29;41489:2;41463:29;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;41496:25;:31;41522:4;41496:31;;;;;;;;;;;;;;;;;;;;;;;;;41463:64;41420:108;41417:1147;;;41555:23;41574:3;41555:14;41566:2;41555:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;41548:30;;41631:2;41626;41619:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;41597:18;;:36;;;;;;;:::i;:::-;;;;;;;;41684:2;41679;41672:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;41652:16;;:34;;;;;;;:::i;:::-;;;;;;;;41739:2;41734;41727:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;41705:18;;:36;;;;;;;:::i;:::-;;;;;;;;41417:1147;;;41804:25;:29;41830:2;41804:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41853:1;41837:13;;:17;41804:50;41800:764;;;41881:34;41911:3;41881:25;41892:13;;41881:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41874:41;;41982:13;;41963:16;;41956:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41934:18;;:61;;;;;;;:::i;:::-;;;;;;;;42058:13;;42041:14;;42034:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;42014:16;;:57;;;;;;;:::i;:::-;;;;;;;;42138:13;;42119:16;;42112:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42090:18;;:61;;;;;;;:::i;:::-;;;;;;;;41800:764;;;42212:25;:31;42238:4;42212:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42262:1;42247:12;;:16;42212:51;42209:355;;;42288:33;42317:3;42288:24;42299:12;;42288:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42281:40;;42384:12;;42366:15;;42359:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42337:18;;:59;;;;;;;:::i;:::-;;;;;;;;42458:12;;42442:13;;42435:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;42415:16;;:55;;;;;;;:::i;:::-;;;;;;;;42536:12;;42518:15;;42511:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42489:18;;:59;;;;;;;:::i;:::-;;;;;;;;42209:355;41800:764;41417:1147;42602:1;42595:4;:8;42592:93;;;42627:42;42643:4;42657;42664;42627:15;:42::i;:::-;42592:93;42717:4;42707:14;;;;;:::i;:::-;;;41391:1342;42745:33;42761:4;42767:2;42771:6;42745:15;:33::i;:::-;38422:4364;;;;38309:4477;;;;:::o;17358:192::-;17444:7;17477:1;17472;:6;;17480:12;17464:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17504:9;17520:1;17516;:5;;;;:::i;:::-;17504:17;;17541:1;17534:8;;;17358:192;;;;;:::o;37519:188::-;37636:5;37602:25;:31;37628:4;37602:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37693:5;37659:40;;37687:4;37659:40;;;;;;;;;;;;37519:188;;:::o;12650:573::-;12808:1;12790:20;;:6;:20;;;;12782:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12892:1;12871:23;;:9;:23;;;;12863:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12947:47;12968:6;12976:9;12987:6;12947:20;:47::i;:::-;13027:71;13049:6;13027:71;;;;;;;;;;;;;;;;;:9;:17;13037:6;13027:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13007:9;:17;13017:6;13007:17;;;;;;;;;;;;;;;:91;;;;13132:32;13157:6;13132:9;:20;13142:9;13132:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13109:9;:20;13119:9;13109:20;;;;;;;;;;;;;;;:55;;;;13197:9;13180:35;;13189:6;13180:35;;;13208:6;13180:35;;;;;;:::i;:::-;;;;;;;;12650:573;;;:::o;43944:1577::-;43983:23;44009:24;44027:4;44009:9;:24::i;:::-;43983:50;;44044:25;44114:16;;44093:18;;44072;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;44044:86;;44173:1;44154:15;:20;:46;;;;44199:1;44178:17;:22;44154:46;44151:60;;;44203:7;;;;44151:60;44280:23;44365:1;44345:17;44324:18;;44306:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44280:86;;44377:26;44406:36;44426:15;44406;:19;;:36;;;;:::i;:::-;44377:65;;44463:25;44491:21;44463:49;;44525:36;44542:18;44525:16;:36::i;:::-;44583:18;44604:44;44630:17;44604:21;:25;;:44;;;;:::i;:::-;44583:65;;44669:23;44695:57;44734:17;44695:34;44710:18;;44695:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44669:83;;44763:21;44787:55;44824:17;44787:32;44802:16;;44787:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;44763:79;;44873:23;44930:13;44912:15;44899:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;44873:70;;44995:1;44974:18;:22;;;;45028:1;45007:18;:22;;;;45059:1;45040:16;:20;;;;45082:12;45107:15;;;;;;;;;;;45099:29;;45136:15;45099:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45081:75;;;45188:1;45170:15;:19;:42;;;;;45211:1;45193:15;:19;45170:42;45167:210;;;45228:46;45241:15;45258;45228:12;:46::i;:::-;45294:71;45309:18;45329:15;45346:18;;45294:71;;;;;;;;:::i;:::-;;;;;;;;45167:210;45460:13;;;;;;;;;;;45452:27;;45487:21;45452:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45439:74;;;;;43972:1549;;;;;;;;;;43944:1577;:::o;17809:471::-;17867:7;18117:1;18112;:6;18108:47;;;18142:1;18135:8;;;;18108:47;18167:9;18183:1;18179;:5;;;;:::i;:::-;18167:17;;18212:1;18207;18203;:5;;;;:::i;:::-;:10;18195:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18271:1;18264:8;;;17809:471;;;;;:::o;18756:132::-;18814:7;18841:39;18845:1;18848;18841:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18834:46;;18756:132;;;;:::o;16060:125::-;;;;:::o;16919:136::-;16977:7;17004:43;17008:1;17011;17004:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16997:50;;16919:136;;;;:::o;42794:601::-;42922:21;42960:1;42946:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42922:40;;42991:4;42973;42978:1;42973:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43017:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43007:4;43012:1;43007:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43052:62;43069:4;43084:15;43102:11;43052:8;:62::i;:::-;43153:15;:66;;;43234:11;43260:1;43304:4;43331;43351:15;43153:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42849:546;42794:601;:::o;43419:517::-;43567:62;43584:4;43599:15;43617:11;43567:8;:62::i;:::-;43672:15;:31;;;43711:9;43744:4;43764:11;43790:1;43833;29659:6;43902:15;43672:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43419:517;;:::o;19384:278::-;19470:7;19502:1;19498;:5;19505:12;19490:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19529:9;19545:1;19541;:5;;;;:::i;:::-;19529:17;;19653:1;19646:8;;;19384:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:118::-;5581:24;5599:5;5581:24;:::i;:::-;5576:3;5569:37;5494:118;;:::o;5618:222::-;5711:4;5749:2;5738:9;5734:18;5726:26;;5762:71;5830:1;5819:9;5815:17;5806:6;5762:71;:::i;:::-;5618:222;;;;:::o;5846:619::-;5923:6;5931;5939;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;6241:2;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6212:118;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;5846:619;;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:179::-;15001:31;14997:1;14989:6;14985:14;14978:55;14861:179;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:240::-;15983:34;15979:1;15971:6;15967:14;15960:58;16052:23;16047:2;16039:6;16035:15;16028:48;15843:240;:::o;16089:366::-;16231:3;16252:67;16316:2;16311:3;16252:67;:::i;:::-;16245:74;;16328:93;16417:3;16328:93;:::i;:::-;16446:2;16441:3;16437:12;16430:19;;16089:366;;;:::o;16461:419::-;16627:4;16665:2;16654:9;16650:18;16642:26;;16714:9;16708:4;16704:20;16700:1;16689:9;16685:17;16678:47;16742:131;16868:4;16742:131;:::i;:::-;16734:139;;16461:419;;;:::o;16886:239::-;17026:34;17022:1;17014:6;17010:14;17003:58;17095:22;17090:2;17082:6;17078:15;17071:47;16886:239;:::o;17131:366::-;17273:3;17294:67;17358:2;17353:3;17294:67;:::i;:::-;17287:74;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17131:366;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:225::-;18068:34;18064:1;18056:6;18052:14;18045:58;18137:8;18132:2;18124:6;18120:15;18113:33;17928:225;:::o;18159:366::-;18301:3;18322:67;18386:2;18381:3;18322:67;:::i;:::-;18315:74;;18398:93;18487:3;18398:93;:::i;:::-;18516:2;18511:3;18507:12;18500:19;;18159:366;;;:::o;18531:419::-;18697:4;18735:2;18724:9;18720:18;18712:26;;18784:9;18778:4;18774:20;18770:1;18759:9;18755:17;18748:47;18812:131;18938:4;18812:131;:::i;:::-;18804:139;;18531:419;;;:::o;18956:180::-;19004:77;19001:1;18994:88;19101:4;19098:1;19091:15;19125:4;19122:1;19115:15;19142:143;19199:5;19230:6;19224:13;19215:22;;19246:33;19273:5;19246:33;:::i;:::-;19142:143;;;;:::o;19291:351::-;19361:6;19410:2;19398:9;19389:7;19385:23;19381:32;19378:119;;;19416:79;;:::i;:::-;19378:119;19536:1;19561:64;19617:7;19608:6;19597:9;19593:22;19561:64;:::i;:::-;19551:74;;19507:128;19291:351;;;;:::o;19648:180::-;19696:77;19693:1;19686:88;19793:4;19790:1;19783:15;19817:4;19814:1;19807:15;19834:85;19879:7;19908:5;19897:16;;19834:85;;;:::o;19925:158::-;19983:9;20016:61;20034:42;20043:32;20069:5;20043:32;:::i;:::-;20034:42;:::i;:::-;20016:61;:::i;:::-;20003:74;;19925:158;;;:::o;20089:147::-;20184:45;20223:5;20184:45;:::i;:::-;20179:3;20172:58;20089:147;;:::o;20242:114::-;20309:6;20343:5;20337:12;20327:22;;20242:114;;;:::o;20362:184::-;20461:11;20495:6;20490:3;20483:19;20535:4;20530:3;20526:14;20511:29;;20362:184;;;;:::o;20552:132::-;20619:4;20642:3;20634:11;;20672:4;20667:3;20663:14;20655:22;;20552:132;;;:::o;20690:108::-;20767:24;20785:5;20767:24;:::i;:::-;20762:3;20755:37;20690:108;;:::o;20804:179::-;20873:10;20894:46;20936:3;20928:6;20894:46;:::i;:::-;20972:4;20967:3;20963:14;20949:28;;20804:179;;;;:::o;20989:113::-;21059:4;21091;21086:3;21082:14;21074:22;;20989:113;;;:::o;21138:732::-;21257:3;21286:54;21334:5;21286:54;:::i;:::-;21356:86;21435:6;21430:3;21356:86;:::i;:::-;21349:93;;21466:56;21516:5;21466:56;:::i;:::-;21545:7;21576:1;21561:284;21586:6;21583:1;21580:13;21561:284;;;21662:6;21656:13;21689:63;21748:3;21733:13;21689:63;:::i;:::-;21682:70;;21775:60;21828:6;21775:60;:::i;:::-;21765:70;;21621:224;21608:1;21605;21601:9;21596:14;;21561:284;;;21565:14;21861:3;21854:10;;21262:608;;;21138:732;;;;:::o;21876:720::-;22111:4;22149:3;22138:9;22134:19;22126:27;;22163:79;22239:1;22228:9;22224:17;22215:6;22163:79;:::i;:::-;22289:9;22283:4;22279:20;22274:2;22263:9;22259:18;22252:48;22317:108;22420:4;22411:6;22317:108;:::i;:::-;22309:116;;22435:72;22503:2;22492:9;22488:18;22479:6;22435:72;:::i;:::-;22517;22585:2;22574:9;22570:18;22561:6;22517:72;:::i;:::-;21876:720;;;;;;;:::o;22602:177::-;22742:29;22738:1;22730:6;22726:14;22719:53;22602:177;:::o;22785:366::-;22927:3;22948:67;23012:2;23007:3;22948:67;:::i;:::-;22941:74;;23024:93;23113:3;23024:93;:::i;:::-;23142:2;23137:3;23133:12;23126:19;;22785:366;;;:::o;23157:419::-;23323:4;23361:2;23350:9;23346:18;23338:26;;23410:9;23404:4;23400:20;23396:1;23385:9;23381:17;23374:47;23438:131;23564:4;23438:131;:::i;:::-;23430:139;;23157:419;;;:::o;23582:223::-;23722:34;23718:1;23710:6;23706:14;23699:58;23791:6;23786:2;23778:6;23774:15;23767:31;23582:223;:::o;23811:366::-;23953:3;23974:67;24038:2;24033:3;23974:67;:::i;:::-;23967:74;;24050:93;24139:3;24050:93;:::i;:::-;24168:2;24163:3;24159:12;24152:19;;23811:366;;;:::o;24183:419::-;24349:4;24387:2;24376:9;24372:18;24364:26;;24436:9;24430:4;24426:20;24422:1;24411:9;24407:17;24400:47;24464:131;24590:4;24464:131;:::i;:::-;24456:139;;24183:419;;;:::o;24608:221::-;24748:34;24744:1;24736:6;24732:14;24725:58;24817:4;24812:2;24804:6;24800:15;24793:29;24608:221;:::o;24835:366::-;24977:3;24998:67;25062:2;25057:3;24998:67;:::i;:::-;24991:74;;25074:93;25163:3;25074:93;:::i;:::-;25192:2;25187:3;25183:12;25176:19;;24835:366;;;:::o;25207:419::-;25373:4;25411:2;25400:9;25396:18;25388:26;;25460:9;25454:4;25450:20;25446:1;25435:9;25431:17;25424:47;25488:131;25614:4;25488:131;:::i;:::-;25480:139;;25207:419;;;:::o;25632:224::-;25772:34;25768:1;25760:6;25756:14;25749:58;25841:7;25836:2;25828:6;25824:15;25817:32;25632:224;:::o;25862:366::-;26004:3;26025:67;26089:2;26084:3;26025:67;:::i;:::-;26018:74;;26101:93;26190:3;26101:93;:::i;:::-;26219:2;26214:3;26210:12;26203:19;;25862:366;;;:::o;26234:419::-;26400:4;26438:2;26427:9;26423:18;26415:26;;26487:9;26481:4;26477:20;26473:1;26462:9;26458:17;26451:47;26515:131;26641:4;26515:131;:::i;:::-;26507:139;;26234:419;;;:::o;26659:222::-;26799:34;26795:1;26787:6;26783:14;26776:58;26868:5;26863:2;26855:6;26851:15;26844:30;26659:222;:::o;26887:366::-;27029:3;27050:67;27114:2;27109:3;27050:67;:::i;:::-;27043:74;;27126:93;27215:3;27126:93;:::i;:::-;27244:2;27239:3;27235:12;27228:19;;26887:366;;;:::o;27259:419::-;27425:4;27463:2;27452:9;27448:18;27440:26;;27512:9;27506:4;27502:20;27498:1;27487:9;27483:17;27476:47;27540:131;27666:4;27540:131;:::i;:::-;27532:139;;27259:419;;;:::o;27684:172::-;27824:24;27820:1;27812:6;27808:14;27801:48;27684:172;:::o;27862:366::-;28004:3;28025:67;28089:2;28084:3;28025:67;:::i;:::-;28018:74;;28101:93;28190:3;28101:93;:::i;:::-;28219:2;28214:3;28210:12;28203:19;;27862:366;;;:::o;28234:419::-;28400:4;28438:2;28427:9;28423:18;28415:26;;28487:9;28481:4;28477:20;28473:1;28462:9;28458:17;28451:47;28515:131;28641:4;28515:131;:::i;:::-;28507:139;;28234:419;;;:::o;28659:297::-;28799:34;28795:1;28787:6;28783:14;28776:58;28868:34;28863:2;28855:6;28851:15;28844:59;28937:11;28932:2;28924:6;28920:15;28913:36;28659:297;:::o;28962:366::-;29104:3;29125:67;29189:2;29184:3;29125:67;:::i;:::-;29118:74;;29201:93;29290:3;29201:93;:::i;:::-;29319:2;29314:3;29310:12;29303:19;;28962:366;;;:::o;29334:419::-;29500:4;29538:2;29527:9;29523:18;29515:26;;29587:9;29581:4;29577:20;29573:1;29562:9;29558:17;29551:47;29615:131;29741:4;29615:131;:::i;:::-;29607:139;;29334:419;;;:::o;29759:240::-;29899:34;29895:1;29887:6;29883:14;29876:58;29968:23;29963:2;29955:6;29951:15;29944:48;29759:240;:::o;30005:366::-;30147:3;30168:67;30232:2;30227:3;30168:67;:::i;:::-;30161:74;;30244:93;30333:3;30244:93;:::i;:::-;30362:2;30357:3;30353:12;30346:19;;30005:366;;;:::o;30377:419::-;30543:4;30581:2;30570:9;30566:18;30558:26;;30630:9;30624:4;30620:20;30616:1;30605:9;30601:17;30594:47;30658:131;30784:4;30658:131;:::i;:::-;30650:139;;30377:419;;;:::o;30802:169::-;30942:21;30938:1;30930:6;30926:14;30919:45;30802:169;:::o;30977:366::-;31119:3;31140:67;31204:2;31199:3;31140:67;:::i;:::-;31133:74;;31216:93;31305:3;31216:93;:::i;:::-;31334:2;31329:3;31325:12;31318:19;;30977:366;;;:::o;31349:419::-;31515:4;31553:2;31542:9;31538:18;31530:26;;31602:9;31596:4;31592:20;31588:1;31577:9;31573:17;31566:47;31630:131;31756:4;31630:131;:::i;:::-;31622:139;;31349:419;;;:::o;31774:241::-;31914:34;31910:1;31902:6;31898:14;31891:58;31983:24;31978:2;31970:6;31966:15;31959:49;31774:241;:::o;32021:366::-;32163:3;32184:67;32248:2;32243:3;32184:67;:::i;:::-;32177:74;;32260:93;32349:3;32260:93;:::i;:::-;32378:2;32373:3;32369:12;32362:19;;32021:366;;;:::o;32393:419::-;32559:4;32597:2;32586:9;32582:18;32574:26;;32646:9;32640:4;32636:20;32632:1;32621:9;32617:17;32610:47;32674:131;32800:4;32674:131;:::i;:::-;32666:139;;32393:419;;;:::o;32818:191::-;32858:4;32878:20;32896:1;32878:20;:::i;:::-;32873:25;;32912:20;32930:1;32912:20;:::i;:::-;32907:25;;32951:1;32948;32945:8;32942:34;;;32956:18;;:::i;:::-;32942:34;33001:1;32998;32994:9;32986:17;;32818:191;;;;:::o;33015:147::-;33116:11;33153:3;33138:18;;33015:147;;;;:::o;33168:114::-;;:::o;33288:398::-;33447:3;33468:83;33549:1;33544:3;33468:83;:::i;:::-;33461:90;;33560:93;33649:3;33560:93;:::i;:::-;33678:1;33673:3;33669:11;33662:18;;33288:398;;;:::o;33692:379::-;33876:3;33898:147;34041:3;33898:147;:::i;:::-;33891:154;;34062:3;34055:10;;33692:379;;;:::o;34077:442::-;34226:4;34264:2;34253:9;34249:18;34241:26;;34277:71;34345:1;34334:9;34330:17;34321:6;34277:71;:::i;:::-;34358:72;34426:2;34415:9;34411:18;34402:6;34358:72;:::i;:::-;34440;34508:2;34497:9;34493:18;34484:6;34440:72;:::i;:::-;34077:442;;;;;;:::o;34525:220::-;34665:34;34661:1;34653:6;34649:14;34642:58;34734:3;34729:2;34721:6;34717:15;34710:28;34525:220;:::o;34751:366::-;34893:3;34914:67;34978:2;34973:3;34914:67;:::i;:::-;34907:74;;34990:93;35079:3;34990:93;:::i;:::-;35108:2;35103:3;35099:12;35092:19;;34751:366;;;:::o;35123:419::-;35289:4;35327:2;35316:9;35312:18;35304:26;;35376:9;35370:4;35366:20;35362:1;35351:9;35347:17;35340:47;35404:131;35530:4;35404:131;:::i;:::-;35396:139;;35123:419;;;:::o;35548:831::-;35811:4;35849:3;35838:9;35834:19;35826:27;;35863:71;35931:1;35920:9;35916:17;35907:6;35863:71;:::i;:::-;35944:80;36020:2;36009:9;36005:18;35996:6;35944:80;:::i;:::-;36071:9;36065:4;36061:20;36056:2;36045:9;36041:18;36034:48;36099:108;36202:4;36193:6;36099:108;:::i;:::-;36091:116;;36217:72;36285:2;36274:9;36270:18;36261:6;36217:72;:::i;:::-;36299:73;36367:3;36356:9;36352:19;36343:6;36299:73;:::i;:::-;35548:831;;;;;;;;:::o;36385:807::-;36634:4;36672:3;36661:9;36657:19;36649:27;;36686:71;36754:1;36743:9;36739:17;36730:6;36686:71;:::i;:::-;36767:72;36835:2;36824:9;36820:18;36811:6;36767:72;:::i;:::-;36849:80;36925:2;36914:9;36910:18;36901:6;36849:80;:::i;:::-;36939;37015:2;37004:9;37000:18;36991:6;36939:80;:::i;:::-;37029:73;37097:3;37086:9;37082:19;37073:6;37029:73;:::i;:::-;37112;37180:3;37169:9;37165:19;37156:6;37112:73;:::i;:::-;36385:807;;;;;;;;;:::o;37198:143::-;37255:5;37286:6;37280:13;37271:22;;37302:33;37329:5;37302:33;:::i;:::-;37198:143;;;;:::o;37347:663::-;37435:6;37443;37451;37500:2;37488:9;37479:7;37475:23;37471:32;37468:119;;;37506:79;;:::i;:::-;37468:119;37626:1;37651:64;37707:7;37698:6;37687:9;37683:22;37651:64;:::i;:::-;37641:74;;37597:128;37764:2;37790:64;37846:7;37837:6;37826:9;37822:22;37790:64;:::i;:::-;37780:74;;37735:129;37903:2;37929:64;37985:7;37976:6;37965:9;37961:22;37929:64;:::i;:::-;37919:74;;37874:129;37347:663;;;;;:::o
Swarm Source
ipfs://6014e57639032966d3a4a0dd2d00628ba244299078b0c3e4ceb048088af660ce
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.