ERC-20
Overview
Max Total Supply
10,000,000 ARENA
Holders
60
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
80,000 ARENAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ARENA
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-03 */ /** * SPDX-License-Identifier: MIT * https://arena.gg * https://t.me/ArenaGG_Portal * https://twitter.com/ArenaGG */ pragma solidity >=0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract ARENA is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniV2Routr; address public immutable mainUniV2Pair; bool private swappingBack; address public lpTokenReceiver; address public profitWallet; uint256 public maxTokensForSwapback; uint256 public minTokensForSwapback; uint256 public maxTxLimit; uint256 public maxWalletLimit; bool public limitsEnabled = true; bool public swapbackEnabled = false; bool public isTradingActive = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public earlyTransferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyProfitFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellProfitFee; uint256 public sellLiquidityFee; uint256 public tokensForProfit; uint256 public tokensForLiquidity; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedFromAntiWhale; // 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 extraAMMPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event profitWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Arena Token", "ARENA") { IUniswapV2Router02 _uniV2Routr = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromAntiWhale(address(_uniV2Routr), true); uniV2Routr = _uniV2Routr; mainUniV2Pair = IUniswapV2Factory(_uniV2Routr.factory()) .createPair(address(this), _uniV2Routr.WETH()); excludeFromAntiWhale(address(mainUniV2Pair), true); _setAutomatedMarketMakerPair(address(mainUniV2Pair), true); uint256 _buyProfitFee = 25; uint256 _buyLiquidityFee = 25; uint256 _sellProfitFee = 25; uint256 _sellLiquidityFee = 25; uint256 totalSupply = 10000000 * 1e18; maxTxLimit = (totalSupply * 1) / 100; // 1% of total supply maxWalletLimit = (totalSupply * 1) / 100; // 1% of total supply minTokensForSwapback = (totalSupply * 2) / 1000; // 0.2% swapback trigger maxTokensForSwapback = (totalSupply * 6) / 1000; // 0.6% max swapback buyProfitFee = _buyProfitFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyProfitFee + buyLiquidityFee; sellProfitFee = _sellProfitFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellProfitFee + sellLiquidityFee; profitWallet = address(0x4cB31EF78a46B9292f92072F7FB3508CfD33B6e8); // Input Profit Wallet Address lpTokenReceiver = msg.sender; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(profitWallet, true); excludeFromAntiWhale(owner(), true); excludeFromAntiWhale(address(this), true); excludeFromAntiWhale(address(0xdead), true); excludeFromAntiWhale(profitWallet, true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} /// @dev Launches the token and enables tradin. function getInTheArena() external onlyOwner { require(!isTradingActive, "Trading has already been enabled"); buyProfitFee = 100; buyLiquidityFee = 100; buyTotalFees = buyProfitFee + buyLiquidityFee; sellProfitFee = 150; sellLiquidityFee = 150; sellTotalFees = sellProfitFee + sellLiquidityFee; isTradingActive = true; swapbackEnabled = true; } /// @dev Removes the max wallet and max transaction limits and the early transfer delay function removeEarlyLimits() external onlyOwner returns (bool) { limitsEnabled = false; return true; } /// @dev Disables the Same wallet block transfer delay function disableEarlyTransferDelay() external onlyOwner returns (bool) { earlyTransferDelayEnabled = false; return true; } /// @dev Changes the minimum balance of tokens the contract must have before swappingBack tokens for ETH. Base 100000, so 0.5% = 500. function updateSwapbackParams(uint256 newMin, uint256 newMax) external onlyOwner returns (bool) { require( newMin >= 1, "Swap amount cannot be lower than 0.001% total supply." ); require( newMin <= 500, "Swap amount cannot be higher than 0.5% total supply." ); require( newMin <= newMax, "The higher boundary should be higher or equal to the lower one" ); minTokensForSwapback = newMin * totalSupply()/ 100000; maxTokensForSwapback = newMax * totalSupply()/ 100000; return true; } /// @dev Changes the maximum amount of tokens that can be bought or sold in a single transaction /// @param newNum Base 1000, so 1% = 10 function updateMaxTxLimit(uint256 newNum) external onlyOwner { require( newNum >= 1, "Cannot set maxTxLimit lower than 0.1%" ); maxTxLimit = newNum * totalSupply()/ 1000; } /// @dev Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10 function updateMaxWalletLimit(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set maxWalletLimit lower than 0.5%" ); maxWalletLimit = newNum * totalSupply()/1000; } /// @dev Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function excludeFromAntiWhale(address updAds, bool isEx) public onlyOwner { _isExcludedFromAntiWhale[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function updateSwapbackEnabled(bool enabled) external onlyOwner { swapbackEnabled = enabled; } /// @dev Sets the fees for buys /// @param _profitFee The fee for the profit wallet /// @param _liquidityFee The fee for the liquidity pool function updateBuyFees( uint256 _profitFee, uint256 _liquidityFee ) external onlyOwner { buyProfitFee = _profitFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyProfitFee + buyLiquidityFee; require(buyTotalFees <= 50, "Must keep fees at 5% or less"); } /// @dev Sets the fees for sells /// @param _profitFee The fee for the profit wallet /// @param _liquidityFee The fee for the liquidity pool function updateSellFees( uint256 _profitFee, uint256 _liquidityFee ) external onlyOwner { sellProfitFee = _profitFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellProfitFee + sellLiquidityFee; require(sellTotalFees <= 50, "Must keep fees at 5% or less"); } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @dev Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair function setAsExtraAMMPair(address pair, bool value) public onlyOwner { require( pair != mainUniV2Pair, "The pair cannot be removed from extraAMMPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { extraAMMPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateProfitWallet(address newProfitWallet) external onlyOwner { emit profitWalletUpdated(newProfitWallet, profitWallet); profitWallet = newProfitWallet; } function updateLPTokenWallet(address newLPWallet) external onlyOwner { lpTokenReceiver = newLPWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swappingBack ) { if (!isTradingActive) { 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 (earlyTransferDelayEnabled) { if ( to != owner() && to != address(uniV2Routr) && to != address(mainUniV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( extraAMMPairs[from] && !_isExcludedFromAntiWhale[to] ) { require( amount <= maxTxLimit, "Buy transfer amount exceeds the maxTxLimit." ); require( amount + balanceOf(to) <= maxWalletLimit, "Max wallet exceeded" ); } //when sell else if ( extraAMMPairs[to] && !_isExcludedFromAntiWhale[from] ) { require( amount <= maxTxLimit, "Sell transfer amount exceeds the maxTxLimit." ); } else if (!_isExcludedFromAntiWhale[to]) { require( amount + balanceOf(to) <= maxWalletLimit, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= minTokensForSwapback; if ( canSwap && swapbackEnabled && !swappingBack && !extraAMMPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swappingBack = true; swapBack(); swappingBack = false; } bool takeFee = !swappingBack; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (extraAMMPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(10000); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForProfit += (fees * sellProfitFee) / sellTotalFees; } // on buy else if (extraAMMPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(1000); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForProfit += (fees * buyProfitFee) / 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] = uniV2Routr.WETH(); _approve(address(this), address(uniV2Routr), tokenAmount); // make the swap uniV2Routr.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(uniV2Routr), tokenAmount); // add the liquidity uniV2Routr.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpTokenReceiver, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForProfit; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > maxTokensForSwapback) { contractBalance = maxTokensForSwapback; } // 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 ethForProfit = ethBalance.mul(tokensForProfit).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance - ethForProfit; tokensForLiquidity = 0; tokensForProfit = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(profitWallet).call{ value: address(this).balance }(""); } function startGame() public {} function endGame() public {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"profitWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAntiWhale","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyProfitFee","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":"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":"disableEarlyTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyTransferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromAntiWhale","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":"","type":"address"}],"name":"extraAMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInTheArena","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":"isTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTokenReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainUniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensForSwapback","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":"profitWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEarlyLimits","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":"sellProfitFee","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":"setAsExtraAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokensForProfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2Routr","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_profitFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProfitWallet","type":"address"}],"name":"updateProfitWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_profitFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapbackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMin","type":"uint256"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateSwapbackParams","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f4172656e6120546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4152454e410000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dbf565b5080600490816200010d919062000dbf565b50505062000130620001246200060660201b60201c565b6200060e60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006d460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f10565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f10565b6040518363ffffffff1660e01b8152600401620002af92919062000f53565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f10565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006d460201b60201c565b6200035260a0516001620007be60201b60201c565b60006019905060006019905060006019905060006019905060006a084595161401484a000000905060646001826200038b919062000faf565b62000397919062001029565b600a819055506064600182620003ae919062000faf565b620003ba919062001029565b600b819055506103e8600282620003d2919062000faf565b620003de919062001029565b6009819055506103e8600682620003f6919062000faf565b62000402919062001029565b600881905550846010819055508360118190555060115460105462000428919062001061565b600f8190555082601381905550816014819055506014546013546200044e919062001061565b601281905550734cb31ef78a46b9292f92072f7fb3508cfd33b6e8600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050c620004fe6200085f60201b60201c565b60016200088960201b60201c565b6200051f3060016200088960201b60201c565b6200053461dead60016200088960201b60201c565b62000569600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088960201b60201c565b6200058b6200057d6200085f60201b60201c565b6001620006d460201b60201c565b6200059e306001620006d460201b60201c565b620005b361dead6001620006d460201b60201c565b620005e8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d460201b60201c565b620005fa3382620009c360201b60201c565b505050505050620011f9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e46200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200070a6200085f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075a90620010fd565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008996200060660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008bf6200085f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000918576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090f90620010fd565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b791906200113c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2c90620011a9565b60405180910390fd5b62000a496000838362000b3b60201b60201c565b806002600082825462000a5d919062001061565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab4919062001061565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1b9190620011dc565b60405180910390a362000b376000838362000b4060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc757607f821691505b60208210810362000bdd5762000bdc62000b7f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c08565b62000c53868362000c08565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ca062000c9a62000c948462000c6b565b62000c75565b62000c6b565b9050919050565b6000819050919050565b62000cbc8362000c7f565b62000cd462000ccb8262000ca7565b84845462000c15565b825550505050565b600090565b62000ceb62000cdc565b62000cf881848462000cb1565b505050565b5b8181101562000d205762000d1460008262000ce1565b60018101905062000cfe565b5050565b601f82111562000d6f5762000d398162000be3565b62000d448462000bf8565b8101602085101562000d54578190505b62000d6c62000d638562000bf8565b83018262000cfd565b50505b505050565b600082821c905092915050565b600062000d946000198460080262000d74565b1980831691505092915050565b600062000daf838362000d81565b9150826002028217905092915050565b62000dca8262000b45565b67ffffffffffffffff81111562000de65762000de562000b50565b5b62000df2825462000bae565b62000dff82828562000d24565b600060209050601f83116001811462000e37576000841562000e22578287015190505b62000e2e858262000da1565b86555062000e9e565b601f19841662000e478662000be3565b60005b8281101562000e715784890151825560018201915060208501945060208101905062000e4a565b8683101562000e91578489015162000e8d601f89168262000d81565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed88262000eab565b9050919050565b62000eea8162000ecb565b811462000ef657600080fd5b50565b60008151905062000f0a8162000edf565b92915050565b60006020828403121562000f295762000f2862000ea6565b5b600062000f398482850162000ef9565b91505092915050565b62000f4d8162000ecb565b82525050565b600060408201905062000f6a600083018562000f42565b62000f79602083018462000f42565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fbc8262000c6b565b915062000fc98362000c6b565b925082820262000fd98162000c6b565b9150828204841483151762000ff35762000ff262000f80565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010368262000c6b565b9150620010438362000c6b565b92508262001056576200105562000ffa565b5b828204905092915050565b60006200106e8262000c6b565b91506200107b8362000c6b565b925082820190508082111562001096576200109562000f80565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010e56020836200109c565b9150620010f282620010ad565b602082019050919050565b600060208201905081810360008301526200111881620010d6565b9050919050565b60008115159050919050565b62001136816200111f565b82525050565b60006020820190506200115360008301846200112b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001191601f836200109c565b91506200119e8262001159565b602082019050919050565b60006020820190508181036000830152620011c48162001182565b9050919050565b620011d68162000c6b565b82525050565b6000602082019050620011f36000830184620011cb565b92915050565b60805160a051614f1a6200125760003960008181611057015281816112c401526127b40152600081816119190152818161275c015281816136f8015281816137d9015281816138000152818161389c01526138c30152614f1a6000f3fe60806040526004361061031e5760003560e01c80638036d590116101ab578063c2c327d1116100f7578063e0a2717411610095578063f2fde38b1161006f578063f2fde38b14610bb5578063f3f7338e14610bde578063f637434214610c09578063fdb6531f14610c3457610325565b8063e0a2717414610b36578063ea90fcc314610b61578063f11a24d314610b8a57610325565b8063ca6a14e1116100d1578063ca6a14e114610a8c578063d65ab5f214610ab7578063d85ba06314610ace578063dd62ed3e14610af957610325565b8063c2c327d114610a0d578063c53d4d5314610a36578063c77847b114610a6157610325565b8063a457c2d711610164578063a9059cbb1161013e578063a9059cbb14610955578063aaae545a14610992578063b34117ba146109bb578063c0246668146109e457610325565b8063a457c2d7146108d6578063a531721614610913578063a57afffa1461093e57610325565b80638036d590146107d657806389add02c146108015780638da5cb5b1461082c57806391d782ce1461085757806394516c7f1461088057806395d89b41146108ab57610325565b80634324deae1161026a57806366a88d96116102235780636cbc2ded116101fd5780636cbc2ded1461074057806370a0823114610757578063715018a61461079457806377c18352146107ab57610325565b806366a88d96146106c157806366ca9b83146106ec5780636a486a8e1461071557610325565b80634324deae1461059d57806349021b6e146105c65780634fbee193146105f15780635016c39f1461062e578063555b90751461066b57806359bdf1df1461069657610325565b80632301d775116102d75780632c505e90116102b15780632c505e90146104cd578063313ce5671461050a5780633582ad2314610535578063395093511461056057610325565b80632301d7751461043c57806323b872dd1461046757806327396701146104a457610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780630ea0d3d2146103bb57806318160ddd146103e65780631a8145bb1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c91906139cd565b610c71565b005b34801561035f57600080fd5b50610368610d5b565b6040516103759190613a9d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613b1d565b610ded565b6040516103b29190613b78565b60405180910390f35b3480156103c757600080fd5b506103d0610e0b565b6040516103dd9190613b78565b60405180910390f35b3480156103f257600080fd5b506103fb610eab565b6040516104089190613ba2565b60405180910390f35b34801561041d57600080fd5b50610426610eb5565b6040516104339190613ba2565b60405180910390f35b34801561044857600080fd5b50610451610ebb565b60405161045e9190613bcc565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613be7565b610ee1565b60405161049b9190613b78565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613c66565b610fd9565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613ca6565b6110f1565b6040516105019190613b78565b60405180910390f35b34801561051657600080fd5b5061051f611111565b60405161052c9190613cef565b60405180910390f35b34801561054157600080fd5b5061054a61111a565b6040516105579190613b78565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613b1d565b61112d565b6040516105949190613b78565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613d0a565b6111d9565b005b3480156105d257600080fd5b506105db6112c2565b6040516105e89190613bcc565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ca6565b6112e6565b6040516106259190613b78565b60405180910390f35b34801561063a57600080fd5b50610655600480360381019061065091906139cd565b61133c565b6040516106629190613b78565b60405180910390f35b34801561067757600080fd5b506106806114de565b60405161068d9190613ba2565b60405180910390f35b3480156106a257600080fd5b506106ab6114e4565b6040516106b89190613ba2565b60405180910390f35b3480156106cd57600080fd5b506106d66114ea565b6040516106e39190613ba2565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906139cd565b6114f0565b005b34801561072157600080fd5b5061072a6115da565b6040516107379190613ba2565b60405180910390f35b34801561074c57600080fd5b506107556115e0565b005b34801561076357600080fd5b5061077e60048036038101906107799190613ca6565b6115e2565b60405161078b9190613ba2565b60405180910390f35b3480156107a057600080fd5b506107a961162a565b005b3480156107b757600080fd5b506107c06116b2565b6040516107cd9190613ba2565b60405180910390f35b3480156107e257600080fd5b506107eb6116b8565b6040516107f89190613ba2565b60405180910390f35b34801561080d57600080fd5b506108166116be565b6040516108239190613b78565b60405180910390f35b34801561083857600080fd5b506108416116d1565b60405161084e9190613bcc565b60405180910390f35b34801561086357600080fd5b5061087e60048036038101906108799190613d37565b6116fb565b005b34801561088c57600080fd5b50610895611794565b6040516108a29190613ba2565b60405180910390f35b3480156108b757600080fd5b506108c061179a565b6040516108cd9190613a9d565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190613b1d565b61182c565b60405161090a9190613b78565b60405180910390f35b34801561091f57600080fd5b50610928611917565b6040516109359190613dc3565b60405180910390f35b34801561094a57600080fd5b5061095361193b565b005b34801561096157600080fd5b5061097c60048036038101906109779190613b1d565b611a8b565b6040516109899190613b78565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ca6565b611aa9565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190613c66565b611b69565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613c66565b611c40565b005b348015610a1957600080fd5b50610a346004803603810190610a2f9190613d0a565b611d65565b005b348015610a4257600080fd5b50610a4b611e4e565b604051610a589190613b78565b60405180910390f35b348015610a6d57600080fd5b50610a76611e61565b604051610a839190613b78565b60405180910390f35b348015610a9857600080fd5b50610aa1611f01565b604051610aae9190613b78565b60405180910390f35b348015610ac357600080fd5b50610acc611f14565b005b348015610ada57600080fd5b50610ae3611f16565b604051610af09190613ba2565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613dde565b611f1c565b604051610b2d9190613ba2565b60405180910390f35b348015610b4257600080fd5b50610b4b611fa3565b604051610b589190613ba2565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190613ca6565b611fa9565b005b348015610b9657600080fd5b50610b9f6120e5565b604051610bac9190613ba2565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ca6565b6120eb565b005b348015610bea57600080fd5b50610bf36121e2565b604051610c009190613bcc565b60405180910390f35b348015610c1557600080fd5b50610c1e612208565b604051610c2b9190613ba2565b60405180910390f35b348015610c4057600080fd5b50610c5b6004803603810190610c569190613ca6565b61220e565b604051610c689190613b78565b60405180910390f35b610c7961222e565b73ffffffffffffffffffffffffffffffffffffffff16610c976116d1565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613e6a565b60405180910390fd5b8160138190555080601481905550601454601354610d0b9190613eb9565b60128190555060326012541115610d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4e90613f39565b60405180910390fd5b5050565b606060038054610d6a90613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9690613f88565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b6000610e01610dfa61222e565b8484612236565b6001905092915050565b6000610e1561222e565b73ffffffffffffffffffffffffffffffffffffffff16610e336116d1565b73ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090613e6a565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6000600254905090565b60165481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610eee8484846123ff565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3961222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb09061402b565b60405180910390fd5b610fcd85610fc561222e565b858403612236565b60019150509392505050565b610fe161222e565b73ffffffffffffffffffffffffffffffffffffffff16610fff6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613e6a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906140bd565b60405180910390fd5b6110ed8282613032565b5050565b60186020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600c60009054906101000a900460ff1681565b60006111cf61113a61222e565b84846001600061114861222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ca9190613eb9565b612236565b6001905092915050565b6111e161222e565b73ffffffffffffffffffffffffffffffffffffffff166111ff6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613e6a565b60405180910390fd5b6005811015611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061414f565b60405180910390fd5b6103e86112a4610eab565b826112af919061416f565b6112b991906141e0565b600b8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061134661222e565b73ffffffffffffffffffffffffffffffffffffffff166113646116d1565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613e6a565b60405180910390fd5b60018310156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590614283565b60405180910390fd5b6101f4831115611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614315565b60405180910390fd5b81831115611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d906143a7565b60405180910390fd5b620186a0611492610eab565b8461149d919061416f565b6114a791906141e0565b600981905550620186a06114b9610eab565b836114c4919061416f565b6114ce91906141e0565b6008819055506001905092915050565b60155481565b60095481565b600b5481565b6114f861222e565b73ffffffffffffffffffffffffffffffffffffffff166115166116d1565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613e6a565b60405180910390fd5b816010819055508060118190555060115460105461158a9190613eb9565b600f819055506032600f5411156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613f39565b60405180910390fd5b5050565b60125481565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163261222e565b73ffffffffffffffffffffffffffffffffffffffff166116506116d1565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613e6a565b60405180910390fd5b6116b060006130d3565b565b60085481565b600a5481565b600c60019054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61170361222e565b73ffffffffffffffffffffffffffffffffffffffff166117216116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613e6a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60135481565b6060600480546117a990613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590613f88565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b5050505050905090565b6000806001600061183b61222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614439565b60405180910390fd5b61190c61190361222e565b85858403612236565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61194361222e565b73ffffffffffffffffffffffffffffffffffffffff166119616116d1565b73ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90613e6a565b60405180910390fd5b600c60029054906101000a900460ff1615611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906144a5565b60405180910390fd5b60646010819055506064601181905550601154601054611a279190613eb9565b600f8190555060966013819055506096601481905550601454601354611a4d9190613eb9565b6012819055506001600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000611a9f611a9861222e565b84846123ff565b6001905092915050565b611ab161222e565b73ffffffffffffffffffffffffffffffffffffffff16611acf6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613e6a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b7161222e565b73ffffffffffffffffffffffffffffffffffffffff16611b8f6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613e6a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c4861222e565b73ffffffffffffffffffffffffffffffffffffffff16611c666116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390613e6a565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d599190613b78565b60405180910390a25050565b611d6d61222e565b73ffffffffffffffffffffffffffffffffffffffff16611d8b6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613e6a565b60405180910390fd5b6001811015611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614537565b60405180910390fd5b6103e8611e30610eab565b82611e3b919061416f565b611e4591906141e0565b600a8190555050565b600c60029054906101000a900460ff1681565b6000611e6b61222e565b73ffffffffffffffffffffffffffffffffffffffff16611e896116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed690613e6a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b600e60009054906101000a900460ff1681565b565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b611fb161222e565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613e6a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3b4d0fc34e8ba589fdc51f0660be78887c301d81544872990a389d4713f2e1be60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6120f361222e565b73ffffffffffffffffffffffffffffffffffffffff166121116116d1565b73ffffffffffffffffffffffffffffffffffffffff1614612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd906145c9565b60405180910390fd5b6121df816130d3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60196020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061465b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906146ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f29190613ba2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124659061477f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614811565b60405180910390fd5b600081036124f6576124f183836000613199565b61302d565b600c60009054906101000a900460ff1615612bb9576125136116d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561258157506125516116d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ba5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260d5750600560149054906101000a900460ff16155b15612bb857600c60029054906101000a900460ff1661270757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126c75750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd9061487d565b60405180910390fd5b5b600e60009054906101000a900460ff16156128cf576127246116d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127ab57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561280357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ce5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614935565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129725750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1957600a548111156129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b3906149c7565b60405180910390fd5b600b546129c8836115e2565b826129d39190613eb9565b1115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614a33565b60405180910390fd5b612bb7565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612abc5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0b57600a54811115612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd90614ac5565b60405180910390fd5b612bb6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bb557600b54612b68836115e2565b82612b739190613eb9565b1115612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90614a33565b60405180910390fd5b5b5b5b5b5b6000612bc4306115e2565b905060006009548210159050808015612be95750600c60019054906101000a900460ff165b8015612c025750600560149054906101000a900460ff16155b8015612c585750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cae5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d045750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d48576001600560146101000a81548160ff021916908315150217905550612d2c613418565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfe5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0857600090505b6000811561301d57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6b57506000601254115b15612f0657612e99612710612e8b6012548861360d90919063ffffffff16565b61362390919063ffffffff16565b905060125460145482612eac919061416f565b612eb691906141e0565b60166000828254612ec79190613eb9565b9250508190555060125460135482612edf919061416f565b612ee991906141e0565b60156000828254612efa9190613eb9565b92505081905550612ff9565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6157506000600f54115b15612ff857612f8f6103e8612f81600f548861360d90919063ffffffff16565b61362390919063ffffffff16565b9050600f5460115482612fa2919061416f565b612fac91906141e0565b60166000828254612fbd9190613eb9565b92505081905550600f5460105482612fd5919061416f565b612fdf91906141e0565b60156000828254612ff09190613eb9565b925050819055505b5b600081111561300e5761300d873083613199565b5b808561301a9190614ae5565b94505b613028878787613199565b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff9061477f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90614811565b60405180910390fd5b613282838383613639565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ff90614b8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339b9190613eb9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133ff9190613ba2565b60405180910390a361341284848461363e565b50505050565b6000613423306115e2565b905060006015546016546134379190613eb9565b90506000808314806134495750600082145b156134565750505061360b565b6008548311156134665760085492505b600060028360165486613479919061416f565b61348391906141e0565b61348d91906141e0565b905060006134a4828661364390919063ffffffff16565b905060004790506134b482613659565b60006134c9824761364390919063ffffffff16565b905060006134f4876134e66015548561360d90919063ffffffff16565b61362390919063ffffffff16565b9050600081836135049190614ae5565b9050600060168190555060006015819055506000861180156135265750600081115b15613573576135358682613896565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161356a93929190614bab565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b990614c13565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b5050809750505050505050505050505b565b6000818361361b919061416f565b905092915050565b6000818361363191906141e0565b905092915050565b505050565b505050565b600081836136519190614ae5565b905092915050565b6000600267ffffffffffffffff81111561367657613675614c28565b5b6040519080825280602002602001820160405280156136a45781602001602082028036833780820191505090505b50905030816000815181106136bc576136bb614c57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137859190614c9b565b8160018151811061379957613798614c57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137fe307f000000000000000000000000000000000000000000000000000000000000000084612236565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613860959493929190614dc1565b600060405180830381600087803b15801561387a57600080fd5b505af115801561388e573d6000803e3d6000fd5b505050505050565b6138c1307f000000000000000000000000000000000000000000000000000000000000000084612236565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161394896959493929190614e1b565b60606040518083038185885af1158015613966573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398b9190614e91565b5050505050565b600080fd5b6000819050919050565b6139aa81613997565b81146139b557600080fd5b50565b6000813590506139c7816139a1565b92915050565b600080604083850312156139e4576139e3613992565b5b60006139f2858286016139b8565b9250506020613a03858286016139b8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a47578082015181840152602081019050613a2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a6f82613a0d565b613a798185613a18565b9350613a89818560208601613a29565b613a9281613a53565b840191505092915050565b60006020820190508181036000830152613ab78184613a64565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aea82613abf565b9050919050565b613afa81613adf565b8114613b0557600080fd5b50565b600081359050613b1781613af1565b92915050565b60008060408385031215613b3457613b33613992565b5b6000613b4285828601613b08565b9250506020613b53858286016139b8565b9150509250929050565b60008115159050919050565b613b7281613b5d565b82525050565b6000602082019050613b8d6000830184613b69565b92915050565b613b9c81613997565b82525050565b6000602082019050613bb76000830184613b93565b92915050565b613bc681613adf565b82525050565b6000602082019050613be16000830184613bbd565b92915050565b600080600060608486031215613c0057613bff613992565b5b6000613c0e86828701613b08565b9350506020613c1f86828701613b08565b9250506040613c30868287016139b8565b9150509250925092565b613c4381613b5d565b8114613c4e57600080fd5b50565b600081359050613c6081613c3a565b92915050565b60008060408385031215613c7d57613c7c613992565b5b6000613c8b85828601613b08565b9250506020613c9c85828601613c51565b9150509250929050565b600060208284031215613cbc57613cbb613992565b5b6000613cca84828501613b08565b91505092915050565b600060ff82169050919050565b613ce981613cd3565b82525050565b6000602082019050613d046000830184613ce0565b92915050565b600060208284031215613d2057613d1f613992565b5b6000613d2e848285016139b8565b91505092915050565b600060208284031215613d4d57613d4c613992565b5b6000613d5b84828501613c51565b91505092915050565b6000819050919050565b6000613d89613d84613d7f84613abf565b613d64565b613abf565b9050919050565b6000613d9b82613d6e565b9050919050565b6000613dad82613d90565b9050919050565b613dbd81613da2565b82525050565b6000602082019050613dd86000830184613db4565b92915050565b60008060408385031215613df557613df4613992565b5b6000613e0385828601613b08565b9250506020613e1485828601613b08565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e54602083613a18565b9150613e5f82613e1e565b602082019050919050565b60006020820190508181036000830152613e8381613e47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ec482613997565b9150613ecf83613997565b9250828201905080821115613ee757613ee6613e8a565b5b92915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613f23601c83613a18565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b602082108103613fb357613fb2613f59565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614015602883613a18565b915061402082613fb9565b604082019050919050565b6000602082019050818103600083015261404481614008565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6578747261414d4d506169727300000000000000000000000000000000000000602082015250565b60006140a7602d83613a18565b91506140b28261404b565b604082019050919050565b600060208201905081810360008301526140d68161409a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f7765722060008201527f7468616e20302e35250000000000000000000000000000000000000000000000602082015250565b6000614139602983613a18565b9150614144826140dd565b604082019050919050565b600060208201905081810360008301526141688161412c565b9050919050565b600061417a82613997565b915061418583613997565b925082820261419381613997565b915082820484148315176141aa576141a9613e8a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141eb82613997565b91506141f683613997565b925082614206576142056141b1565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061426d603583613a18565b915061427882614211565b604082019050919050565b6000602082019050818103600083015261429c81614260565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142ff603483613a18565b915061430a826142a3565b604082019050919050565b6000602082019050818103600083015261432e816142f2565b9050919050565b7f5468652068696768657220626f756e646172792073686f756c6420626520686960008201527f67686572206f7220657175616c20746f20746865206c6f776572206f6e650000602082015250565b6000614391603e83613a18565b915061439c82614335565b604082019050919050565b600060208201905081810360008301526143c081614384565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614423602583613a18565b915061442e826143c7565b604082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f54726164696e672068617320616c7265616479206265656e20656e61626c6564600082015250565b600061448f602083613a18565b915061449a82614459565b602082019050919050565b600060208201905081810360008301526144be81614482565b9050919050565b7f43616e6e6f7420736574206d617854784c696d6974206c6f776572207468616e60008201527f20302e3125000000000000000000000000000000000000000000000000000000602082015250565b6000614521602583613a18565b915061452c826144c5565b604082019050919050565b6000602082019050818103600083015261455081614514565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145b3602683613a18565b91506145be82614557565b604082019050919050565b600060208201905081810360008301526145e2816145a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614645602483613a18565b9150614650826145e9565b604082019050919050565b6000602082019050818103600083015261467481614638565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d7602283613a18565b91506146e28261467b565b604082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614769602583613a18565b91506147748261470d565b604082019050919050565b600060208201905081810360008301526147988161475c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147fb602383613a18565b91506148068261479f565b604082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614867601683613a18565b915061487282614831565b602082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061491f604983613a18565b915061492a8261489d565b606082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854784c696d69742e000000000000000000000000000000000000000000602082015250565b60006149b1602b83613a18565b91506149bc82614955565b604082019050919050565b600060208201905081810360008301526149e0816149a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a1d601383613a18565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854784c696d69742e0000000000000000000000000000000000000000602082015250565b6000614aaf602c83613a18565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b6000614af082613997565b9150614afb83613997565b9250828203905081811115614b1357614b12613e8a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b75602683613a18565b9150614b8082614b19565b604082019050919050565b60006020820190508181036000830152614ba481614b68565b9050919050565b6000606082019050614bc06000830186613b93565b614bcd6020830185613b93565b614bda6040830184613b93565b949350505050565b600081905092915050565b50565b6000614bfd600083614be2565b9150614c0882614bed565b600082019050919050565b6000614c1e82614bf0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c9581613af1565b92915050565b600060208284031215614cb157614cb0613992565b5b6000614cbf84828501614c86565b91505092915050565b6000819050919050565b6000614ced614ce8614ce384614cc8565b613d64565b613997565b9050919050565b614cfd81614cd2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d3881613adf565b82525050565b6000614d4a8383614d2f565b60208301905092915050565b6000602082019050919050565b6000614d6e82614d03565b614d788185614d0e565b9350614d8383614d1f565b8060005b83811015614db4578151614d9b8882614d3e565b9750614da683614d56565b925050600181019050614d87565b5085935050505092915050565b600060a082019050614dd66000830188613b93565b614de36020830187614cf4565b8181036040830152614df58186614d63565b9050614e046060830185613bbd565b614e116080830184613b93565b9695505050505050565b600060c082019050614e306000830189613bbd565b614e3d6020830188613b93565b614e4a6040830187614cf4565b614e576060830186614cf4565b614e646080830185613bbd565b614e7160a0830184613b93565b979650505050505050565b600081519050614e8b816139a1565b92915050565b600080600060608486031215614eaa57614ea9613992565b5b6000614eb886828701614e7c565b9350506020614ec986828701614e7c565b9250506040614eda86828701614e7c565b915050925092509256fea2646970667358221220a661166845106dd1871dc1c8118e84d1b3ba7a10e885d9f24e0be21acceecbc564736f6c63430008130033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80638036d590116101ab578063c2c327d1116100f7578063e0a2717411610095578063f2fde38b1161006f578063f2fde38b14610bb5578063f3f7338e14610bde578063f637434214610c09578063fdb6531f14610c3457610325565b8063e0a2717414610b36578063ea90fcc314610b61578063f11a24d314610b8a57610325565b8063ca6a14e1116100d1578063ca6a14e114610a8c578063d65ab5f214610ab7578063d85ba06314610ace578063dd62ed3e14610af957610325565b8063c2c327d114610a0d578063c53d4d5314610a36578063c77847b114610a6157610325565b8063a457c2d711610164578063a9059cbb1161013e578063a9059cbb14610955578063aaae545a14610992578063b34117ba146109bb578063c0246668146109e457610325565b8063a457c2d7146108d6578063a531721614610913578063a57afffa1461093e57610325565b80638036d590146107d657806389add02c146108015780638da5cb5b1461082c57806391d782ce1461085757806394516c7f1461088057806395d89b41146108ab57610325565b80634324deae1161026a57806366a88d96116102235780636cbc2ded116101fd5780636cbc2ded1461074057806370a0823114610757578063715018a61461079457806377c18352146107ab57610325565b806366a88d96146106c157806366ca9b83146106ec5780636a486a8e1461071557610325565b80634324deae1461059d57806349021b6e146105c65780634fbee193146105f15780635016c39f1461062e578063555b90751461066b57806359bdf1df1461069657610325565b80632301d775116102d75780632c505e90116102b15780632c505e90146104cd578063313ce5671461050a5780633582ad2314610535578063395093511461056057610325565b80632301d7751461043c57806323b872dd1461046757806327396701146104a457610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780630ea0d3d2146103bb57806318160ddd146103e65780631a8145bb1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c91906139cd565b610c71565b005b34801561035f57600080fd5b50610368610d5b565b6040516103759190613a9d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613b1d565b610ded565b6040516103b29190613b78565b60405180910390f35b3480156103c757600080fd5b506103d0610e0b565b6040516103dd9190613b78565b60405180910390f35b3480156103f257600080fd5b506103fb610eab565b6040516104089190613ba2565b60405180910390f35b34801561041d57600080fd5b50610426610eb5565b6040516104339190613ba2565b60405180910390f35b34801561044857600080fd5b50610451610ebb565b60405161045e9190613bcc565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613be7565b610ee1565b60405161049b9190613b78565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613c66565b610fd9565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613ca6565b6110f1565b6040516105019190613b78565b60405180910390f35b34801561051657600080fd5b5061051f611111565b60405161052c9190613cef565b60405180910390f35b34801561054157600080fd5b5061054a61111a565b6040516105579190613b78565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613b1d565b61112d565b6040516105949190613b78565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613d0a565b6111d9565b005b3480156105d257600080fd5b506105db6112c2565b6040516105e89190613bcc565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ca6565b6112e6565b6040516106259190613b78565b60405180910390f35b34801561063a57600080fd5b50610655600480360381019061065091906139cd565b61133c565b6040516106629190613b78565b60405180910390f35b34801561067757600080fd5b506106806114de565b60405161068d9190613ba2565b60405180910390f35b3480156106a257600080fd5b506106ab6114e4565b6040516106b89190613ba2565b60405180910390f35b3480156106cd57600080fd5b506106d66114ea565b6040516106e39190613ba2565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906139cd565b6114f0565b005b34801561072157600080fd5b5061072a6115da565b6040516107379190613ba2565b60405180910390f35b34801561074c57600080fd5b506107556115e0565b005b34801561076357600080fd5b5061077e60048036038101906107799190613ca6565b6115e2565b60405161078b9190613ba2565b60405180910390f35b3480156107a057600080fd5b506107a961162a565b005b3480156107b757600080fd5b506107c06116b2565b6040516107cd9190613ba2565b60405180910390f35b3480156107e257600080fd5b506107eb6116b8565b6040516107f89190613ba2565b60405180910390f35b34801561080d57600080fd5b506108166116be565b6040516108239190613b78565b60405180910390f35b34801561083857600080fd5b506108416116d1565b60405161084e9190613bcc565b60405180910390f35b34801561086357600080fd5b5061087e60048036038101906108799190613d37565b6116fb565b005b34801561088c57600080fd5b50610895611794565b6040516108a29190613ba2565b60405180910390f35b3480156108b757600080fd5b506108c061179a565b6040516108cd9190613a9d565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190613b1d565b61182c565b60405161090a9190613b78565b60405180910390f35b34801561091f57600080fd5b50610928611917565b6040516109359190613dc3565b60405180910390f35b34801561094a57600080fd5b5061095361193b565b005b34801561096157600080fd5b5061097c60048036038101906109779190613b1d565b611a8b565b6040516109899190613b78565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613ca6565b611aa9565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190613c66565b611b69565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613c66565b611c40565b005b348015610a1957600080fd5b50610a346004803603810190610a2f9190613d0a565b611d65565b005b348015610a4257600080fd5b50610a4b611e4e565b604051610a589190613b78565b60405180910390f35b348015610a6d57600080fd5b50610a76611e61565b604051610a839190613b78565b60405180910390f35b348015610a9857600080fd5b50610aa1611f01565b604051610aae9190613b78565b60405180910390f35b348015610ac357600080fd5b50610acc611f14565b005b348015610ada57600080fd5b50610ae3611f16565b604051610af09190613ba2565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613dde565b611f1c565b604051610b2d9190613ba2565b60405180910390f35b348015610b4257600080fd5b50610b4b611fa3565b604051610b589190613ba2565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190613ca6565b611fa9565b005b348015610b9657600080fd5b50610b9f6120e5565b604051610bac9190613ba2565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ca6565b6120eb565b005b348015610bea57600080fd5b50610bf36121e2565b604051610c009190613bcc565b60405180910390f35b348015610c1557600080fd5b50610c1e612208565b604051610c2b9190613ba2565b60405180910390f35b348015610c4057600080fd5b50610c5b6004803603810190610c569190613ca6565b61220e565b604051610c689190613b78565b60405180910390f35b610c7961222e565b73ffffffffffffffffffffffffffffffffffffffff16610c976116d1565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613e6a565b60405180910390fd5b8160138190555080601481905550601454601354610d0b9190613eb9565b60128190555060326012541115610d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4e90613f39565b60405180910390fd5b5050565b606060038054610d6a90613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9690613f88565b8015610de35780601f10610db857610100808354040283529160200191610de3565b820191906000526020600020905b815481529060010190602001808311610dc657829003601f168201915b5050505050905090565b6000610e01610dfa61222e565b8484612236565b6001905092915050565b6000610e1561222e565b73ffffffffffffffffffffffffffffffffffffffff16610e336116d1565b73ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090613e6a565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6000600254905090565b60165481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610eee8484846123ff565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3961222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb09061402b565b60405180910390fd5b610fcd85610fc561222e565b858403612236565b60019150509392505050565b610fe161222e565b73ffffffffffffffffffffffffffffffffffffffff16610fff6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613e6a565b60405180910390fd5b7f0000000000000000000000006eec66dab0e6a21f367fabba2c47c449de7d3a3173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906140bd565b60405180910390fd5b6110ed8282613032565b5050565b60186020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600c60009054906101000a900460ff1681565b60006111cf61113a61222e565b84846001600061114861222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ca9190613eb9565b612236565b6001905092915050565b6111e161222e565b73ffffffffffffffffffffffffffffffffffffffff166111ff6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613e6a565b60405180910390fd5b6005811015611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061414f565b60405180910390fd5b6103e86112a4610eab565b826112af919061416f565b6112b991906141e0565b600b8190555050565b7f0000000000000000000000006eec66dab0e6a21f367fabba2c47c449de7d3a3181565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061134661222e565b73ffffffffffffffffffffffffffffffffffffffff166113646116d1565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613e6a565b60405180910390fd5b60018310156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590614283565b60405180910390fd5b6101f4831115611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614315565b60405180910390fd5b81831115611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d906143a7565b60405180910390fd5b620186a0611492610eab565b8461149d919061416f565b6114a791906141e0565b600981905550620186a06114b9610eab565b836114c4919061416f565b6114ce91906141e0565b6008819055506001905092915050565b60155481565b60095481565b600b5481565b6114f861222e565b73ffffffffffffffffffffffffffffffffffffffff166115166116d1565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613e6a565b60405180910390fd5b816010819055508060118190555060115460105461158a9190613eb9565b600f819055506032600f5411156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613f39565b60405180910390fd5b5050565b60125481565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163261222e565b73ffffffffffffffffffffffffffffffffffffffff166116506116d1565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613e6a565b60405180910390fd5b6116b060006130d3565b565b60085481565b600a5481565b600c60019054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61170361222e565b73ffffffffffffffffffffffffffffffffffffffff166117216116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613e6a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60135481565b6060600480546117a990613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590613f88565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b5050505050905090565b6000806001600061183b61222e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614439565b60405180910390fd5b61190c61190361222e565b85858403612236565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b61194361222e565b73ffffffffffffffffffffffffffffffffffffffff166119616116d1565b73ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90613e6a565b60405180910390fd5b600c60029054906101000a900460ff1615611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe906144a5565b60405180910390fd5b60646010819055506064601181905550601154601054611a279190613eb9565b600f8190555060966013819055506096601481905550601454601354611a4d9190613eb9565b6012819055506001600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000611a9f611a9861222e565b84846123ff565b6001905092915050565b611ab161222e565b73ffffffffffffffffffffffffffffffffffffffff16611acf6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613e6a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b7161222e565b73ffffffffffffffffffffffffffffffffffffffff16611b8f6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613e6a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c4861222e565b73ffffffffffffffffffffffffffffffffffffffff16611c666116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390613e6a565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d599190613b78565b60405180910390a25050565b611d6d61222e565b73ffffffffffffffffffffffffffffffffffffffff16611d8b6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613e6a565b60405180910390fd5b6001811015611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614537565b60405180910390fd5b6103e8611e30610eab565b82611e3b919061416f565b611e4591906141e0565b600a8190555050565b600c60029054906101000a900460ff1681565b6000611e6b61222e565b73ffffffffffffffffffffffffffffffffffffffff16611e896116d1565b73ffffffffffffffffffffffffffffffffffffffff1614611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed690613e6a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b600e60009054906101000a900460ff1681565b565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b611fb161222e565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6116d1565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613e6a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3b4d0fc34e8ba589fdc51f0660be78887c301d81544872990a389d4713f2e1be60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b6120f361222e565b73ffffffffffffffffffffffffffffffffffffffff166121116116d1565b73ffffffffffffffffffffffffffffffffffffffff1614612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd906145c9565b60405180910390fd5b6121df816130d3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60196020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061465b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906146ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f29190613ba2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124659061477f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614811565b60405180910390fd5b600081036124f6576124f183836000613199565b61302d565b600c60009054906101000a900460ff1615612bb9576125136116d1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561258157506125516116d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ba5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561260d5750600560149054906101000a900460ff16155b15612bb857600c60029054906101000a900460ff1661270757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126c75750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd9061487d565b60405180910390fd5b5b600e60009054906101000a900460ff16156128cf576127246116d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127ab57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561280357507f0000000000000000000000006eec66dab0e6a21f367fabba2c47c449de7d3a3173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ce5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614935565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129725750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1957600a548111156129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b3906149c7565b60405180910390fd5b600b546129c8836115e2565b826129d39190613eb9565b1115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614a33565b60405180910390fd5b612bb7565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612abc5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0b57600a54811115612b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afd90614ac5565b60405180910390fd5b612bb6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bb557600b54612b68836115e2565b82612b739190613eb9565b1115612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90614a33565b60405180910390fd5b5b5b5b5b5b6000612bc4306115e2565b905060006009548210159050808015612be95750600c60019054906101000a900460ff165b8015612c025750600560149054906101000a900460ff16155b8015612c585750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cae5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d045750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d48576001600560146101000a81548160ff021916908315150217905550612d2c613418565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfe5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0857600090505b6000811561301d57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6b57506000601254115b15612f0657612e99612710612e8b6012548861360d90919063ffffffff16565b61362390919063ffffffff16565b905060125460145482612eac919061416f565b612eb691906141e0565b60166000828254612ec79190613eb9565b9250508190555060125460135482612edf919061416f565b612ee991906141e0565b60156000828254612efa9190613eb9565b92505081905550612ff9565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6157506000600f54115b15612ff857612f8f6103e8612f81600f548861360d90919063ffffffff16565b61362390919063ffffffff16565b9050600f5460115482612fa2919061416f565b612fac91906141e0565b60166000828254612fbd9190613eb9565b92505081905550600f5460105482612fd5919061416f565b612fdf91906141e0565b60156000828254612ff09190613eb9565b925050819055505b5b600081111561300e5761300d873083613199565b5b808561301a9190614ae5565b94505b613028878787613199565b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff9061477f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e90614811565b60405180910390fd5b613282838383613639565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ff90614b8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339b9190613eb9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133ff9190613ba2565b60405180910390a361341284848461363e565b50505050565b6000613423306115e2565b905060006015546016546134379190613eb9565b90506000808314806134495750600082145b156134565750505061360b565b6008548311156134665760085492505b600060028360165486613479919061416f565b61348391906141e0565b61348d91906141e0565b905060006134a4828661364390919063ffffffff16565b905060004790506134b482613659565b60006134c9824761364390919063ffffffff16565b905060006134f4876134e66015548561360d90919063ffffffff16565b61362390919063ffffffff16565b9050600081836135049190614ae5565b9050600060168190555060006015819055506000861180156135265750600081115b15613573576135358682613896565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161356a93929190614bab565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b990614c13565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b5050809750505050505050505050505b565b6000818361361b919061416f565b905092915050565b6000818361363191906141e0565b905092915050565b505050565b505050565b600081836136519190614ae5565b905092915050565b6000600267ffffffffffffffff81111561367657613675614c28565b5b6040519080825280602002602001820160405280156136a45781602001602082028036833780820191505090505b50905030816000815181106136bc576136bb614c57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137859190614c9b565b8160018151811061379957613798614c57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137fe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612236565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613860959493929190614dc1565b600060405180830381600087803b15801561387a57600080fd5b505af115801561388e573d6000803e3d6000fd5b505050505050565b6138c1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612236565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161394896959493929190614e1b565b60606040518083038185885af1158015613966573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398b9190614e91565b5050505050565b600080fd5b6000819050919050565b6139aa81613997565b81146139b557600080fd5b50565b6000813590506139c7816139a1565b92915050565b600080604083850312156139e4576139e3613992565b5b60006139f2858286016139b8565b9250506020613a03858286016139b8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a47578082015181840152602081019050613a2c565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a6f82613a0d565b613a798185613a18565b9350613a89818560208601613a29565b613a9281613a53565b840191505092915050565b60006020820190508181036000830152613ab78184613a64565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aea82613abf565b9050919050565b613afa81613adf565b8114613b0557600080fd5b50565b600081359050613b1781613af1565b92915050565b60008060408385031215613b3457613b33613992565b5b6000613b4285828601613b08565b9250506020613b53858286016139b8565b9150509250929050565b60008115159050919050565b613b7281613b5d565b82525050565b6000602082019050613b8d6000830184613b69565b92915050565b613b9c81613997565b82525050565b6000602082019050613bb76000830184613b93565b92915050565b613bc681613adf565b82525050565b6000602082019050613be16000830184613bbd565b92915050565b600080600060608486031215613c0057613bff613992565b5b6000613c0e86828701613b08565b9350506020613c1f86828701613b08565b9250506040613c30868287016139b8565b9150509250925092565b613c4381613b5d565b8114613c4e57600080fd5b50565b600081359050613c6081613c3a565b92915050565b60008060408385031215613c7d57613c7c613992565b5b6000613c8b85828601613b08565b9250506020613c9c85828601613c51565b9150509250929050565b600060208284031215613cbc57613cbb613992565b5b6000613cca84828501613b08565b91505092915050565b600060ff82169050919050565b613ce981613cd3565b82525050565b6000602082019050613d046000830184613ce0565b92915050565b600060208284031215613d2057613d1f613992565b5b6000613d2e848285016139b8565b91505092915050565b600060208284031215613d4d57613d4c613992565b5b6000613d5b84828501613c51565b91505092915050565b6000819050919050565b6000613d89613d84613d7f84613abf565b613d64565b613abf565b9050919050565b6000613d9b82613d6e565b9050919050565b6000613dad82613d90565b9050919050565b613dbd81613da2565b82525050565b6000602082019050613dd86000830184613db4565b92915050565b60008060408385031215613df557613df4613992565b5b6000613e0385828601613b08565b9250506020613e1485828601613b08565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e54602083613a18565b9150613e5f82613e1e565b602082019050919050565b60006020820190508181036000830152613e8381613e47565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ec482613997565b9150613ecf83613997565b9250828201905080821115613ee757613ee6613e8a565b5b92915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613f23601c83613a18565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b602082108103613fb357613fb2613f59565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614015602883613a18565b915061402082613fb9565b604082019050919050565b6000602082019050818103600083015261404481614008565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6578747261414d4d506169727300000000000000000000000000000000000000602082015250565b60006140a7602d83613a18565b91506140b28261404b565b604082019050919050565b600060208201905081810360008301526140d68161409a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f7765722060008201527f7468616e20302e35250000000000000000000000000000000000000000000000602082015250565b6000614139602983613a18565b9150614144826140dd565b604082019050919050565b600060208201905081810360008301526141688161412c565b9050919050565b600061417a82613997565b915061418583613997565b925082820261419381613997565b915082820484148315176141aa576141a9613e8a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141eb82613997565b91506141f683613997565b925082614206576142056141b1565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061426d603583613a18565b915061427882614211565b604082019050919050565b6000602082019050818103600083015261429c81614260565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142ff603483613a18565b915061430a826142a3565b604082019050919050565b6000602082019050818103600083015261432e816142f2565b9050919050565b7f5468652068696768657220626f756e646172792073686f756c6420626520686960008201527f67686572206f7220657175616c20746f20746865206c6f776572206f6e650000602082015250565b6000614391603e83613a18565b915061439c82614335565b604082019050919050565b600060208201905081810360008301526143c081614384565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614423602583613a18565b915061442e826143c7565b604082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f54726164696e672068617320616c7265616479206265656e20656e61626c6564600082015250565b600061448f602083613a18565b915061449a82614459565b602082019050919050565b600060208201905081810360008301526144be81614482565b9050919050565b7f43616e6e6f7420736574206d617854784c696d6974206c6f776572207468616e60008201527f20302e3125000000000000000000000000000000000000000000000000000000602082015250565b6000614521602583613a18565b915061452c826144c5565b604082019050919050565b6000602082019050818103600083015261455081614514565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145b3602683613a18565b91506145be82614557565b604082019050919050565b600060208201905081810360008301526145e2816145a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614645602483613a18565b9150614650826145e9565b604082019050919050565b6000602082019050818103600083015261467481614638565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d7602283613a18565b91506146e28261467b565b604082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614769602583613a18565b91506147748261470d565b604082019050919050565b600060208201905081810360008301526147988161475c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147fb602383613a18565b91506148068261479f565b604082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614867601683613a18565b915061487282614831565b602082019050919050565b600060208201905081810360008301526148968161485a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061491f604983613a18565b915061492a8261489d565b606082019050919050565b6000602082019050818103600083015261494e81614912565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854784c696d69742e000000000000000000000000000000000000000000602082015250565b60006149b1602b83613a18565b91506149bc82614955565b604082019050919050565b600060208201905081810360008301526149e0816149a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a1d601383613a18565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854784c696d69742e0000000000000000000000000000000000000000602082015250565b6000614aaf602c83613a18565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b6000614af082613997565b9150614afb83613997565b9250828203905081811115614b1357614b12613e8a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b75602683613a18565b9150614b8082614b19565b604082019050919050565b60006020820190508181036000830152614ba481614b68565b9050919050565b6000606082019050614bc06000830186613b93565b614bcd6020830185613b93565b614bda6040830184613b93565b949350505050565b600081905092915050565b50565b6000614bfd600083614be2565b9150614c0882614bed565b600082019050919050565b6000614c1e82614bf0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c9581613af1565b92915050565b600060208284031215614cb157614cb0613992565b5b6000614cbf84828501614c86565b91505092915050565b6000819050919050565b6000614ced614ce8614ce384614cc8565b613d64565b613997565b9050919050565b614cfd81614cd2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d3881613adf565b82525050565b6000614d4a8383614d2f565b60208301905092915050565b6000602082019050919050565b6000614d6e82614d03565b614d788185614d0e565b9350614d8383614d1f565b8060005b83811015614db4578151614d9b8882614d3e565b9750614da683614d56565b925050600181019050614d87565b5085935050505092915050565b600060a082019050614dd66000830188613b93565b614de36020830187614cf4565b8181036040830152614df58186614d63565b9050614e046060830185613bbd565b614e116080830184613b93565b9695505050505050565b600060c082019050614e306000830189613bbd565b614e3d6020830188613b93565b614e4a6040830187614cf4565b614e576060830186614cf4565b614e646080830185613bbd565b614e7160a0830184613b93565b979650505050505050565b600081519050614e8b816139a1565b92915050565b600080600060608486031215614eaa57614ea9613992565b5b6000614eb886828701614e7c565b9350506020614ec986828701614e7c565b9250506040614eda86828701614e7c565b915050925092509256fea2646970667358221220a661166845106dd1871dc1c8118e84d1b3ba7a10e885d9f24e0be21acceecbc564736f6c63430008130033
Deployed Bytecode Sourcemap
27894:16890:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35820:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6161:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8328:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32695:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7281:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28942:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28140:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8979:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36627:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29124:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7123:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28332:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9880:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34363:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28022:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37467:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33180:676;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28905:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28218:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28294:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35334:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28795:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44753;;;;;;;;;;;;;:::i;:::-;;7452:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1467:103;;;;;;;;;;;;;:::i;:::-;;28176:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28262:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;816:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35059:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28830:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6380:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10598:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27969:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32161:433;;;;;;;;;;;;;:::i;:::-;;7792:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37319:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34789:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36313:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34011:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28415:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32888:145;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28635:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44717:30;;;;;;;;;;;;;:::i;:::-;;28688:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8030:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28722:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37101:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28756:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1725:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28103:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28865:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29338:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35820:329;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35958:10:::1;35942:13;:26;;;;35998:13;35979:16;:32;;;;36054:16;;36038:13;;:32;;;;:::i;:::-;36022:13;:48;;;;36106:2;36089:13;;:19;;36081:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35820:329:::0;;:::o;6161:100::-;6215:13;6248:5;6241:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6161:100;:::o;8328:169::-;8411:4;8428:39;8437:12;:10;:12::i;:::-;8451:7;8460:6;8428:8;:39::i;:::-;8485:4;8478:11;;8328:169;;;;:::o;32695:125::-;32752:4;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32785:5:::1;32769:13;;:21;;;;;;;;;;;;;;;;;;32808:4;32801:11;;32695:125:::0;:::o;7281:108::-;7342:7;7369:12;;7362:19;;7281:108;:::o;28942:33::-;;;;:::o;28140:27::-;;;;;;;;;;;;;:::o;8979:492::-;9119:4;9136:36;9146:6;9154:9;9165:6;9136:9;:36::i;:::-;9185:24;9212:11;:19;9224:6;9212:19;;;;;;;;;;;;;;;:33;9232:12;:10;:12::i;:::-;9212:33;;;;;;;;;;;;;;;;9185:60;;9284:6;9264:16;:26;;9256:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9371:57;9380:6;9388:12;:10;:12::i;:::-;9421:6;9402:16;:25;9371:8;:57::i;:::-;9459:4;9452:11;;;8979:492;;;;;:::o;36627:282::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36761:13:::1;36753:21;;:4;:21;;::::0;36731:116:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36860:41;36889:4;36895:5;36860:28;:41::i;:::-;36627:282:::0;;:::o;29124:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;7123:93::-;7181:5;7206:2;7199:9;;7123:93;:::o;28332:32::-;;;;;;;;;;;;;:::o;9880:215::-;9968:4;9985:80;9994:12;:10;:12::i;:::-;10008:7;10054:10;10017:11;:25;10029:12;:10;:12::i;:::-;10017:25;;;;;;;;;;;;;;;:34;10043:7;10017:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9985:8;:80::i;:::-;10083:4;10076:11;;9880:215;;;;:::o;34363:241::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34471:1:::1;34461:6;:11;;34439:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34592:4;34578:13;:11;:13::i;:::-;34569:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;34552:14;:44;;;;34363:241:::0;:::o;28022:38::-;;;:::o;37467:126::-;37533:4;37557:19;:28;37577:7;37557:28;;;;;;;;;;;;;;;;;;;;;;;;;37550:35;;37467:126;;;:::o;33180:676::-;33297:4;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33351:1:::1;33341:6;:11;;33319:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33476:3;33466:6;:13;;33444:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33602:6;33592;:16;;33570:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33756:6;33741:13;:11;:13::i;:::-;33732:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;33709:20;:53;;;;33820:6;33805:13;:11;:13::i;:::-;33796:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;33773:20;:53;;;;33844:4;33837:11;;33180:676:::0;;;;:::o;28905:30::-;;;;:::o;28218:35::-;;;;:::o;28294:29::-;;;;:::o;35334:322::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35470:10:::1;35455:12;:25;;;;35509:13;35491:15;:31;;;;35563:15;;35548:12;;:30;;;;:::i;:::-;35533:12;:45;;;;35613:2;35597:12;;:18;;35589:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35334:322:::0;;:::o;28795:28::-;;;;:::o;44753:::-;:::o;7452:127::-;7526:7;7553:9;:18;7563:7;7553:18;;;;;;;;;;;;;;;;7546:25;;7452:127;;;:::o;1467:103::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1532:30:::1;1559:1;1532:18;:30::i;:::-;1467:103::o:0;28176:35::-;;;;:::o;28262:25::-;;;;:::o;28371:35::-;;;;;;;;;;;;;:::o;816:87::-;862:7;889:6;;;;;;;;;;;882:13;;816:87;:::o;35059:108::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35152:7:::1;35134:15;;:25;;;;;;;;;;;;;;;;;;35059:108:::0;:::o;28830:28::-;;;;:::o;6380:104::-;6436:13;6469:7;6462:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6380:104;:::o;10598:413::-;10691:4;10708:24;10735:11;:25;10747:12;:10;:12::i;:::-;10735:25;;;;;;;;;;;;;;;:34;10761:7;10735:34;;;;;;;;;;;;;;;;10708:61;;10808:15;10788:16;:35;;10780:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10901:67;10910:12;:10;:12::i;:::-;10924:7;10952:15;10933:16;:34;10901:8;:67::i;:::-;10999:4;10992:11;;;10598:413;;;;:::o;27969:46::-;;;:::o;32161:433::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32225:15:::1;;;;;;;;;;;32224:16;32216:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32303:3;32288:12;:18;;;;32335:3;32317:15;:21;;;;32379:15;;32364:12;;:30;;;;:::i;:::-;32349:12;:45;;;;32423:3;32407:13;:19;;;;32456:3;32437:16;:22;;;;32502:16;;32486:13;;:32;;;;:::i;:::-;32470:13;:48;;;;32549:4;32531:15;;:22;;;;;;;;;;;;;;;;;;32582:4;32564:15;;:22;;;;;;;;;;;;;;;;;;32161:433::o:0;7792:175::-;7878:4;7895:42;7905:12;:10;:12::i;:::-;7919:9;7930:6;7895:9;:42::i;:::-;7955:4;7948:11;;7792:175;;;;:::o;37319:140::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37440:11:::1;37422:15;;:29;;;;;;;;;;;;;;;;;;37319:140:::0;:::o;34789:155::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34932:4:::1;34897:24;:32;34922:6;34897:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34789:155:::0;;:::o;36313:182::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36429:8:::1;36398:19;:28;36418:7;36398:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36469:7;36453:34;;;36478:8;36453:34;;;;;;:::i;:::-;;;;;;;;36313:182:::0;;:::o;34011:230::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34115:1:::1;34105:6;:11;;34083:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;34229:4;34214:13;:11;:13::i;:::-;34205:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;34192:10;:41;;;;34011:230:::0;:::o;28415:35::-;;;;;;;;;;;;;:::o;32888:145::-;32953:4;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32998:5:::1;32970:25;;:33;;;;;;;;;;;;;;;;;;33021:4;33014:11;;32888:145:::0;:::o;28635:44::-;;;;;;;;;;;;;:::o;44717:30::-;:::o;28688:27::-;;;;:::o;8030:151::-;8119:7;8146:11;:18;8158:5;8146:18;;;;;;;;;;;;;;;:27;8165:7;8146:27;;;;;;;;;;;;;;;;8139:34;;8030:151;;;;:::o;28722:27::-;;;;:::o;37101:210::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37249:12:::1;;;;;;;;;;;37212:50;;37232:15;37212:50;;;;;;;;;;;;37288:15;37273:12;;:30;;;;;;;;;;;;;;;;;;37101:210:::0;:::o;28756:30::-;;;;:::o;1725:201::-;1047:12;:10;:12::i;:::-;1036:23;;:7;:5;:7::i;:::-;:23;;;1028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1834:1:::1;1814:22;;:8;:22;;::::0;1806:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1890:28;1909:8;1890:18;:28::i;:::-;1725:201:::0;:::o;28103:30::-;;;;;;;;;;;;;:::o;28865:31::-;;;;:::o;29338:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;190:98::-;243:7;270:10;263:17;;190:98;:::o;14282:380::-;14435:1;14418:19;;:5;:19;;;14410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14516:1;14497:21;;:7;:21;;;14489:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14600:6;14570:11;:18;14582:5;14570:18;;;;;;;;;;;;;;;:27;14589:7;14570:27;;;;;;;;;;;;;;;:36;;;;14638:7;14622:32;;14631:5;14622:32;;;14647:6;14622:32;;;;;;:::i;:::-;;;;;;;;14282:380;;;:::o;37601:4486::-;37749:1;37733:18;;:4;:18;;;37725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37826:1;37812:16;;:2;:16;;;37804:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37895:1;37885:6;:11;37881:93;;37913:28;37929:4;37935:2;37939:1;37913:15;:28::i;:::-;37956:7;;37881:93;37990:13;;;;;;;;;;;37986:2417;;;38050:7;:5;:7::i;:::-;38042:15;;:4;:15;;;;:49;;;;;38084:7;:5;:7::i;:::-;38078:13;;:2;:13;;;;38042:49;:86;;;;;38126:1;38112:16;;:2;:16;;;;38042:86;:128;;;;;38163:6;38149:21;;:2;:21;;;;38042:128;:162;;;;;38192:12;;;;;;;;;;;38191:13;38042:162;38020:2372;;;38244:15;;;;;;;;;;;38239:225;;38318:19;:25;38338:4;38318:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38347:19;:23;38367:2;38347:23;;;;;;;;;;;;;;;;;;;;;;;;;38318:52;38284:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;38239:225;38620:25;;;;;;;;;;;38616:641;;;38706:7;:5;:7::i;:::-;38700:13;;:2;:13;;;;:67;;;;;38756:10;38742:25;;:2;:25;;;;38700:67;:124;;;;;38810:13;38796:28;;:2;:28;;;;38700:124;38670:568;;;38988:12;38913:28;:39;38942:9;38913:39;;;;;;;;;;;;;;;;:87;38875:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;39202:12;39160:28;:39;39189:9;39160:39;;;;;;;;;;;;;;;:54;;;;38670:568;38616:641;39331:13;:19;39345:4;39331:19;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;;39376:24;:28;39401:2;39376:28;;;;;;;;;;;;;;;;;;;;;;;;;39375:29;39331:73;39305:1072;;;39491:10;;39481:6;:20;;39447:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;39679:14;;39662:13;39672:2;39662:9;:13::i;:::-;39653:6;:22;;;;:::i;:::-;:40;;39619:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;39305:1072;;;39862:13;:17;39876:2;39862:17;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;;39905:24;:30;39930:4;39905:30;;;;;;;;;;;;;;;;;;;;;;;;;39904:31;39862:73;39836:541;;;40022:10;;40012:6;:20;;39978:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;39836:541;;;40159:24;:28;40184:2;40159:28;;;;;;;;;;;;;;;;;;;;;;;;;40154:223;;40272:14;;40255:13;40265:2;40255:9;:13::i;:::-;40246:6;:22;;;;:::i;:::-;:40;;40212:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;40154:223;39836:541;39305:1072;38020:2372;37986:2417;40415:28;40446:24;40464:4;40446:9;:24::i;:::-;40415:55;;40483:12;40522:20;;40498;:44;;40483:59;;40573:7;:39;;;;;40597:15;;;;;;;;;;;40573:39;:69;;;;;40630:12;;;;;;;;;;;40629:13;40573:69;:106;;;;;40660:13;:19;40674:4;40660:19;;;;;;;;;;;;;;;;;;;;;;;;;40659:20;40573:106;:149;;;;;40697:19;:25;40717:4;40697:25;;;;;;;;;;;;;;;;;;;;;;;;;40696:26;40573:149;:190;;;;;40740:19;:23;40760:2;40740:23;;;;;;;;;;;;;;;;;;;;;;;;;40739:24;40573:190;40555:330;;;40805:4;40790:12;;:19;;;;;;;;;;;;;;;;;;40826:10;:8;:10::i;:::-;40868:5;40853:12;;:20;;;;;;;;;;;;;;;;;;40555:330;40897:12;40913;;;;;;;;;;;40912:13;40897:28;;41027:19;:25;41047:4;41027:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41056:19;:23;41076:2;41056:23;;;;;;;;;;;;;;;;;;;;;;;;;41027:52;41023:100;;;41106:5;41096:15;;41023:100;41135:12;41240:7;41236:798;;;41292:13;:17;41306:2;41292:17;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;41329:1;41313:13;;:17;41292:38;41288:597;;;41358:36;41388:5;41358:25;41369:13;;41358:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;41351:43;;41463:13;;41443:16;;41436:4;:23;;;;:::i;:::-;41435:41;;;;:::i;:::-;41413:18;;:63;;;;;;;:::i;:::-;;;;;;;;41539:13;;41522;;41515:4;:20;;;;:::i;:::-;41514:38;;;;:::i;:::-;41495:15;;:57;;;;;;;:::i;:::-;;;;;;;;41288:597;;;41614:13;:19;41628:4;41614:19;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;;41652:1;41637:12;;:16;41614:39;41610:275;;;41681:34;41710:4;41681:24;41692:12;;41681:6;:10;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;41674:41;;41783:12;;41764:15;;41757:4;:22;;;;:::i;:::-;41756:39;;;;:::i;:::-;41734:18;;:61;;;;;;;:::i;:::-;;;;;;;;41857:12;;41841;;41834:4;:19;;;;:::i;:::-;41833:36;;;;:::i;:::-;41814:15;;:55;;;;;;;:::i;:::-;;;;;;;;41610:275;41288:597;41912:1;41905:4;:8;41901:91;;;41934:42;41950:4;41964;41971;41934:15;:42::i;:::-;41901:91;42018:4;42008:14;;;;;:::i;:::-;;;41236:798;42046:33;42062:4;42068:2;42072:6;42046:15;:33::i;:::-;37714:4373;;;;37601:4486;;;;:::o;36917:176::-;37022:5;37000:13;:19;37014:4;37000:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37079:5;37045:40;;37073:4;37045:40;;;;;;;;;;;;36917:176;;:::o;2086:191::-;2160:16;2179:6;;;;;;;;;;;2160:25;;2205:8;2196:6;;:17;;;;;;;;;;;;;;;;;;2260:8;2229:40;;2250:8;2229:40;;;;;;;;;;;;2149:128;2086:191;:::o;11501:733::-;11659:1;11641:20;;:6;:20;;;11633:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11743:1;11722:23;;:9;:23;;;11714:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11798:47;11819:6;11827:9;11838:6;11798:20;:47::i;:::-;11858:21;11882:9;:17;11892:6;11882:17;;;;;;;;;;;;;;;;11858:41;;11935:6;11918:13;:23;;11910:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12056:6;12040:13;:22;12020:9;:17;12030:6;12020:17;;;;;;;;;;;;;;;:42;;;;12108:6;12084:9;:20;12094:9;12084:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12149:9;12132:35;;12141:6;12132:35;;;12160:6;12132:35;;;;;;:::i;:::-;;;;;;;;12180:46;12200:6;12208:9;12219:6;12180:19;:46::i;:::-;11622:612;11501:733;;;:::o;43196:1513::-;43235:23;43261:24;43279:4;43261:9;:24::i;:::-;43235:50;;43296:25;43358:15;;43324:18;;:49;;;;:::i;:::-;43296:77;;43384:12;43432:1;43413:15;:20;:46;;;;43458:1;43437:17;:22;43413:46;43409:85;;;43476:7;;;;;43409:85;43528:20;;43510:15;:38;43506:109;;;43583:20;;43565:38;;43506:109;43676:23;43789:1;43756:17;43721:18;;43703:15;:36;;;;:::i;:::-;43702:71;;;;:::i;:::-;:88;;;;:::i;:::-;43676:114;;43801:26;43830:36;43850:15;43830;:19;;:36;;;;:::i;:::-;43801:65;;43879:25;43907:21;43879:49;;43941:36;43958:18;43941:16;:36::i;:::-;43990:18;44011:44;44037:17;44011:21;:25;;:44;;;;:::i;:::-;43990:65;;44068:20;44091:78;44141:17;44091:31;44106:15;;44091:10;:14;;:31;;;;:::i;:::-;:35;;:78;;;;:::i;:::-;44068:101;;44182:23;44221:12;44208:10;:25;;;;:::i;:::-;44182:51;;44267:1;44246:18;:22;;;;44297:1;44279:15;:19;;;;44335:1;44317:15;:19;:42;;;;;44358:1;44340:15;:19;44317:42;44313:278;;;44376:46;44389:15;44406;44376:12;:46::i;:::-;44442:137;44475:18;44512:15;44546:18;;44442:137;;;;;;;;:::i;:::-;;;;;;;;44313:278;44625:12;;;;;;;;;;;44617:26;;44665:21;44617:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44603:98;;;;;43224:1485;;;;;;;;;43196:1513;:::o;19211:98::-;19269:7;19300:1;19296;:5;;;;:::i;:::-;19289:12;;19211:98;;;;:::o;19610:::-;19668:7;19699:1;19695;:5;;;;:::i;:::-;19688:12;;19610:98;;;;:::o;15262:125::-;;;;:::o;15991:124::-;;;;:::o;18854:98::-;18912:7;18943:1;18939;:5;;;;:::i;:::-;18932:12;;18854:98;;;;:::o;42095:574::-;42221:21;42259:1;42245:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42221:40;;42290:4;42272;42277:1;42272:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42316:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42306:4;42311:1;42306:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;42346:57;42363:4;42378:10;42391:11;42346:8;:57::i;:::-;42442:10;:61;;;42518:11;42544:1;42588:4;42615;42635:15;42442:219;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42150:519;42095:574;:::o;42677:511::-;42825:57;42842:4;42857:10;42870:11;42825:8;:57::i;:::-;42925:10;:26;;;42959:9;42992:4;43012:11;43038:1;43081;43124:15;;;;;;;;;;;43154;42925:255;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42677:511;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:118::-;4365:24;4383:5;4365:24;:::i;:::-;4360:3;4353:37;4278:118;;:::o;4402:222::-;4495:4;4533:2;4522:9;4518:18;4510:26;;4546:71;4614:1;4603:9;4599:17;4590:6;4546:71;:::i;:::-;4402:222;;;;:::o;4630:619::-;4707:6;4715;4723;4772:2;4760:9;4751:7;4747:23;4743:32;4740:119;;;4778:79;;:::i;:::-;4740:119;4898:1;4923:53;4968:7;4959:6;4948:9;4944:22;4923:53;:::i;:::-;4913:63;;4869:117;5025:2;5051:53;5096:7;5087:6;5076:9;5072:22;5051:53;:::i;:::-;5041:63;;4996:118;5153:2;5179:53;5224:7;5215:6;5204:9;5200:22;5179:53;:::i;:::-;5169:63;;5124:118;4630:619;;;;;:::o;5255:116::-;5325:21;5340:5;5325:21;:::i;:::-;5318:5;5315:32;5305:60;;5361:1;5358;5351:12;5305:60;5255:116;:::o;5377:133::-;5420:5;5458:6;5445:20;5436:29;;5474:30;5498:5;5474:30;:::i;:::-;5377:133;;;;:::o;5516:468::-;5581:6;5589;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5891:2;5917:50;5959:7;5950:6;5939:9;5935:22;5917:50;:::i;:::-;5907:60;;5862:115;5516:468;;;;;:::o;5990:329::-;6049:6;6098:2;6086:9;6077:7;6073:23;6069:32;6066:119;;;6104:79;;:::i;:::-;6066:119;6224:1;6249:53;6294:7;6285:6;6274:9;6270:22;6249:53;:::i;:::-;6239:63;;6195:117;5990:329;;;;:::o;6325:86::-;6360:7;6400:4;6393:5;6389:16;6378:27;;6325:86;;;:::o;6417:112::-;6500:22;6516:5;6500:22;:::i;:::-;6495:3;6488:35;6417:112;;:::o;6535:214::-;6624:4;6662:2;6651:9;6647:18;6639:26;;6675:67;6739:1;6728:9;6724:17;6715:6;6675:67;:::i;:::-;6535:214;;;;:::o;6755:329::-;6814:6;6863:2;6851:9;6842:7;6838:23;6834:32;6831:119;;;6869:79;;:::i;:::-;6831:119;6989:1;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6960:117;6755:329;;;;:::o;7090:323::-;7146:6;7195:2;7183:9;7174:7;7170:23;7166:32;7163:119;;;7201:79;;:::i;:::-;7163:119;7321:1;7346:50;7388:7;7379:6;7368:9;7364:22;7346:50;:::i;:::-;7336:60;;7292:114;7090:323;;;;:::o;7419:60::-;7447:3;7468:5;7461:12;;7419:60;;;:::o;7485:142::-;7535:9;7568:53;7586:34;7595:24;7613:5;7595:24;:::i;:::-;7586:34;:::i;:::-;7568:53;:::i;:::-;7555:66;;7485:142;;;:::o;7633:126::-;7683:9;7716:37;7747:5;7716:37;:::i;:::-;7703:50;;7633:126;;;:::o;7765:153::-;7842:9;7875:37;7906:5;7875:37;:::i;:::-;7862:50;;7765:153;;;:::o;7924:185::-;8038:64;8096:5;8038:64;:::i;:::-;8033:3;8026:77;7924:185;;:::o;8115:276::-;8235:4;8273:2;8262:9;8258:18;8250:26;;8286:98;8381:1;8370:9;8366:17;8357:6;8286:98;:::i;:::-;8115:276;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:178::-;10385:30;10381:1;10373:6;10369:14;10362:54;10245:178;:::o;10429:366::-;10571:3;10592:67;10656:2;10651:3;10592:67;:::i;:::-;10585:74;;10668:93;10757:3;10668:93;:::i;:::-;10786:2;10781:3;10777:12;10770:19;;10429:366;;;:::o;10801:419::-;10967:4;11005:2;10994:9;10990:18;10982:26;;11054:9;11048:4;11044:20;11040:1;11029:9;11025:17;11018:47;11082:131;11208:4;11082:131;:::i;:::-;11074:139;;10801:419;;;:::o;11226:180::-;11274:77;11271:1;11264:88;11371:4;11368:1;11361:15;11395:4;11392:1;11385:15;11412:320;11456:6;11493:1;11487:4;11483:12;11473:22;;11540:1;11534:4;11530:12;11561:18;11551:81;;11617:4;11609:6;11605:17;11595:27;;11551:81;11679:2;11671:6;11668:14;11648:18;11645:38;11642:84;;11698:18;;:::i;:::-;11642:84;11463:269;11412:320;;;:::o;11738:227::-;11878:34;11874:1;11866:6;11862:14;11855:58;11947:10;11942:2;11934:6;11930:15;11923:35;11738:227;:::o;11971:366::-;12113:3;12134:67;12198:2;12193:3;12134:67;:::i;:::-;12127:74;;12210:93;12299:3;12210:93;:::i;:::-;12328:2;12323:3;12319:12;12312:19;;11971:366;;;:::o;12343:419::-;12509:4;12547:2;12536:9;12532:18;12524:26;;12596:9;12590:4;12586:20;12582:1;12571:9;12567:17;12560:47;12624:131;12750:4;12624:131;:::i;:::-;12616:139;;12343:419;;;:::o;12768:232::-;12908:34;12904:1;12896:6;12892:14;12885:58;12977:15;12972:2;12964:6;12960:15;12953:40;12768:232;:::o;13006:366::-;13148:3;13169:67;13233:2;13228:3;13169:67;:::i;:::-;13162:74;;13245:93;13334:3;13245:93;:::i;:::-;13363:2;13358:3;13354:12;13347:19;;13006:366;;;:::o;13378:419::-;13544:4;13582:2;13571:9;13567:18;13559:26;;13631:9;13625:4;13621:20;13617:1;13606:9;13602:17;13595:47;13659:131;13785:4;13659:131;:::i;:::-;13651:139;;13378:419;;;:::o;13803:228::-;13943:34;13939:1;13931:6;13927:14;13920:58;14012:11;14007:2;13999:6;13995:15;13988:36;13803:228;:::o;14037:366::-;14179:3;14200:67;14264:2;14259:3;14200:67;:::i;:::-;14193:74;;14276:93;14365:3;14276:93;:::i;:::-;14394:2;14389:3;14385:12;14378:19;;14037:366;;;:::o;14409:419::-;14575:4;14613:2;14602:9;14598:18;14590:26;;14662:9;14656:4;14652:20;14648:1;14637:9;14633:17;14626:47;14690:131;14816:4;14690:131;:::i;:::-;14682:139;;14409:419;;;:::o;14834:410::-;14874:7;14897:20;14915:1;14897:20;:::i;:::-;14892:25;;14931:20;14949:1;14931:20;:::i;:::-;14926:25;;14986:1;14983;14979:9;15008:30;15026:11;15008:30;:::i;:::-;14997:41;;15187:1;15178:7;15174:15;15171:1;15168:22;15148:1;15141:9;15121:83;15098:139;;15217:18;;:::i;:::-;15098:139;14882:362;14834:410;;;;:::o;15250:180::-;15298:77;15295:1;15288:88;15395:4;15392:1;15385:15;15419:4;15416:1;15409:15;15436:185;15476:1;15493:20;15511:1;15493:20;:::i;:::-;15488:25;;15527:20;15545:1;15527:20;:::i;:::-;15522:25;;15566:1;15556:35;;15571:18;;:::i;:::-;15556:35;15613:1;15610;15606:9;15601:14;;15436:185;;;;:::o;15627:240::-;15767:34;15763:1;15755:6;15751:14;15744:58;15836:23;15831:2;15823:6;15819:15;15812:48;15627:240;:::o;15873:366::-;16015:3;16036:67;16100:2;16095:3;16036:67;:::i;:::-;16029:74;;16112:93;16201:3;16112:93;:::i;:::-;16230:2;16225:3;16221:12;16214:19;;15873:366;;;:::o;16245:419::-;16411:4;16449:2;16438:9;16434:18;16426:26;;16498:9;16492:4;16488:20;16484:1;16473:9;16469:17;16462:47;16526:131;16652:4;16526:131;:::i;:::-;16518:139;;16245:419;;;:::o;16670:239::-;16810:34;16806:1;16798:6;16794:14;16787:58;16879:22;16874:2;16866:6;16862:15;16855:47;16670:239;:::o;16915:366::-;17057:3;17078:67;17142:2;17137:3;17078:67;:::i;:::-;17071:74;;17154:93;17243:3;17154:93;:::i;:::-;17272:2;17267:3;17263:12;17256:19;;16915:366;;;:::o;17287:419::-;17453:4;17491:2;17480:9;17476:18;17468:26;;17540:9;17534:4;17530:20;17526:1;17515:9;17511:17;17504:47;17568:131;17694:4;17568:131;:::i;:::-;17560:139;;17287:419;;;:::o;17712:249::-;17852:34;17848:1;17840:6;17836:14;17829:58;17921:32;17916:2;17908:6;17904:15;17897:57;17712:249;:::o;17967:366::-;18109:3;18130:67;18194:2;18189:3;18130:67;:::i;:::-;18123:74;;18206:93;18295:3;18206:93;:::i;:::-;18324:2;18319:3;18315:12;18308:19;;17967:366;;;:::o;18339:419::-;18505:4;18543:2;18532:9;18528:18;18520:26;;18592:9;18586:4;18582:20;18578:1;18567:9;18563:17;18556:47;18620:131;18746:4;18620:131;:::i;:::-;18612:139;;18339:419;;;:::o;18764:224::-;18904:34;18900:1;18892:6;18888:14;18881:58;18973:7;18968:2;18960:6;18956:15;18949:32;18764:224;:::o;18994:366::-;19136:3;19157:67;19221:2;19216:3;19157:67;:::i;:::-;19150:74;;19233:93;19322:3;19233:93;:::i;:::-;19351:2;19346:3;19342:12;19335:19;;18994:366;;;:::o;19366:419::-;19532:4;19570:2;19559:9;19555:18;19547:26;;19619:9;19613:4;19609:20;19605:1;19594:9;19590:17;19583:47;19647:131;19773:4;19647:131;:::i;:::-;19639:139;;19366:419;;;:::o;19791:182::-;19931:34;19927:1;19919:6;19915:14;19908:58;19791:182;:::o;19979:366::-;20121:3;20142:67;20206:2;20201:3;20142:67;:::i;:::-;20135:74;;20218:93;20307:3;20218:93;:::i;:::-;20336:2;20331:3;20327:12;20320:19;;19979:366;;;:::o;20351:419::-;20517:4;20555:2;20544:9;20540:18;20532:26;;20604:9;20598:4;20594:20;20590:1;20579:9;20575:17;20568:47;20632:131;20758:4;20632:131;:::i;:::-;20624:139;;20351:419;;;:::o;20776:224::-;20916:34;20912:1;20904:6;20900:14;20893:58;20985:7;20980:2;20972:6;20968:15;20961:32;20776:224;:::o;21006:366::-;21148:3;21169:67;21233:2;21228:3;21169:67;:::i;:::-;21162:74;;21245:93;21334:3;21245:93;:::i;:::-;21363:2;21358:3;21354:12;21347:19;;21006:366;;;:::o;21378:419::-;21544:4;21582:2;21571:9;21567:18;21559:26;;21631:9;21625:4;21621:20;21617:1;21606:9;21602:17;21595:47;21659:131;21785:4;21659:131;:::i;:::-;21651:139;;21378:419;;;:::o;21803:225::-;21943:34;21939:1;21931:6;21927:14;21920:58;22012:8;22007:2;21999:6;21995:15;21988:33;21803:225;:::o;22034:366::-;22176:3;22197:67;22261:2;22256:3;22197:67;:::i;:::-;22190:74;;22273:93;22362:3;22273:93;:::i;:::-;22391:2;22386:3;22382:12;22375:19;;22034:366;;;:::o;22406:419::-;22572:4;22610:2;22599:9;22595:18;22587:26;;22659:9;22653:4;22649:20;22645:1;22634:9;22630:17;22623:47;22687:131;22813:4;22687:131;:::i;:::-;22679:139;;22406:419;;;:::o;22831:223::-;22971:34;22967:1;22959:6;22955:14;22948:58;23040:6;23035:2;23027:6;23023:15;23016:31;22831:223;:::o;23060:366::-;23202:3;23223:67;23287:2;23282:3;23223:67;:::i;:::-;23216:74;;23299:93;23388:3;23299:93;:::i;:::-;23417:2;23412:3;23408:12;23401:19;;23060:366;;;:::o;23432:419::-;23598:4;23636:2;23625:9;23621:18;23613:26;;23685:9;23679:4;23675:20;23671:1;23660:9;23656:17;23649:47;23713:131;23839:4;23713:131;:::i;:::-;23705:139;;23432:419;;;:::o;23857:221::-;23997:34;23993:1;23985:6;23981:14;23974:58;24066:4;24061:2;24053:6;24049:15;24042:29;23857:221;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:224::-;25021:34;25017:1;25009:6;25005:14;24998:58;25090:7;25085:2;25077:6;25073:15;25066:32;24881:224;:::o;25111:366::-;25253:3;25274:67;25338:2;25333:3;25274:67;:::i;:::-;25267:74;;25350:93;25439:3;25350:93;:::i;:::-;25468:2;25463:3;25459:12;25452:19;;25111:366;;;:::o;25483:419::-;25649:4;25687:2;25676:9;25672:18;25664:26;;25736:9;25730:4;25726:20;25722:1;25711:9;25707:17;25700:47;25764:131;25890:4;25764:131;:::i;:::-;25756:139;;25483:419;;;:::o;25908:222::-;26048:34;26044:1;26036:6;26032:14;26025:58;26117:5;26112:2;26104:6;26100:15;26093:30;25908:222;:::o;26136:366::-;26278:3;26299:67;26363:2;26358:3;26299:67;:::i;:::-;26292:74;;26375:93;26464:3;26375:93;:::i;:::-;26493:2;26488:3;26484:12;26477:19;;26136:366;;;:::o;26508:419::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26508:419;;;:::o;26933:172::-;27073:24;27069:1;27061:6;27057:14;27050:48;26933:172;:::o;27111:366::-;27253:3;27274:67;27338:2;27333:3;27274:67;:::i;:::-;27267:74;;27350:93;27439:3;27350:93;:::i;:::-;27468:2;27463:3;27459:12;27452:19;;27111:366;;;:::o;27483:419::-;27649:4;27687:2;27676:9;27672:18;27664:26;;27736:9;27730:4;27726:20;27722:1;27711:9;27707:17;27700:47;27764:131;27890:4;27764:131;:::i;:::-;27756:139;;27483:419;;;:::o;27908:297::-;28048:34;28044:1;28036:6;28032:14;28025:58;28117:34;28112:2;28104:6;28100:15;28093:59;28186:11;28181:2;28173:6;28169:15;28162:36;27908:297;:::o;28211:366::-;28353:3;28374:67;28438:2;28433:3;28374:67;:::i;:::-;28367:74;;28450:93;28539:3;28450:93;:::i;:::-;28568:2;28563:3;28559:12;28552:19;;28211:366;;;:::o;28583:419::-;28749:4;28787:2;28776:9;28772:18;28764:26;;28836:9;28830:4;28826:20;28822:1;28811:9;28807:17;28800:47;28864:131;28990:4;28864:131;:::i;:::-;28856:139;;28583:419;;;:::o;29008:230::-;29148:34;29144:1;29136:6;29132:14;29125:58;29217:13;29212:2;29204:6;29200:15;29193:38;29008:230;:::o;29244:366::-;29386:3;29407:67;29471:2;29466:3;29407:67;:::i;:::-;29400:74;;29483:93;29572:3;29483:93;:::i;:::-;29601:2;29596:3;29592:12;29585:19;;29244:366;;;:::o;29616:419::-;29782:4;29820:2;29809:9;29805:18;29797:26;;29869:9;29863:4;29859:20;29855:1;29844:9;29840:17;29833:47;29897:131;30023:4;29897:131;:::i;:::-;29889:139;;29616:419;;;:::o;30041:169::-;30181:21;30177:1;30169:6;30165:14;30158:45;30041:169;:::o;30216:366::-;30358:3;30379:67;30443:2;30438:3;30379:67;:::i;:::-;30372:74;;30455:93;30544:3;30455:93;:::i;:::-;30573:2;30568:3;30564:12;30557:19;;30216:366;;;:::o;30588:419::-;30754:4;30792:2;30781:9;30777:18;30769:26;;30841:9;30835:4;30831:20;30827:1;30816:9;30812:17;30805:47;30869:131;30995:4;30869:131;:::i;:::-;30861:139;;30588:419;;;:::o;31013:231::-;31153:34;31149:1;31141:6;31137:14;31130:58;31222:14;31217:2;31209:6;31205:15;31198:39;31013:231;:::o;31250:366::-;31392:3;31413:67;31477:2;31472:3;31413:67;:::i;:::-;31406:74;;31489:93;31578:3;31489:93;:::i;:::-;31607:2;31602:3;31598:12;31591:19;;31250:366;;;:::o;31622:419::-;31788:4;31826:2;31815:9;31811:18;31803:26;;31875:9;31869:4;31865:20;31861:1;31850:9;31846:17;31839:47;31903:131;32029:4;31903:131;:::i;:::-;31895:139;;31622:419;;;:::o;32047:194::-;32087:4;32107:20;32125:1;32107:20;:::i;:::-;32102:25;;32141:20;32159:1;32141:20;:::i;:::-;32136:25;;32185:1;32182;32178:9;32170:17;;32209:1;32203:4;32200:11;32197:37;;;32214:18;;:::i;:::-;32197:37;32047:194;;;;:::o;32247:225::-;32387:34;32383:1;32375:6;32371:14;32364:58;32456:8;32451:2;32443:6;32439:15;32432:33;32247:225;:::o;32478:366::-;32620:3;32641:67;32705:2;32700:3;32641:67;:::i;:::-;32634:74;;32717:93;32806:3;32717:93;:::i;:::-;32835:2;32830:3;32826:12;32819:19;;32478:366;;;:::o;32850:419::-;33016:4;33054:2;33043:9;33039:18;33031:26;;33103:9;33097:4;33093:20;33089:1;33078:9;33074:17;33067:47;33131:131;33257:4;33131:131;:::i;:::-;33123:139;;32850:419;;;:::o;33275:442::-;33424:4;33462:2;33451:9;33447:18;33439:26;;33475:71;33543:1;33532:9;33528:17;33519:6;33475:71;:::i;:::-;33556:72;33624:2;33613:9;33609:18;33600:6;33556:72;:::i;:::-;33638;33706:2;33695:9;33691:18;33682:6;33638:72;:::i;:::-;33275:442;;;;;;:::o;33723:147::-;33824:11;33861:3;33846:18;;33723:147;;;;:::o;33876:114::-;;:::o;33996:398::-;34155:3;34176:83;34257:1;34252:3;34176:83;:::i;:::-;34169:90;;34268:93;34357:3;34268:93;:::i;:::-;34386:1;34381:3;34377:11;34370:18;;33996:398;;;:::o;34400:379::-;34584:3;34606:147;34749:3;34606:147;:::i;:::-;34599:154;;34770:3;34763:10;;34400:379;;;:::o;34785:180::-;34833:77;34830:1;34823:88;34930:4;34927:1;34920:15;34954:4;34951:1;34944:15;34971:180;35019:77;35016:1;35009:88;35116:4;35113:1;35106:15;35140:4;35137:1;35130:15;35157:143;35214:5;35245:6;35239:13;35230:22;;35261:33;35288:5;35261:33;:::i;:::-;35157:143;;;;:::o;35306:351::-;35376:6;35425:2;35413:9;35404:7;35400:23;35396:32;35393:119;;;35431:79;;:::i;:::-;35393:119;35551:1;35576:64;35632:7;35623:6;35612:9;35608:22;35576:64;:::i;:::-;35566:74;;35522:128;35306:351;;;;:::o;35663:85::-;35708:7;35737:5;35726:16;;35663:85;;;:::o;35754:158::-;35812:9;35845:61;35863:42;35872:32;35898:5;35872:32;:::i;:::-;35863:42;:::i;:::-;35845:61;:::i;:::-;35832:74;;35754:158;;;:::o;35918:147::-;36013:45;36052:5;36013:45;:::i;:::-;36008:3;36001:58;35918:147;;:::o;36071:114::-;36138:6;36172:5;36166:12;36156:22;;36071:114;;;:::o;36191:184::-;36290:11;36324:6;36319:3;36312:19;36364:4;36359:3;36355:14;36340:29;;36191:184;;;;:::o;36381:132::-;36448:4;36471:3;36463:11;;36501:4;36496:3;36492:14;36484:22;;36381:132;;;:::o;36519:108::-;36596:24;36614:5;36596:24;:::i;:::-;36591:3;36584:37;36519:108;;:::o;36633:179::-;36702:10;36723:46;36765:3;36757:6;36723:46;:::i;:::-;36801:4;36796:3;36792:14;36778:28;;36633:179;;;;:::o;36818:113::-;36888:4;36920;36915:3;36911:14;36903:22;;36818:113;;;:::o;36967:732::-;37086:3;37115:54;37163:5;37115:54;:::i;:::-;37185:86;37264:6;37259:3;37185:86;:::i;:::-;37178:93;;37295:56;37345:5;37295:56;:::i;:::-;37374:7;37405:1;37390:284;37415:6;37412:1;37409:13;37390:284;;;37491:6;37485:13;37518:63;37577:3;37562:13;37518:63;:::i;:::-;37511:70;;37604:60;37657:6;37604:60;:::i;:::-;37594:70;;37450:224;37437:1;37434;37430:9;37425:14;;37390:284;;;37394:14;37690:3;37683:10;;37091:608;;;36967:732;;;;:::o;37705:831::-;37968:4;38006:3;37995:9;37991:19;37983:27;;38020:71;38088:1;38077:9;38073:17;38064:6;38020:71;:::i;:::-;38101:80;38177:2;38166:9;38162:18;38153:6;38101:80;:::i;:::-;38228:9;38222:4;38218:20;38213:2;38202:9;38198:18;38191:48;38256:108;38359:4;38350:6;38256:108;:::i;:::-;38248:116;;38374:72;38442:2;38431:9;38427:18;38418:6;38374:72;:::i;:::-;38456:73;38524:3;38513:9;38509:19;38500:6;38456:73;:::i;:::-;37705:831;;;;;;;;:::o;38542:807::-;38791:4;38829:3;38818:9;38814:19;38806:27;;38843:71;38911:1;38900:9;38896:17;38887:6;38843:71;:::i;:::-;38924:72;38992:2;38981:9;38977:18;38968:6;38924:72;:::i;:::-;39006:80;39082:2;39071:9;39067:18;39058:6;39006:80;:::i;:::-;39096;39172:2;39161:9;39157:18;39148:6;39096:80;:::i;:::-;39186:73;39254:3;39243:9;39239:19;39230:6;39186:73;:::i;:::-;39269;39337:3;39326:9;39322:19;39313:6;39269:73;:::i;:::-;38542:807;;;;;;;;;:::o;39355:143::-;39412:5;39443:6;39437:13;39428:22;;39459:33;39486:5;39459:33;:::i;:::-;39355:143;;;;:::o;39504:663::-;39592:6;39600;39608;39657:2;39645:9;39636:7;39632:23;39628:32;39625:119;;;39663:79;;:::i;:::-;39625:119;39783:1;39808:64;39864:7;39855:6;39844:9;39840:22;39808:64;:::i;:::-;39798:74;;39754:128;39921:2;39947:64;40003:7;39994:6;39983:9;39979:22;39947:64;:::i;:::-;39937:74;;39892:129;40060:2;40086:64;40142:7;40133:6;40122:9;40118:22;40086:64;:::i;:::-;40076:74;;40031:129;39504:663;;;;;:::o
Swarm Source
ipfs://a661166845106dd1871dc1c8118e84d1b3ba7a10e885d9f24e0be21acceecbc5
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.