Contract Overview
Balance:
0.001 ETH
EtherValue:
$3.08 (@ $3,082.44/ETH)
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Pepe
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2024-04-08 */ /* * SPDX-License-Identifier: MIT * https://t.me/Pepe_OnBase * https://twitter.com/pepe_basechain * https://pepebasetoken.com */ pragma solidity 0.8.19; 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 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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 upd 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 upd 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 upd 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 {} } 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 IDexFactory { 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 IDexRouter { 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 Pepe is Context, ERC20, Ownable { using SafeMath for uint256; mapping(address => bool) private _isExcludedFromFee; address payable private _taxWallet; uint256 firstBlock; uint64 private lastLiquifyTime; uint256 private buyFee = 11; uint256 private sellFee = 30; uint256 private _preventSwapBefore = 1; uint256 private _buyCount = 0; uint256 private _txAmountLimit; uint256 private _walletAmountLimit; uint256 private _swapbackMin; uint256 private _swapbackMax; IDexRouter private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; event MaxTxAmountUpdated(uint _txAmountLimit); event MaxWalletAmountUpdated(uint _walletAmountLimit); event FeesUpdated(uint buyFee, uint sellFee); event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax); event FeeReceiverUpdated(address _taxWallet); event ExcludedFromFee(address account, bool status); event LimitsRemoved(); event TradingOpened(); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() ERC20("Pepe", "PEPE") { uint256 _totalSupply = 420_690_000_000_000 * 10 ** 18; _txAmountLimit = (_totalSupply * 10) / 1000; _walletAmountLimit = (_totalSupply * 10) / 1000; _swapbackMin = (_totalSupply * 5) / 10000; _swapbackMax = (_totalSupply * 300) / 10000; _taxWallet = payable(0x296A8004784E82635DFEa532B8d8Adcc83734Aae); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; _mint(_msgSender(), _totalSupply); } receive() external payable {} function openTraing() external onlyOwner { require(!tradingOpen, "trading is already open"); uniswapV2Router = IDexRouter( 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 ); _approve(address(this), address(uniswapV2Router), totalSupply()); uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; tradingOpen = true; firstBlock = block.number; lastLiquifyTime = uint64(block.number); _isExcludedFromFee[address(this)] = true; buyFee = 30; emit TradingOpened(); } function setMktReceiverAddress(address payable marketingWallet) external onlyOwner { _taxWallet = marketingWallet; emit FeeReceiverUpdated(marketingWallet); } function setTxLimitValue(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max tx cant be lower than 0.1%"); _txAmountLimit = (totalSupply() * newValue) / 1000; emit MaxTxAmountUpdated(_txAmountLimit); } function setWalletLimitValue(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max wallet cant be lower than 0.1%"); _walletAmountLimit = (totalSupply() * newValue) / 1000; emit MaxWalletAmountUpdated(_walletAmountLimit); } function setSwapBackValues( uint256 taxSwapThreshold, uint256 maxTaxSwap ) external onlyOwner { _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000; _swapbackMax = (totalSupply() * maxTaxSwap) / 10000; emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap); } function rmvLimits() external onlyOwner { _txAmountLimit = totalSupply(); _walletAmountLimit = totalSupply(); emit MaxTxAmountUpdated(totalSupply()); emit MaxWalletAmountUpdated(totalSupply()); } function setTradingFees(uint256 buyTax, uint256 sellTax) external onlyOwner { require(buyTax <= 99, "Invalid buy tax value"); require(sellTax <= 99, "Invalid sell tax value"); buyFee = buyTax; sellFee = sellTax; emit FeesUpdated(buyTax, sellTax); } function removeETH() external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); _taxWallet.transfer(address(this).balance); } function setExcludedFromFees(address account, bool status) external onlyOwner { _isExcludedFromFee[account] = status; emit ExcludedFromFee(account, status); } function viewInfo() external view returns ( uint256 _buyFee, uint256 _sellFee, uint256 maxTxAmount, uint256 maxWalletSize, uint256 taxSwapThreshold, uint256 maxTaxSwap ) { return ( buyFee, sellFee, _txAmountLimit, _walletAmountLimit, _swapbackMin, _swapbackMax ); } 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"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount = 0; if (from != owner() && to != owner() && !inSwap) { taxAmount = amount.mul(buyFee).div(100); if ( from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] ) { require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit."); require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); if (firstBlock + 3 > block.number) { require(!isContract(to)); } _buyCount++; } if (to != uniswapV2Pair && !_isExcludedFromFee[to]) { require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); } if (to == uniswapV2Pair && from != address(this)) { taxAmount = amount.mul(sellFee).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if ( !inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _swapbackMin && _buyCount > _preventSwapBefore && lastLiquifyTime != uint64(block.number) ) { swapTokensForEth(min(contractTokenBalance, _swapbackMax)); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } } if (taxAmount > 0) { super._transfer(from, address(this), taxAmount); } super._transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function isContract(address account) private view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function triggerSwap() external { require( msg.sender == _taxWallet || msg.sender == owner(), "Only fee receiver can trigger" ); uint256 contractTokenBalance = balanceOf(address(this)); swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { lastLiquifyTime = uint64(block.number); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee() private { bool success; (success, ) = address(_taxWallet).call{value: address(this).balance}( "" ); } }
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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","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"},{"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":"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":[{"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTraing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMktReceiverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapBackValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTxLimitValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWalletLimitValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600b600a55601e600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600481526020017f50657065000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50455045000000000000000000000000000000000000000000000000000000008152508160039081620000d991906200085c565b508060049081620000eb91906200085c565b5050506200010e620001026200036860201b60201c565b6200037060201b60201c565b60006d14bddab3e51a57cff87a5000000090506103e8600a8262000133919062000972565b6200013f9190620009ec565b600e819055506103e8600a8262000157919062000972565b620001639190620009ec565b600f819055506127106005826200017b919062000972565b620001879190620009ec565b60108190555061271061012c82620001a0919062000972565b620001ac9190620009ec565b60118190555073296a8004784e82635dfea532b8d8adcc83734aae600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200021d6200043660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000361620003546200036860201b60201c565b826200046060201b60201c565b5062000b10565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c99062000a85565b60405180910390fd5b620004e660008383620005d860201b60201c565b8060026000828254620004fa919062000aa7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000551919062000aa7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005b8919062000af3565b60405180910390a3620005d460008383620005dd60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200066457607f821691505b6020821081036200067a57620006796200061c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006e47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006a5565b620006f08683620006a5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200073d62000737620007318462000708565b62000712565b62000708565b9050919050565b6000819050919050565b62000759836200071c565b62000771620007688262000744565b848454620006b2565b825550505050565b600090565b6200078862000779565b620007958184846200074e565b505050565b5b81811015620007bd57620007b16000826200077e565b6001810190506200079b565b5050565b601f8211156200080c57620007d68162000680565b620007e18462000695565b81016020851015620007f1578190505b62000809620008008562000695565b8301826200079a565b50505b505050565b600082821c905092915050565b6000620008316000198460080262000811565b1980831691505092915050565b60006200084c83836200081e565b9150826002028217905092915050565b6200086782620005e2565b67ffffffffffffffff811115620008835762000882620005ed565b5b6200088f82546200064b565b6200089c828285620007c1565b600060209050601f831160018114620008d45760008415620008bf578287015190505b620008cb85826200083e565b8655506200093b565b601f198416620008e48662000680565b60005b828110156200090e57848901518255600182019150602085019450602081019050620008e7565b868310156200092e57848901516200092a601f8916826200081e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200097f8262000708565b91506200098c8362000708565b92508282026200099c8162000708565b91508282048414831517620009b657620009b562000943565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009f98262000708565b915062000a068362000708565b92508262000a195762000a18620009bd565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a6d601f8362000a24565b915062000a7a8262000a35565b602082019050919050565b6000602082019050818103600083015262000aa08162000a5e565b9050919050565b600062000ab48262000708565b915062000ac18362000708565b925082820190508082111562000adc5762000adb62000943565b5b92915050565b62000aed8162000708565b82525050565b600060208201905062000b0a600083018462000ae2565b92915050565b613fab8062000b206000396000f3fe60806040526004361061016a5760003560e01c80638da5cb5b116100d1578063bc4b04eb1161008a578063e509c0ae11610064578063e509c0ae14610516578063f2fde38b1461053f578063fa41cf0314610568578063fda5ecb11461059157610171565b8063bc4b04eb14610487578063caf3824d146104b0578063dd62ed3e146104d957610171565b80638da5cb5b146103705780638f937cc41461039b57806395d89b41146103b2578063a457c2d7146103dd578063a9059cbb1461041a578063ae6014801461045757610171565b806339509351116101235780633950935114610288578063590ffdce146102c55780636ed6a48d146102ee57806370a0823114610305578063715018a61461034257806384ff283a1461035957610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de578063217b6da61461020957806323b872dd14610220578063313ce5671461025d57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6105ba565b6040516101989190612bfd565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612cb8565b61064c565b6040516101d59190612d13565b60405180910390f35b3480156101ea57600080fd5b506101f361066a565b6040516102009190612d3d565b60405180910390f35b34801561021557600080fd5b5061021e610674565b005b34801561022c57600080fd5b5061024760048036038101906102429190612d58565b61076f565b6040516102549190612d13565b60405180910390f35b34801561026957600080fd5b50610272610867565b60405161027f9190612dc7565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612cb8565b610870565b6040516102bc9190612d13565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612e0e565b61091c565b005b3480156102fa57600080fd5b50610303610a2c565b005b34801561031157600080fd5b5061032c60048036038101906103279190612e4e565b610b42565b6040516103399190612d3d565b60405180910390f35b34801561034e57600080fd5b50610357610b8a565b005b34801561036557600080fd5b5061036e610c12565b005b34801561037c57600080fd5b506103856111d8565b6040516103929190612e8a565b60405180910390f35b3480156103a757600080fd5b506103b0611202565b005b3480156103be57600080fd5b506103c7611300565b6040516103d49190612bfd565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612cb8565b611392565b6040516104119190612d13565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190612cb8565b61147d565b60405161044e9190612d13565b60405180910390f35b34801561046357600080fd5b5061046c61149b565b60405161047e96959493929190612ea5565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190612f06565b6114ca565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190612f46565b6115cf565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190612f73565b6116f1565b60405161050d9190612d3d565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612f46565b611778565b005b34801561054b57600080fd5b5061056660048036038101906105619190612e4e565b61189a565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612ff1565b611991565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612f06565b611a88565b005b6060600380546105c99061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546105f59061304d565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b6000610660610659611bd7565b8484611bdf565b6001905092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fb906130ca565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561076c573d6000803e3d6000fd5b50565b600061077c848484611da8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c7611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e9061315c565b60405180910390fd5b61085b85610853611bd7565b858403611bdf565b60019150509392505050565b60006012905090565b600061091261087d611bd7565b84846001600061088b611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090d91906131ab565b611bdf565b6001905092915050565b610924611bd7565b73ffffffffffffffffffffffffffffffffffffffff166109426111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f9061322b565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610a2092919061324b565b60405180910390a15050565b610a34611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610a526111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f9061322b565b60405180910390fd5b610ab061066a565b600e81905550610abe61066a565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610aed61066a565b604051610afa9190612d3d565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610b2b61066a565b604051610b389190612d3d565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b92611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610bb06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd9061322b565b60405180910390fd5b610c10600061247b565b565b610c1a611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610c386111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c859061322b565b60405180910390fd5b601360149054906101000a900460ff1615610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906132c0565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d6730601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d6261066a565b611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df891906132f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea591906132f5565b6040518363ffffffff1660e01b8152600401610ec2929190613322565b6020604051808303816000875af1158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906132f5565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f8e30610b42565b600080610f996111d8565b426040518863ffffffff1660e01b8152600401610fbb96959493929190613390565b60606040518083038185885af1158015610fd9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ffe9190613406565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110a0929190613459565b6020604051808303816000875af11580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190613497565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061129057506112616111d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c6906130ca565b60405180910390fd5b60006112da30610b42565b90506112e581612541565b600047905060008111156112fc576112fb6127e3565b5b5050565b60606004805461130f9061304d565b80601f016020809104026020016040519081016040528092919081815260200182805461133b9061304d565b80156113885780601f1061135d57610100808354040283529160200191611388565b820191906000526020600020905b81548152906001019060200180831161136b57829003601f168201915b5050505050905090565b600080600160006113a1611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613536565b60405180910390fd5b611472611469611bd7565b85858403611bdf565b600191505092915050565b600061149161148a611bd7565b8484611da8565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114d2611bd7565b73ffffffffffffffffffffffffffffffffffffffff166114f06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d9061322b565b60405180910390fd5b6127108261155261066a565b61155c9190613556565b61156691906135c7565b6010819055506127108161157861066a565b6115829190613556565b61158c91906135c7565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516115c39291906135f8565b60405180910390a15050565b6115d7611bd7565b73ffffffffffffffffffffffffffffffffffffffff166115f56111d8565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061322b565b60405180910390fd5b600181101561168f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116869061366d565b60405180910390fd5b6103e88161169b61066a565b6116a59190613556565b6116af91906135c7565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516116e69190612d3d565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611780611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661179e6111d8565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb9061322b565b60405180910390fd5b6001811015611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906136ff565b60405180910390fd5b6103e88161184461066a565b61184e9190613556565b61185891906135c7565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161188f9190612d3d565b60405180910390a150565b6118a2611bd7565b73ffffffffffffffffffffffffffffffffffffffff166118c06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061322b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90613791565b60405180910390fd5b61198e8161247b565b50565b611999611bd7565b73ffffffffffffffffffffffffffffffffffffffff166119b76111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a049061322b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051611a7d9190613806565b60405180910390a150565b611a90611bd7565b73ffffffffffffffffffffffffffffffffffffffff16611aae6111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb9061322b565b60405180910390fd5b6063821115611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f9061386d565b60405180910390fd5b6063811115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b83906138d9565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611bcb9291906135f8565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061396b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906139fd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d9b9190612d3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613b21565b60405180910390fd5b60008111611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090613bb3565b60405180910390fd5b6000611ed36111d8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611f415750611f116111d8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f5a5750601360159054906101000a900460ff16155b1561244357611f876064611f79600a548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120345750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561208a5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561216f57600e548211156120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613c1f565b60405180910390fd5b600f54826120e185610b42565b6120eb91906131ab565b111561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390613c8b565b60405180910390fd5b43600360085461213c91906131ab565b11156121565761214b836128a2565b1561215557600080fd5b5b600d600081548092919061216990613cab565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122175750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227557600f548261222985610b42565b61223391906131ab565b1115612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90613c8b565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fe57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561232e5761232b606461231d600b548561287690919063ffffffff16565b61288c90919063ffffffff16565b90505b600061233930610b42565b9050601360159054906101000a900460ff161580156123a55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156123bd5750601360169054906101000a900460ff165b80156123ca575060105481115b80156123d95750600c54600d54115b801561240f57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b1561244157612428612423826011546128b5565b612541565b6000479050600081111561243f5761243e6127e3565b5b505b505b6000811115612458576124578430836128ce565b5b61247584846124708486612b4d90919063ffffffff16565b6128ce565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156125a2576125a1613cf3565b5b6040519080825280602002602001820160405280156125d05781602001602082028036833780820191505090505b50905030816000815181106125e8576125e7613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b391906132f5565b816001815181106126c7576126c6613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272e30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612792959493929190613e0f565b600060405180830381600087803b1580156127ac57600080fd5b505af11580156127c0573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161282b90613e9a565b60006040518083038185875af1925050503d8060008114612868576040519150601f19603f3d011682016040523d82523d6000602084013e61286d565b606091505b50508091505050565b600081836128849190613556565b905092915050565b6000818361289a91906135c7565b905092915050565b600080823b905060008111915050919050565b60008183116128c457826128c6565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613b21565b60405180910390fd5b6129b7838383612b63565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613f21565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad091906131ab565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b349190612d3d565b60405180910390a3612b47848484612b68565b50505050565b60008183612b5b9190613f41565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b8114612c6a57600080fd5b50565b600081359050612c7c81612c56565b92915050565b6000819050919050565b612c9581612c82565b8114612ca057600080fd5b50565b600081359050612cb281612c8c565b92915050565b60008060408385031215612ccf57612cce612c1f565b5b6000612cdd85828601612c6d565b9250506020612cee85828601612ca3565b9150509250929050565b60008115159050919050565b612d0d81612cf8565b82525050565b6000602082019050612d286000830184612d04565b92915050565b612d3781612c82565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b600080600060608486031215612d7157612d70612c1f565b5b6000612d7f86828701612c6d565b9350506020612d9086828701612c6d565b9250506040612da186828701612ca3565b9150509250925092565b600060ff82169050919050565b612dc181612dab565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b612deb81612cf8565b8114612df657600080fd5b50565b600081359050612e0881612de2565b92915050565b60008060408385031215612e2557612e24612c1f565b5b6000612e3385828601612c6d565b9250506020612e4485828601612df9565b9150509250929050565b600060208284031215612e6457612e63612c1f565b5b6000612e7284828501612c6d565b91505092915050565b612e8481612c44565b82525050565b6000602082019050612e9f6000830184612e7b565b92915050565b600060c082019050612eba6000830189612d2e565b612ec76020830188612d2e565b612ed46040830187612d2e565b612ee16060830186612d2e565b612eee6080830185612d2e565b612efb60a0830184612d2e565b979650505050505050565b60008060408385031215612f1d57612f1c612c1f565b5b6000612f2b85828601612ca3565b9250506020612f3c85828601612ca3565b9150509250929050565b600060208284031215612f5c57612f5b612c1f565b5b6000612f6a84828501612ca3565b91505092915050565b60008060408385031215612f8a57612f89612c1f565b5b6000612f9885828601612c6d565b9250506020612fa985828601612c6d565b9150509250929050565b6000612fbe82612c24565b9050919050565b612fce81612fb3565b8114612fd957600080fd5b50565b600081359050612feb81612fc5565b92915050565b60006020828403121561300757613006612c1f565b5b600061301584828501612fdc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306557607f821691505b6020821081036130785761307761301e565b5b50919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006130b4601d83612b78565b91506130bf8261307e565b602082019050919050565b600060208201905081810360008301526130e3816130a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613146602883612b78565b9150613151826130ea565b604082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b682612c82565b91506131c183612c82565b92508282019050808211156131d9576131d861317c565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613215602083612b78565b9150613220826131df565b602082019050919050565b6000602082019050818103600083015261324481613208565b9050919050565b60006040820190506132606000830185612e7b565b61326d6020830184612d04565b9392505050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132aa601783612b78565b91506132b582613274565b602082019050919050565b600060208201905081810360008301526132d98161329d565b9050919050565b6000815190506132ef81612c56565b92915050565b60006020828403121561330b5761330a612c1f565b5b6000613319848285016132e0565b91505092915050565b60006040820190506133376000830185612e7b565b6133446020830184612e7b565b9392505050565b6000819050919050565b6000819050919050565b600061337a6133756133708461334b565b613355565b612c82565b9050919050565b61338a8161335f565b82525050565b600060c0820190506133a56000830189612e7b565b6133b26020830188612d2e565b6133bf6040830187613381565b6133cc6060830186613381565b6133d96080830185612e7b565b6133e660a0830184612d2e565b979650505050505050565b60008151905061340081612c8c565b92915050565b60008060006060848603121561341f5761341e612c1f565b5b600061342d868287016133f1565b935050602061343e868287016133f1565b925050604061344f868287016133f1565b9150509250925092565b600060408201905061346e6000830185612e7b565b61347b6020830184612d2e565b9392505050565b60008151905061349181612de2565b92915050565b6000602082840312156134ad576134ac612c1f565b5b60006134bb84828501613482565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613520602583612b78565b915061352b826134c4565b604082019050919050565b6000602082019050818103600083015261354f81613513565b9050919050565b600061356182612c82565b915061356c83612c82565b925082820261357a81612c82565b915082820484148315176135915761359061317c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135d282612c82565b91506135dd83612c82565b9250826135ed576135ec613598565b5b828204905092915050565b600060408201905061360d6000830185612d2e565b61361a6020830184612d2e565b9392505050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613657601e83612b78565b915061366282613621565b602082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006136e9602283612b78565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061377b602683612b78565b91506137868261371f565b604082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b60006137cc6137c76137c284612c24565b613355565b612c24565b9050919050565b60006137de826137b1565b9050919050565b60006137f0826137d3565b9050919050565b613800816137e5565b82525050565b600060208201905061381b60008301846137f7565b92915050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613857601583612b78565b915061386282613821565b602082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006138c3601683612b78565b91506138ce8261388d565b602082019050919050565b600060208201905081810360008301526138f2816138b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613955602483612b78565b9150613960826138f9565b604082019050919050565b6000602082019050818103600083015261398481613948565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e7602283612b78565b91506139f28261398b565b604082019050919050565b60006020820190508181036000830152613a16816139da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a79602583612b78565b9150613a8482613a1d565b604082019050919050565b60006020820190508181036000830152613aa881613a6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0b602383612b78565b9150613b1682613aaf565b604082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613b9d602983612b78565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c09601b83612b78565b9150613c1482613bd3565b602082019050919050565b60006020820190508181036000830152613c3881613bfc565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613c75601a83612b78565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b6000613cb682612c82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce857613ce761317c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d8681612c44565b82525050565b6000613d988383613d7d565b60208301905092915050565b6000602082019050919050565b6000613dbc82613d51565b613dc68185613d5c565b9350613dd183613d6d565b8060005b83811015613e02578151613de98882613d8c565b9750613df483613da4565b925050600181019050613dd5565b5085935050505092915050565b600060a082019050613e246000830188612d2e565b613e316020830187613381565b8181036040830152613e438186613db1565b9050613e526060830185612e7b565b613e5f6080830184612d2e565b9695505050505050565b600081905092915050565b50565b6000613e84600083613e69565b9150613e8f82613e74565b600082019050919050565b6000613ea582613e77565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602683612b78565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b6000613f4c82612c82565b9150613f5783612c82565b9250828203905081811115613f6f57613f6e61317c565b5b9291505056fea26469706673582212203499ed37e9364bae4be0ee0f5bbd22e0b9c0b85b899462e84507b3eba5b38c1564736f6c63430008130033
Deployed Bytecode
0x60806040526004361061016a5760003560e01c80638da5cb5b116100d1578063bc4b04eb1161008a578063e509c0ae11610064578063e509c0ae14610516578063f2fde38b1461053f578063fa41cf0314610568578063fda5ecb11461059157610171565b8063bc4b04eb14610487578063caf3824d146104b0578063dd62ed3e146104d957610171565b80638da5cb5b146103705780638f937cc41461039b57806395d89b41146103b2578063a457c2d7146103dd578063a9059cbb1461041a578063ae6014801461045757610171565b806339509351116101235780633950935114610288578063590ffdce146102c55780636ed6a48d146102ee57806370a0823114610305578063715018a61461034257806384ff283a1461035957610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de578063217b6da61461020957806323b872dd14610220578063313ce5671461025d57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6105ba565b6040516101989190612bfd565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612cb8565b61064c565b6040516101d59190612d13565b60405180910390f35b3480156101ea57600080fd5b506101f361066a565b6040516102009190612d3d565b60405180910390f35b34801561021557600080fd5b5061021e610674565b005b34801561022c57600080fd5b5061024760048036038101906102429190612d58565b61076f565b6040516102549190612d13565b60405180910390f35b34801561026957600080fd5b50610272610867565b60405161027f9190612dc7565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612cb8565b610870565b6040516102bc9190612d13565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612e0e565b61091c565b005b3480156102fa57600080fd5b50610303610a2c565b005b34801561031157600080fd5b5061032c60048036038101906103279190612e4e565b610b42565b6040516103399190612d3d565b60405180910390f35b34801561034e57600080fd5b50610357610b8a565b005b34801561036557600080fd5b5061036e610c12565b005b34801561037c57600080fd5b506103856111d8565b6040516103929190612e8a565b60405180910390f35b3480156103a757600080fd5b506103b0611202565b005b3480156103be57600080fd5b506103c7611300565b6040516103d49190612bfd565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612cb8565b611392565b6040516104119190612d13565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190612cb8565b61147d565b60405161044e9190612d13565b60405180910390f35b34801561046357600080fd5b5061046c61149b565b60405161047e96959493929190612ea5565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190612f06565b6114ca565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190612f46565b6115cf565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190612f73565b6116f1565b60405161050d9190612d3d565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612f46565b611778565b005b34801561054b57600080fd5b5061056660048036038101906105619190612e4e565b61189a565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612ff1565b611991565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612f06565b611a88565b005b6060600380546105c99061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546105f59061304d565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b6000610660610659611bd7565b8484611bdf565b6001905092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fb906130ca565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561076c573d6000803e3d6000fd5b50565b600061077c848484611da8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c7611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e9061315c565b60405180910390fd5b61085b85610853611bd7565b858403611bdf565b60019150509392505050565b60006012905090565b600061091261087d611bd7565b84846001600061088b611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090d91906131ab565b611bdf565b6001905092915050565b610924611bd7565b73ffffffffffffffffffffffffffffffffffffffff166109426111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f9061322b565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610a2092919061324b565b60405180910390a15050565b610a34611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610a526111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f9061322b565b60405180910390fd5b610ab061066a565b600e81905550610abe61066a565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610aed61066a565b604051610afa9190612d3d565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610b2b61066a565b604051610b389190612d3d565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b92611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610bb06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd9061322b565b60405180910390fd5b610c10600061247b565b565b610c1a611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610c386111d8565b73ffffffffffffffffffffffffffffffffffffffff1614610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c859061322b565b60405180910390fd5b601360149054906101000a900460ff1615610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906132c0565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d6730601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d6261066a565b611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df891906132f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea591906132f5565b6040518363ffffffff1660e01b8152600401610ec2929190613322565b6020604051808303816000875af1158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906132f5565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f8e30610b42565b600080610f996111d8565b426040518863ffffffff1660e01b8152600401610fbb96959493929190613390565b60606040518083038185885af1158015610fd9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ffe9190613406565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016110a0929190613459565b6020604051808303816000875af11580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190613497565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061129057506112616111d8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c6906130ca565b60405180910390fd5b60006112da30610b42565b90506112e581612541565b600047905060008111156112fc576112fb6127e3565b5b5050565b60606004805461130f9061304d565b80601f016020809104026020016040519081016040528092919081815260200182805461133b9061304d565b80156113885780601f1061135d57610100808354040283529160200191611388565b820191906000526020600020905b81548152906001019060200180831161136b57829003601f168201915b5050505050905090565b600080600160006113a1611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613536565b60405180910390fd5b611472611469611bd7565b85858403611bdf565b600191505092915050565b600061149161148a611bd7565b8484611da8565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114d2611bd7565b73ffffffffffffffffffffffffffffffffffffffff166114f06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d9061322b565b60405180910390fd5b6127108261155261066a565b61155c9190613556565b61156691906135c7565b6010819055506127108161157861066a565b6115829190613556565b61158c91906135c7565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516115c39291906135f8565b60405180910390a15050565b6115d7611bd7565b73ffffffffffffffffffffffffffffffffffffffff166115f56111d8565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061322b565b60405180910390fd5b600181101561168f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116869061366d565b60405180910390fd5b6103e88161169b61066a565b6116a59190613556565b6116af91906135c7565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516116e69190612d3d565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611780611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661179e6111d8565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb9061322b565b60405180910390fd5b6001811015611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906136ff565b60405180910390fd5b6103e88161184461066a565b61184e9190613556565b61185891906135c7565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161188f9190612d3d565b60405180910390a150565b6118a2611bd7565b73ffffffffffffffffffffffffffffffffffffffff166118c06111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061322b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90613791565b60405180910390fd5b61198e8161247b565b50565b611999611bd7565b73ffffffffffffffffffffffffffffffffffffffff166119b76111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a049061322b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051611a7d9190613806565b60405180910390a150565b611a90611bd7565b73ffffffffffffffffffffffffffffffffffffffff16611aae6111d8565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb9061322b565b60405180910390fd5b6063821115611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f9061386d565b60405180910390fd5b6063811115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b83906138d9565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611bcb9291906135f8565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061396b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906139fd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d9b9190612d3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613b21565b60405180910390fd5b60008111611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090613bb3565b60405180910390fd5b6000611ed36111d8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611f415750611f116111d8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f5a5750601360159054906101000a900460ff16155b1561244357611f876064611f79600a548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120345750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561208a5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561216f57600e548211156120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613c1f565b60405180910390fd5b600f54826120e185610b42565b6120eb91906131ab565b111561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390613c8b565b60405180910390fd5b43600360085461213c91906131ab565b11156121565761214b836128a2565b1561215557600080fd5b5b600d600081548092919061216990613cab565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122175750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227557600f548261222985610b42565b61223391906131ab565b1115612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90613c8b565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fe57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561232e5761232b606461231d600b548561287690919063ffffffff16565b61288c90919063ffffffff16565b90505b600061233930610b42565b9050601360159054906101000a900460ff161580156123a55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156123bd5750601360169054906101000a900460ff165b80156123ca575060105481115b80156123d95750600c54600d54115b801561240f57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b1561244157612428612423826011546128b5565b612541565b6000479050600081111561243f5761243e6127e3565b5b505b505b6000811115612458576124578430836128ce565b5b61247584846124708486612b4d90919063ffffffff16565b6128ce565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156125a2576125a1613cf3565b5b6040519080825280602002602001820160405280156125d05781602001602082028036833780820191505090505b50905030816000815181106125e8576125e7613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b391906132f5565b816001815181106126c7576126c6613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272e30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612792959493929190613e0f565b600060405180830381600087803b1580156127ac57600080fd5b505af11580156127c0573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161282b90613e9a565b60006040518083038185875af1925050503d8060008114612868576040519150601f19603f3d011682016040523d82523d6000602084013e61286d565b606091505b50508091505050565b600081836128849190613556565b905092915050565b6000818361289a91906135c7565b905092915050565b600080823b905060008111915050919050565b60008183116128c457826128c6565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613b21565b60405180910390fd5b6129b7838383612b63565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613f21565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad091906131ab565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b349190612d3d565b60405180910390a3612b47848484612b68565b50505050565b60008183612b5b9190613f41565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b8114612c6a57600080fd5b50565b600081359050612c7c81612c56565b92915050565b6000819050919050565b612c9581612c82565b8114612ca057600080fd5b50565b600081359050612cb281612c8c565b92915050565b60008060408385031215612ccf57612cce612c1f565b5b6000612cdd85828601612c6d565b9250506020612cee85828601612ca3565b9150509250929050565b60008115159050919050565b612d0d81612cf8565b82525050565b6000602082019050612d286000830184612d04565b92915050565b612d3781612c82565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b600080600060608486031215612d7157612d70612c1f565b5b6000612d7f86828701612c6d565b9350506020612d9086828701612c6d565b9250506040612da186828701612ca3565b9150509250925092565b600060ff82169050919050565b612dc181612dab565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b612deb81612cf8565b8114612df657600080fd5b50565b600081359050612e0881612de2565b92915050565b60008060408385031215612e2557612e24612c1f565b5b6000612e3385828601612c6d565b9250506020612e4485828601612df9565b9150509250929050565b600060208284031215612e6457612e63612c1f565b5b6000612e7284828501612c6d565b91505092915050565b612e8481612c44565b82525050565b6000602082019050612e9f6000830184612e7b565b92915050565b600060c082019050612eba6000830189612d2e565b612ec76020830188612d2e565b612ed46040830187612d2e565b612ee16060830186612d2e565b612eee6080830185612d2e565b612efb60a0830184612d2e565b979650505050505050565b60008060408385031215612f1d57612f1c612c1f565b5b6000612f2b85828601612ca3565b9250506020612f3c85828601612ca3565b9150509250929050565b600060208284031215612f5c57612f5b612c1f565b5b6000612f6a84828501612ca3565b91505092915050565b60008060408385031215612f8a57612f89612c1f565b5b6000612f9885828601612c6d565b9250506020612fa985828601612c6d565b9150509250929050565b6000612fbe82612c24565b9050919050565b612fce81612fb3565b8114612fd957600080fd5b50565b600081359050612feb81612fc5565b92915050565b60006020828403121561300757613006612c1f565b5b600061301584828501612fdc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306557607f821691505b6020821081036130785761307761301e565b5b50919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006130b4601d83612b78565b91506130bf8261307e565b602082019050919050565b600060208201905081810360008301526130e3816130a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613146602883612b78565b9150613151826130ea565b604082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b682612c82565b91506131c183612c82565b92508282019050808211156131d9576131d861317c565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613215602083612b78565b9150613220826131df565b602082019050919050565b6000602082019050818103600083015261324481613208565b9050919050565b60006040820190506132606000830185612e7b565b61326d6020830184612d04565b9392505050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132aa601783612b78565b91506132b582613274565b602082019050919050565b600060208201905081810360008301526132d98161329d565b9050919050565b6000815190506132ef81612c56565b92915050565b60006020828403121561330b5761330a612c1f565b5b6000613319848285016132e0565b91505092915050565b60006040820190506133376000830185612e7b565b6133446020830184612e7b565b9392505050565b6000819050919050565b6000819050919050565b600061337a6133756133708461334b565b613355565b612c82565b9050919050565b61338a8161335f565b82525050565b600060c0820190506133a56000830189612e7b565b6133b26020830188612d2e565b6133bf6040830187613381565b6133cc6060830186613381565b6133d96080830185612e7b565b6133e660a0830184612d2e565b979650505050505050565b60008151905061340081612c8c565b92915050565b60008060006060848603121561341f5761341e612c1f565b5b600061342d868287016133f1565b935050602061343e868287016133f1565b925050604061344f868287016133f1565b9150509250925092565b600060408201905061346e6000830185612e7b565b61347b6020830184612d2e565b9392505050565b60008151905061349181612de2565b92915050565b6000602082840312156134ad576134ac612c1f565b5b60006134bb84828501613482565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613520602583612b78565b915061352b826134c4565b604082019050919050565b6000602082019050818103600083015261354f81613513565b9050919050565b600061356182612c82565b915061356c83612c82565b925082820261357a81612c82565b915082820484148315176135915761359061317c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135d282612c82565b91506135dd83612c82565b9250826135ed576135ec613598565b5b828204905092915050565b600060408201905061360d6000830185612d2e565b61361a6020830184612d2e565b9392505050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613657601e83612b78565b915061366282613621565b602082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006136e9602283612b78565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061377b602683612b78565b91506137868261371f565b604082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b60006137cc6137c76137c284612c24565b613355565b612c24565b9050919050565b60006137de826137b1565b9050919050565b60006137f0826137d3565b9050919050565b613800816137e5565b82525050565b600060208201905061381b60008301846137f7565b92915050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613857601583612b78565b915061386282613821565b602082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006138c3601683612b78565b91506138ce8261388d565b602082019050919050565b600060208201905081810360008301526138f2816138b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613955602483612b78565b9150613960826138f9565b604082019050919050565b6000602082019050818103600083015261398481613948565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e7602283612b78565b91506139f28261398b565b604082019050919050565b60006020820190508181036000830152613a16816139da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a79602583612b78565b9150613a8482613a1d565b604082019050919050565b60006020820190508181036000830152613aa881613a6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0b602383612b78565b9150613b1682613aaf565b604082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613b9d602983612b78565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c09601b83612b78565b9150613c1482613bd3565b602082019050919050565b60006020820190508181036000830152613c3881613bfc565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613c75601a83612b78565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b6000613cb682612c82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce857613ce761317c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d8681612c44565b82525050565b6000613d988383613d7d565b60208301905092915050565b6000602082019050919050565b6000613dbc82613d51565b613dc68185613d5c565b9350613dd183613d6d565b8060005b83811015613e02578151613de98882613d8c565b9750613df483613da4565b925050600181019050613dd5565b5085935050505092915050565b600060a082019050613e246000830188612d2e565b613e316020830187613381565b8181036040830152613e438186613db1565b9050613e526060830185612e7b565b613e5f6080830184612d2e565b9695505050505050565b600081905092915050565b50565b6000613e84600083613e69565b9150613e8f82613e74565b600082019050919050565b6000613ea582613e77565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602683612b78565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b6000613f4c82612c82565b9150613f5783612c82565b9250828203905081811115613f6f57613f6e61317c565b5b9291505056fea26469706673582212203499ed37e9364bae4be0ee0f5bbd22e0b9c0b85b899462e84507b3eba5b38c1564736f6c63430008130033
Deployed ByteCode Sourcemap
25419:9109:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11017:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13250:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12137:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29896:168;;;;;;;;;;;;;:::i;:::-;;13922:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11979:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14856:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30072:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29346:236;;;;;;;;;;;;;:::i;:::-;;12308:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22356:103;;;;;;;;;;;;;:::i;:::-;;27284:1007;;;;;;;;;;;;;:::i;:::-;;21705:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33371:436;;;;;;;;;;;;;:::i;:::-;;11236:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15645:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12664:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30261:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;29022:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28490:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12927:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28746:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22614:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28299:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29590:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11017:100;11071:13;11104:5;11097:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11017:100;:::o;13250:194::-;13358:4;13375:39;13384:12;:10;:12::i;:::-;13398:7;13407:6;13375:8;:39::i;:::-;13432:4;13425:11;;13250:194;;;;:::o;12137:108::-;12198:7;12225:12;;12218:19;;12137:108;:::o;29896:168::-;29959:10;;;;;;;;;;;29945:24;;:10;:24;;;29937:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30014:10;;;;;;;;;;;:19;;:42;30034:21;30014:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29896:168::o;13922:529::-;14062:4;14079:36;14089:6;14097:9;14108:6;14079:9;:36::i;:::-;14128:24;14155:11;:19;14167:6;14155:19;;;;;;;;;;;;;;;:33;14175:12;:10;:12::i;:::-;14155:33;;;;;;;;;;;;;;;;14128:60;;14241:6;14221:16;:26;;14199:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14351:57;14360:6;14368:12;:10;:12::i;:::-;14401:6;14382:16;:25;14351:8;:57::i;:::-;14439:4;14432:11;;;13922:529;;;;;:::o;11979:93::-;12037:5;12062:2;12055:9;;11979:93;:::o;14856:290::-;14969:4;14986:130;15009:12;:10;:12::i;:::-;15036:7;15095:10;15058:11;:25;15070:12;:10;:12::i;:::-;15058:25;;;;;;;;;;;;;;;:34;15084:7;15058:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14986:8;:130::i;:::-;15134:4;15127:11;;14856:290;;;;:::o;30072:181::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30191:6:::1;30161:18;:27;30180:7;30161:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30213:32;30229:7;30238:6;30213:32;;;;;;;:::i;:::-;;;;;;;;30072:181:::0;;:::o;29346:236::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29414:13:::1;:11;:13::i;:::-;29397:14;:30;;;;29459:13;:11;:13::i;:::-;29438:18;:34;;;;29488:33;29507:13;:11;:13::i;:::-;29488:33;;;;;;:::i;:::-;;;;;;;;29537:37;29560:13;:11;:13::i;:::-;29537:37;;;;;;:::i;:::-;;;;;;;;29346:236::o:0;12308:143::-;12398:7;12425:9;:18;12435:7;12425:18;;;;;;;;;;;;;;;;12418:25;;12308:143;;;:::o;22356:103::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22421:30:::1;22448:1;22421:18;:30::i;:::-;22356:103::o:0;27284:1007::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27345:11:::1;;;;;;;;;;;27344:12;27336:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27438:42;27395:15;;:96;;;;;;;;;;;;;;;;;;27502:64;27519:4;27534:15;;;;;;;;;;;27552:13;:11;:13::i;:::-;27502:8;:64::i;:::-;27605:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27593:49;;;27665:4;27685:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27593:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27577:13;;:141;;;;;;;;;;;;;;;;;;27729:15;;;;;;;;;;;:31;;;27768:21;27813:4;27833:24;27851:4;27833:9;:24::i;:::-;27872:1;27888::::0;27904:7:::1;:5;:7::i;:::-;27926:15;27729:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27970:13;;;;;;;;;;;27963:29;;;28001:15;;;;;;;;;;;28019:14;27963:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28059:4;28045:11;;:18;;;;;;;;;;;;;;;;;;28088:4;28074:11;;:18;;;;;;;;;;;;;;;;;;28116:12;28103:10;:25;;;;28164:12;28139:15;;:38;;;;;;;;;;;;;;;;;;28224:4;28188:18;:33;28215:4;28188:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28248:2;28239:6;:11;;;;28268:15;;;;;;;;;;27284:1007::o:0;21705:87::-;21751:7;21778:6;;;;;;;;;;;21771:13;;21705:87;:::o;33371:436::-;33450:10;;;;;;;;;;;33436:24;;:10;:24;;;:49;;;;33478:7;:5;:7::i;:::-;33464:21;;:10;:21;;;33436:49;33414:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33553:28;33584:24;33602:4;33584:9;:24::i;:::-;33553:55;;33621:38;33638:20;33621:16;:38::i;:::-;33670:26;33699:21;33670:50;;33756:1;33735:18;:22;33731:69;;;33774:14;:12;:14::i;:::-;33731:69;33403:404;;33371:436::o;11236:104::-;11292:13;11325:7;11318:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11236:104;:::o;15645:475::-;15763:4;15780:24;15807:11;:25;15819:12;:10;:12::i;:::-;15807:25;;;;;;;;;;;;;;;:34;15833:7;15807:34;;;;;;;;;;;;;;;;15780:61;;15894:15;15874:16;:35;;15852:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16010:67;16019:12;:10;:12::i;:::-;16033:7;16061:15;16042:16;:34;16010:8;:67::i;:::-;16108:4;16101:11;;;15645:475;;;;:::o;12664:200::-;12775:4;12792:42;12802:12;:10;:12::i;:::-;12816:9;12827:6;12792:9;:42::i;:::-;12852:4;12845:11;;12664:200;;;;:::o;30261:485::-;30345:15;30375:16;30406:19;30440:21;30476:24;30515:18;30583:6;;30604:7;;30626:14;;30655:18;;30688:12;;30715;;30561:177;;;;;;;;;;;;30261:485;;;;;;:::o;29022:316::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29202:5:::1;29182:16;29166:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29165:42;;;;:::i;:::-;29150:12;:57;;;;29264:5;29250:10;29234:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29233:36;;;;:::i;:::-;29218:12;:51;;;;29285:45;29301:16;29319:10;29285:45;;;;;;;:::i;:::-;;;;;;;;29022:316:::0;;:::o;28490:248::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28583:1:::1;28571:8;:13;;28563:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28676:4;28664:8;28648:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28647:33;;;;:::i;:::-;28630:14;:50;;;;28696:34;28715:14;;28696:34;;;;;;:::i;:::-;;;;;;;;28490:248:::0;:::o;12927:176::-;13041:7;13068:11;:18;13080:5;13068:18;;;;;;;;;;;;;;;:27;13087:7;13068:27;;;;;;;;;;;;;;;;13061:34;;12927:176;;;;:::o;28746:268::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28843:1:::1;28831:8;:13;;28823:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:4;28932:8;28916:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28915:33;;;;:::i;:::-;28894:18;:54;;;;28964:42;28987:18;;28964:42;;;;;;:::i;:::-;;;;;;;;28746:268:::0;:::o;22614:238::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22737:1:::1;22717:22;;:8;:22;;::::0;22695:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22816:28;22835:8;22816:18;:28::i;:::-;22614:238:::0;:::o;28299:183::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28406:15:::1;28393:10;;:28;;;;;;;;;;;;;;;;;;28439:35;28458:15;28439:35;;;;;;:::i;:::-;;;;;;;;28299:183:::0;:::o;29590:298::-;21936:12;:10;:12::i;:::-;21925:23;;:7;:5;:7::i;:::-;:23;;;21917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29695:2:::1;29685:6;:12;;29677:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29753:2;29742:7;:13;;29734:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29802:6;29793;:15;;;;29829:7;29819;:17;;;;29852:28;29864:6;29872:7;29852:28;;;;;;;:::i;:::-;;;;;;;;29590:298:::0;;:::o;10023:98::-;10076:7;10103:10;10096:17;;10023:98;:::o;19428:380::-;19581:1;19564:19;;:5;:19;;;19556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19662:1;19643:21;;:7;:21;;;19635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19746:6;19716:11;:18;19728:5;19716:18;;;;;;;;;;;;;;;:27;19735:7;19716:27;;;;;;;;;;;;;;;:36;;;;19784:7;19768:32;;19777:5;19768:32;;;19793:6;19768:32;;;;;;:::i;:::-;;;;;;;;19428:380;;;:::o;30754:2291::-;30902:1;30886:18;;:4;:18;;;30878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30979:1;30965:16;;:2;:16;;;30957:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31049:1;31040:6;:10;31032:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31107:17;31151:7;:5;:7::i;:::-;31143:15;;:4;:15;;;;:32;;;;;31168:7;:5;:7::i;:::-;31162:13;;:2;:13;;;;31143:32;:43;;;;;31180:6;;;;;;;;;;;31179:7;31143:43;31139:1735;;;31229:27;31252:3;31229:18;31240:6;;31229;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31217:39;;31303:13;;;;;;;;;;;31295:21;;:4;:21;;;:72;;;;;31351:15;;;;;;;;;;;31337:30;;:2;:30;;;;31295:72;:116;;;;;31389:18;:22;31408:2;31389:22;;;;;;;;;;;;;;;;;;;;;;;;;31388:23;31295:116;31273:568;;;31464:14;;31454:6;:24;;31446:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31585:18;;31575:6;31559:13;31569:2;31559:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31529:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:12;31711:1;31698:10;;:14;;;;:::i;:::-;:29;31694:102;;;31761:14;31772:2;31761:10;:14::i;:::-;31760:15;31752:24;;;;;;31694:102;31814:9;;:11;;;;;;;;;:::i;:::-;;;;;;31273:568;31867:13;;;;;;;;;;;31861:19;;:2;:19;;;;:46;;;;;31885:18;:22;31904:2;31885:22;;;;;;;;;;;;;;;;;;;;;;;;;31884:23;31861:46;31857:231;;;31984:18;;31974:6;31958:13;31968:2;31958:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31928:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31857:231;32114:13;;;;;;;;;;;32108:19;;:2;:19;;;:44;;;;;32147:4;32131:21;;:4;:21;;;;32108:44;32104:125;;;32185:28;32209:3;32185:19;32196:7;;32185:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32173:40;;32104:125;32245:28;32276:24;32294:4;32276:9;:24::i;:::-;32245:55;;32338:6;;;;;;;;;;;32337:7;:47;;;;;32371:13;;;;;;;;;;;32365:19;;:2;:19;;;32337:47;:79;;;;;32405:11;;;;;;;;;;;32337:79;:135;;;;;32460:12;;32437:20;:35;32337:135;:186;;;;;32505:18;;32493:9;;:30;32337:186;:246;;;;;32570:12;32544:39;;:15;;;;;;;;;;;:39;;;;32337:246;32315:548;;;32618:57;32635:39;32639:20;32661:12;;32635:3;:39::i;:::-;32618:16;:57::i;:::-;32694:26;32723:21;32694:50;;32788:1;32767:18;:22;32763:85;;;32814:14;:12;:14::i;:::-;32763:85;32599:264;32315:548;31188:1686;31139:1735;32902:1;32890:9;:13;32886:93;;;32920:47;32936:4;32950;32957:9;32920:15;:47::i;:::-;32886:93;32989:48;33005:4;33011:2;33015:21;33026:9;33015:6;:10;;:21;;;;:::i;:::-;32989:15;:48::i;:::-;30867:2178;30754:2291;;;:::o;23012:191::-;23086:16;23105:6;;;;;;;;;;;23086:25;;23131:8;23122:6;;:17;;;;;;;;;;;;;;;;;;23186:8;23155:40;;23176:8;23155:40;;;;;;;;;;;;23075:128;23012:191;:::o;33815:532::-;26589:4;26580:6;;:13;;;;;;;;;;;;;;;;;;33918:12:::1;33893:15;;:38;;;;;;;;;;;;;;;;;;33942:21;33980:1;33966:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33942:40;;34011:4;33993;33998:1;33993:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34037:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34027:4;34032:1;34027:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34070:62;34087:4;34102:15;;;;;;;;;;;34120:11;34070:8;:62::i;:::-;34143:15;;;;;;;;;;;:66;;;34224:11;34250:1;34266:4;34293;34313:15;34143:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33882:465;26625:5:::0;26616:6;;:14;;;;;;;;;;;;;;;;;;33815:532;:::o;34355:170::-;34398:12;34443:10;;;;;;;;;;;34435:24;;34467:21;34435:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34421:96;;;;;34387:138;34355:170::o;3382:98::-;3440:7;3471:1;3467;:5;;;;:::i;:::-;3460:12;;3382:98;;;;:::o;3781:::-;3839:7;3870:1;3866;:5;;;;:::i;:::-;3859:12;;3781:98;;;;:::o;33168:195::-;33227:4;33244:12;33311:7;33299:20;33291:28;;33354:1;33347:4;:8;33340:15;;;33168:195;;;:::o;33053:107::-;33110:7;33142:1;33138;:5;33137:15;;33151:1;33137:15;;;33147:1;33137:15;33130:22;;33053:107;;;;:::o;16610:770::-;16768:1;16750:20;;:6;:20;;;16742:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16852:1;16831:23;;:9;:23;;;16823:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16907:47;16928:6;16936:9;16947:6;16907:20;:47::i;:::-;16967:21;16991:9;:17;17001:6;16991:17;;;;;;;;;;;;;;;;16967:41;;17058:6;17041:13;:23;;17019:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17202:6;17186:13;:22;17166:9;:17;17176:6;17166:17;;;;;;;;;;;;;;;:42;;;;17254:6;17230:9;:20;17240:9;17230:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17295:9;17278:35;;17287:6;17278:35;;;17306:6;17278:35;;;;;;:::i;:::-;;;;;;;;17326:46;17346:6;17354:9;17365:6;17326:19;:46::i;:::-;16731:649;16610:770;;;:::o;3025:98::-;3083:7;3114:1;3110;:5;;;;:::i;:::-;3103:12;;3025:98;;;;:::o;20408:125::-;;;;:::o;21137:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:116::-;4923:21;4938:5;4923:21;:::i;:::-;4916:5;4913:32;4903:60;;4959:1;4956;4949:12;4903:60;4853:116;:::o;4975:133::-;5018:5;5056:6;5043:20;5034:29;;5072:30;5096:5;5072:30;:::i;:::-;4975:133;;;;:::o;5114:468::-;5179:6;5187;5236:2;5224:9;5215:7;5211:23;5207:32;5204:119;;;5242:79;;:::i;:::-;5204:119;5362:1;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5333:117;5489:2;5515:50;5557:7;5548:6;5537:9;5533:22;5515:50;:::i;:::-;5505:60;;5460:115;5114:468;;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:118::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5923:118;;:::o;6047:222::-;6140:4;6178:2;6167:9;6163:18;6155:26;;6191:71;6259:1;6248:9;6244:17;6235:6;6191:71;:::i;:::-;6047:222;;;;:::o;6275:775::-;6508:4;6546:3;6535:9;6531:19;6523:27;;6560:71;6628:1;6617:9;6613:17;6604:6;6560:71;:::i;:::-;6641:72;6709:2;6698:9;6694:18;6685:6;6641:72;:::i;:::-;6723;6791:2;6780:9;6776:18;6767:6;6723:72;:::i;:::-;6805;6873:2;6862:9;6858:18;6849:6;6805:72;:::i;:::-;6887:73;6955:3;6944:9;6940:19;6931:6;6887:73;:::i;:::-;6970;7038:3;7027:9;7023:19;7014:6;6970:73;:::i;:::-;6275:775;;;;;;;;;:::o;7056:474::-;7124:6;7132;7181:2;7169:9;7160:7;7156:23;7152:32;7149:119;;;7187:79;;:::i;:::-;7149:119;7307:1;7332:53;7377:7;7368:6;7357:9;7353:22;7332:53;:::i;:::-;7322:63;;7278:117;7434:2;7460:53;7505:7;7496:6;7485:9;7481:22;7460:53;:::i;:::-;7450:63;;7405:118;7056:474;;;;;:::o;7536:329::-;7595:6;7644:2;7632:9;7623:7;7619:23;7615:32;7612:119;;;7650:79;;:::i;:::-;7612:119;7770:1;7795:53;7840:7;7831:6;7820:9;7816:22;7795:53;:::i;:::-;7785:63;;7741:117;7536:329;;;;:::o;7871:474::-;7939:6;7947;7996:2;7984:9;7975:7;7971:23;7967:32;7964:119;;;8002:79;;:::i;:::-;7964:119;8122:1;8147:53;8192:7;8183:6;8172:9;8168:22;8147:53;:::i;:::-;8137:63;;8093:117;8249:2;8275:53;8320:7;8311:6;8300:9;8296:22;8275:53;:::i;:::-;8265:63;;8220:118;7871:474;;;;;:::o;8351:104::-;8396:7;8425:24;8443:5;8425:24;:::i;:::-;8414:35;;8351:104;;;:::o;8461:138::-;8542:32;8568:5;8542:32;:::i;:::-;8535:5;8532:43;8522:71;;8589:1;8586;8579:12;8522:71;8461:138;:::o;8605:155::-;8659:5;8697:6;8684:20;8675:29;;8713:41;8748:5;8713:41;:::i;:::-;8605:155;;;;:::o;8766:345::-;8833:6;8882:2;8870:9;8861:7;8857:23;8853:32;8850:119;;;8888:79;;:::i;:::-;8850:119;9008:1;9033:61;9086:7;9077:6;9066:9;9062:22;9033:61;:::i;:::-;9023:71;;8979:125;8766:345;;;;:::o;9117:180::-;9165:77;9162:1;9155:88;9262:4;9259:1;9252:15;9286:4;9283:1;9276:15;9303:320;9347:6;9384:1;9378:4;9374:12;9364:22;;9431:1;9425:4;9421:12;9452:18;9442:81;;9508:4;9500:6;9496:17;9486:27;;9442:81;9570:2;9562:6;9559:14;9539:18;9536:38;9533:84;;9589:18;;:::i;:::-;9533:84;9354:269;9303:320;;;:::o;9629:179::-;9769:31;9765:1;9757:6;9753:14;9746:55;9629:179;:::o;9814:366::-;9956:3;9977:67;10041:2;10036:3;9977:67;:::i;:::-;9970:74;;10053:93;10142:3;10053:93;:::i;:::-;10171:2;10166:3;10162:12;10155:19;;9814:366;;;:::o;10186:419::-;10352:4;10390:2;10379:9;10375:18;10367:26;;10439:9;10433:4;10429:20;10425:1;10414:9;10410:17;10403:47;10467:131;10593:4;10467:131;:::i;:::-;10459:139;;10186:419;;;:::o;10611:227::-;10751:34;10747:1;10739:6;10735:14;10728:58;10820:10;10815:2;10807:6;10803:15;10796:35;10611:227;:::o;10844:366::-;10986:3;11007:67;11071:2;11066:3;11007:67;:::i;:::-;11000:74;;11083:93;11172:3;11083:93;:::i;:::-;11201:2;11196:3;11192:12;11185:19;;10844:366;;;:::o;11216:419::-;11382:4;11420:2;11409:9;11405:18;11397:26;;11469:9;11463:4;11459:20;11455:1;11444:9;11440:17;11433:47;11497:131;11623:4;11497:131;:::i;:::-;11489:139;;11216:419;;;:::o;11641:180::-;11689:77;11686:1;11679:88;11786:4;11783:1;11776:15;11810:4;11807:1;11800:15;11827:191;11867:3;11886:20;11904:1;11886:20;:::i;:::-;11881:25;;11920:20;11938:1;11920:20;:::i;:::-;11915:25;;11963:1;11960;11956:9;11949:16;;11984:3;11981:1;11978:10;11975:36;;;11991:18;;:::i;:::-;11975:36;11827:191;;;;:::o;12024:182::-;12164:34;12160:1;12152:6;12148:14;12141:58;12024:182;:::o;12212:366::-;12354:3;12375:67;12439:2;12434:3;12375:67;:::i;:::-;12368:74;;12451:93;12540:3;12451:93;:::i;:::-;12569:2;12564:3;12560:12;12553:19;;12212:366;;;:::o;12584:419::-;12750:4;12788:2;12777:9;12773:18;12765:26;;12837:9;12831:4;12827:20;12823:1;12812:9;12808:17;12801:47;12865:131;12991:4;12865:131;:::i;:::-;12857:139;;12584:419;;;:::o;13009:320::-;13124:4;13162:2;13151:9;13147:18;13139:26;;13175:71;13243:1;13232:9;13228:17;13219:6;13175:71;:::i;:::-;13256:66;13318:2;13307:9;13303:18;13294:6;13256:66;:::i;:::-;13009:320;;;;;:::o;13335:173::-;13475:25;13471:1;13463:6;13459:14;13452:49;13335:173;:::o;13514:366::-;13656:3;13677:67;13741:2;13736:3;13677:67;:::i;:::-;13670:74;;13753:93;13842:3;13753:93;:::i;:::-;13871:2;13866:3;13862:12;13855:19;;13514:366;;;:::o;13886:419::-;14052:4;14090:2;14079:9;14075:18;14067:26;;14139:9;14133:4;14129:20;14125:1;14114:9;14110:17;14103:47;14167:131;14293:4;14167:131;:::i;:::-;14159:139;;13886:419;;;:::o;14311:143::-;14368:5;14399:6;14393:13;14384:22;;14415:33;14442:5;14415:33;:::i;:::-;14311:143;;;;:::o;14460:351::-;14530:6;14579:2;14567:9;14558:7;14554:23;14550:32;14547:119;;;14585:79;;:::i;:::-;14547:119;14705:1;14730:64;14786:7;14777:6;14766:9;14762:22;14730:64;:::i;:::-;14720:74;;14676:128;14460:351;;;;:::o;14817:332::-;14938:4;14976:2;14965:9;14961:18;14953:26;;14989:71;15057:1;15046:9;15042:17;15033:6;14989:71;:::i;:::-;15070:72;15138:2;15127:9;15123:18;15114:6;15070:72;:::i;:::-;14817:332;;;;;:::o;15155:85::-;15200:7;15229:5;15218:16;;15155:85;;;:::o;15246:60::-;15274:3;15295:5;15288:12;;15246:60;;;:::o;15312:158::-;15370:9;15403:61;15421:42;15430:32;15456:5;15430:32;:::i;:::-;15421:42;:::i;:::-;15403:61;:::i;:::-;15390:74;;15312:158;;;:::o;15476:147::-;15571:45;15610:5;15571:45;:::i;:::-;15566:3;15559:58;15476:147;;:::o;15629:807::-;15878:4;15916:3;15905:9;15901:19;15893:27;;15930:71;15998:1;15987:9;15983:17;15974:6;15930:71;:::i;:::-;16011:72;16079:2;16068:9;16064:18;16055:6;16011:72;:::i;:::-;16093:80;16169:2;16158:9;16154:18;16145:6;16093:80;:::i;:::-;16183;16259:2;16248:9;16244:18;16235:6;16183:80;:::i;:::-;16273:73;16341:3;16330:9;16326:19;16317:6;16273:73;:::i;:::-;16356;16424:3;16413:9;16409:19;16400:6;16356:73;:::i;:::-;15629:807;;;;;;;;;:::o;16442:143::-;16499:5;16530:6;16524:13;16515:22;;16546:33;16573:5;16546:33;:::i;:::-;16442:143;;;;:::o;16591:663::-;16679:6;16687;16695;16744:2;16732:9;16723:7;16719:23;16715:32;16712:119;;;16750:79;;:::i;:::-;16712:119;16870:1;16895:64;16951:7;16942:6;16931:9;16927:22;16895:64;:::i;:::-;16885:74;;16841:128;17008:2;17034:64;17090:7;17081:6;17070:9;17066:22;17034:64;:::i;:::-;17024:74;;16979:129;17147:2;17173:64;17229:7;17220:6;17209:9;17205:22;17173:64;:::i;:::-;17163:74;;17118:129;16591:663;;;;;:::o;17260:332::-;17381:4;17419:2;17408:9;17404:18;17396:26;;17432:71;17500:1;17489:9;17485:17;17476:6;17432:71;:::i;:::-;17513:72;17581:2;17570:9;17566:18;17557:6;17513:72;:::i;:::-;17260:332;;;;;:::o;17598:137::-;17652:5;17683:6;17677:13;17668:22;;17699:30;17723:5;17699:30;:::i;:::-;17598:137;;;;:::o;17741:345::-;17808:6;17857:2;17845:9;17836:7;17832:23;17828:32;17825:119;;;17863:79;;:::i;:::-;17825:119;17983:1;18008:61;18061:7;18052:6;18041:9;18037:22;18008:61;:::i;:::-;17998:71;;17954:125;17741:345;;;;:::o;18092:224::-;18232:34;18228:1;18220:6;18216:14;18209:58;18301:7;18296:2;18288:6;18284:15;18277:32;18092:224;:::o;18322:366::-;18464:3;18485:67;18549:2;18544:3;18485:67;:::i;:::-;18478:74;;18561:93;18650:3;18561:93;:::i;:::-;18679:2;18674:3;18670:12;18663:19;;18322:366;;;:::o;18694:419::-;18860:4;18898:2;18887:9;18883:18;18875:26;;18947:9;18941:4;18937:20;18933:1;18922:9;18918:17;18911:47;18975:131;19101:4;18975:131;:::i;:::-;18967:139;;18694:419;;;:::o;19119:410::-;19159:7;19182:20;19200:1;19182:20;:::i;:::-;19177:25;;19216:20;19234:1;19216:20;:::i;:::-;19211:25;;19271:1;19268;19264:9;19293:30;19311:11;19293:30;:::i;:::-;19282:41;;19472:1;19463:7;19459:15;19456:1;19453:22;19433:1;19426:9;19406:83;19383:139;;19502:18;;:::i;:::-;19383:139;19167:362;19119:410;;;;:::o;19535:180::-;19583:77;19580:1;19573:88;19680:4;19677:1;19670:15;19704:4;19701:1;19694:15;19721:185;19761:1;19778:20;19796:1;19778:20;:::i;:::-;19773:25;;19812:20;19830:1;19812:20;:::i;:::-;19807:25;;19851:1;19841:35;;19856:18;;:::i;:::-;19841:35;19898:1;19895;19891:9;19886:14;;19721:185;;;;:::o;19912:332::-;20033:4;20071:2;20060:9;20056:18;20048:26;;20084:71;20152:1;20141:9;20137:17;20128:6;20084:71;:::i;:::-;20165:72;20233:2;20222:9;20218:18;20209:6;20165:72;:::i;:::-;19912:332;;;;;:::o;20250:180::-;20390:32;20386:1;20378:6;20374:14;20367:56;20250:180;:::o;20436:366::-;20578:3;20599:67;20663:2;20658:3;20599:67;:::i;:::-;20592:74;;20675:93;20764:3;20675:93;:::i;:::-;20793:2;20788:3;20784:12;20777:19;;20436:366;;;:::o;20808:419::-;20974:4;21012:2;21001:9;20997:18;20989:26;;21061:9;21055:4;21051:20;21047:1;21036:9;21032:17;21025:47;21089:131;21215:4;21089:131;:::i;:::-;21081:139;;20808:419;;;:::o;21233:221::-;21373:34;21369:1;21361:6;21357:14;21350:58;21442:4;21437:2;21429:6;21425:15;21418:29;21233:221;:::o;21460:366::-;21602:3;21623:67;21687:2;21682:3;21623:67;:::i;:::-;21616:74;;21699:93;21788:3;21699:93;:::i;:::-;21817:2;21812:3;21808:12;21801:19;;21460:366;;;:::o;21832:419::-;21998:4;22036:2;22025:9;22021:18;22013:26;;22085:9;22079:4;22075:20;22071:1;22060:9;22056:17;22049:47;22113:131;22239:4;22113:131;:::i;:::-;22105:139;;21832:419;;;:::o;22257:225::-;22397:34;22393:1;22385:6;22381:14;22374:58;22466:8;22461:2;22453:6;22449:15;22442:33;22257:225;:::o;22488:366::-;22630:3;22651:67;22715:2;22710:3;22651:67;:::i;:::-;22644:74;;22727:93;22816:3;22727:93;:::i;:::-;22845:2;22840:3;22836:12;22829:19;;22488:366;;;:::o;22860:419::-;23026:4;23064:2;23053:9;23049:18;23041:26;;23113:9;23107:4;23103:20;23099:1;23088:9;23084:17;23077:47;23141:131;23267:4;23141:131;:::i;:::-;23133:139;;22860:419;;;:::o;23285:142::-;23335:9;23368:53;23386:34;23395:24;23413:5;23395:24;:::i;:::-;23386:34;:::i;:::-;23368:53;:::i;:::-;23355:66;;23285:142;;;:::o;23433:126::-;23483:9;23516:37;23547:5;23516:37;:::i;:::-;23503:50;;23433:126;;;:::o;23565:134::-;23623:9;23656:37;23687:5;23656:37;:::i;:::-;23643:50;;23565:134;;;:::o;23705:147::-;23800:45;23839:5;23800:45;:::i;:::-;23795:3;23788:58;23705:147;;:::o;23858:238::-;23959:4;23997:2;23986:9;23982:18;23974:26;;24010:79;24086:1;24075:9;24071:17;24062:6;24010:79;:::i;:::-;23858:238;;;;:::o;24102:171::-;24242:23;24238:1;24230:6;24226:14;24219:47;24102:171;:::o;24279:366::-;24421:3;24442:67;24506:2;24501:3;24442:67;:::i;:::-;24435:74;;24518:93;24607:3;24518:93;:::i;:::-;24636:2;24631:3;24627:12;24620:19;;24279:366;;;:::o;24651:419::-;24817:4;24855:2;24844:9;24840:18;24832:26;;24904:9;24898:4;24894:20;24890:1;24879:9;24875:17;24868:47;24932:131;25058:4;24932:131;:::i;:::-;24924:139;;24651:419;;;:::o;25076:172::-;25216:24;25212:1;25204:6;25200:14;25193:48;25076:172;:::o;25254:366::-;25396:3;25417:67;25481:2;25476:3;25417:67;:::i;:::-;25410:74;;25493:93;25582:3;25493:93;:::i;:::-;25611:2;25606:3;25602:12;25595:19;;25254:366;;;:::o;25626:419::-;25792:4;25830:2;25819:9;25815:18;25807:26;;25879:9;25873:4;25869:20;25865:1;25854:9;25850:17;25843:47;25907:131;26033:4;25907:131;:::i;:::-;25899:139;;25626:419;;;:::o;26051:223::-;26191:34;26187:1;26179:6;26175:14;26168:58;26260:6;26255:2;26247:6;26243:15;26236:31;26051:223;:::o;26280:366::-;26422:3;26443:67;26507:2;26502:3;26443:67;:::i;:::-;26436:74;;26519:93;26608:3;26519:93;:::i;:::-;26637:2;26632:3;26628:12;26621:19;;26280:366;;;:::o;26652:419::-;26818:4;26856:2;26845:9;26841:18;26833:26;;26905:9;26899:4;26895:20;26891:1;26880:9;26876:17;26869:47;26933:131;27059:4;26933:131;:::i;:::-;26925:139;;26652:419;;;:::o;27077:221::-;27217:34;27213:1;27205:6;27201:14;27194:58;27286:4;27281:2;27273:6;27269:15;27262:29;27077:221;:::o;27304:366::-;27446:3;27467:67;27531:2;27526:3;27467:67;:::i;:::-;27460:74;;27543:93;27632:3;27543:93;:::i;:::-;27661:2;27656:3;27652:12;27645:19;;27304:366;;;:::o;27676:419::-;27842:4;27880:2;27869:9;27865:18;27857:26;;27929:9;27923:4;27919:20;27915:1;27904:9;27900:17;27893:47;27957:131;28083:4;27957:131;:::i;:::-;27949:139;;27676:419;;;:::o;28101:224::-;28241:34;28237:1;28229:6;28225:14;28218:58;28310:7;28305:2;28297:6;28293:15;28286:32;28101:224;:::o;28331:366::-;28473:3;28494:67;28558:2;28553:3;28494:67;:::i;:::-;28487:74;;28570:93;28659:3;28570:93;:::i;:::-;28688:2;28683:3;28679:12;28672:19;;28331:366;;;:::o;28703:419::-;28869:4;28907:2;28896:9;28892:18;28884:26;;28956:9;28950:4;28946:20;28942:1;28931:9;28927:17;28920:47;28984:131;29110:4;28984:131;:::i;:::-;28976:139;;28703:419;;;:::o;29128:222::-;29268:34;29264:1;29256:6;29252:14;29245:58;29337:5;29332:2;29324:6;29320:15;29313:30;29128:222;:::o;29356:366::-;29498:3;29519:67;29583:2;29578:3;29519:67;:::i;:::-;29512:74;;29595:93;29684:3;29595:93;:::i;:::-;29713:2;29708:3;29704:12;29697:19;;29356:366;;;:::o;29728:419::-;29894:4;29932:2;29921:9;29917:18;29909:26;;29981:9;29975:4;29971:20;29967:1;29956:9;29952:17;29945:47;30009:131;30135:4;30009:131;:::i;:::-;30001:139;;29728:419;;;:::o;30153:228::-;30293:34;30289:1;30281:6;30277:14;30270:58;30362:11;30357:2;30349:6;30345:15;30338:36;30153:228;:::o;30387:366::-;30529:3;30550:67;30614:2;30609:3;30550:67;:::i;:::-;30543:74;;30626:93;30715:3;30626:93;:::i;:::-;30744:2;30739:3;30735:12;30728:19;;30387:366;;;:::o;30759:419::-;30925:4;30963:2;30952:9;30948:18;30940:26;;31012:9;31006:4;31002:20;30998:1;30987:9;30983:17;30976:47;31040:131;31166:4;31040:131;:::i;:::-;31032:139;;30759:419;;;:::o;31184:177::-;31324:29;31320:1;31312:6;31308:14;31301:53;31184:177;:::o;31367:366::-;31509:3;31530:67;31594:2;31589:3;31530:67;:::i;:::-;31523:74;;31606:93;31695:3;31606:93;:::i;:::-;31724:2;31719:3;31715:12;31708:19;;31367:366;;;:::o;31739:419::-;31905:4;31943:2;31932:9;31928:18;31920:26;;31992:9;31986:4;31982:20;31978:1;31967:9;31963:17;31956:47;32020:131;32146:4;32020:131;:::i;:::-;32012:139;;31739:419;;;:::o;32164:176::-;32304:28;32300:1;32292:6;32288:14;32281:52;32164:176;:::o;32346:366::-;32488:3;32509:67;32573:2;32568:3;32509:67;:::i;:::-;32502:74;;32585:93;32674:3;32585:93;:::i;:::-;32703:2;32698:3;32694:12;32687:19;;32346:366;;;:::o;32718:419::-;32884:4;32922:2;32911:9;32907:18;32899:26;;32971:9;32965:4;32961:20;32957:1;32946:9;32942:17;32935:47;32999:131;33125:4;32999:131;:::i;:::-;32991:139;;32718:419;;;:::o;33143:233::-;33182:3;33205:24;33223:5;33205:24;:::i;:::-;33196:33;;33251:66;33244:5;33241:77;33238:103;;33321:18;;:::i;:::-;33238:103;33368:1;33361:5;33357:13;33350:20;;33143:233;;;:::o;33382:180::-;33430:77;33427:1;33420:88;33527:4;33524:1;33517:15;33551:4;33548:1;33541:15;33568:180;33616:77;33613:1;33606:88;33713:4;33710:1;33703:15;33737:4;33734:1;33727:15;33754:114;33821:6;33855:5;33849:12;33839:22;;33754:114;;;:::o;33874:184::-;33973:11;34007:6;34002:3;33995:19;34047:4;34042:3;34038:14;34023:29;;33874:184;;;;:::o;34064:132::-;34131:4;34154:3;34146:11;;34184:4;34179:3;34175:14;34167:22;;34064:132;;;:::o;34202:108::-;34279:24;34297:5;34279:24;:::i;:::-;34274:3;34267:37;34202:108;;:::o;34316:179::-;34385:10;34406:46;34448:3;34440:6;34406:46;:::i;:::-;34484:4;34479:3;34475:14;34461:28;;34316:179;;;;:::o;34501:113::-;34571:4;34603;34598:3;34594:14;34586:22;;34501:113;;;:::o;34650:732::-;34769:3;34798:54;34846:5;34798:54;:::i;:::-;34868:86;34947:6;34942:3;34868:86;:::i;:::-;34861:93;;34978:56;35028:5;34978:56;:::i;:::-;35057:7;35088:1;35073:284;35098:6;35095:1;35092:13;35073:284;;;35174:6;35168:13;35201:63;35260:3;35245:13;35201:63;:::i;:::-;35194:70;;35287:60;35340:6;35287:60;:::i;:::-;35277:70;;35133:224;35120:1;35117;35113:9;35108:14;;35073:284;;;35077:14;35373:3;35366:10;;34774:608;;;34650:732;;;;:::o;35388:831::-;35651:4;35689:3;35678:9;35674:19;35666:27;;35703:71;35771:1;35760:9;35756:17;35747:6;35703:71;:::i;:::-;35784:80;35860:2;35849:9;35845:18;35836:6;35784:80;:::i;:::-;35911:9;35905:4;35901:20;35896:2;35885:9;35881:18;35874:48;35939:108;36042:4;36033:6;35939:108;:::i;:::-;35931:116;;36057:72;36125:2;36114:9;36110:18;36101:6;36057:72;:::i;:::-;36139:73;36207:3;36196:9;36192:19;36183:6;36139:73;:::i;:::-;35388:831;;;;;;;;:::o;36225:147::-;36326:11;36363:3;36348:18;;36225:147;;;;:::o;36378:114::-;;:::o;36498:398::-;36657:3;36678:83;36759:1;36754:3;36678:83;:::i;:::-;36671:90;;36770:93;36859:3;36770:93;:::i;:::-;36888:1;36883:3;36879:11;36872:18;;36498:398;;;:::o;36902:379::-;37086:3;37108:147;37251:3;37108:147;:::i;:::-;37101:154;;37272:3;37265:10;;36902:379;;;:::o;37287:225::-;37427:34;37423:1;37415:6;37411:14;37404:58;37496:8;37491:2;37483:6;37479:15;37472:33;37287:225;:::o;37518:366::-;37660:3;37681:67;37745:2;37740:3;37681:67;:::i;:::-;37674:74;;37757:93;37846:3;37757:93;:::i;:::-;37875:2;37870:3;37866:12;37859:19;;37518:366;;;:::o;37890:419::-;38056:4;38094:2;38083:9;38079:18;38071:26;;38143:9;38137:4;38133:20;38129:1;38118:9;38114:17;38107:47;38171:131;38297:4;38171:131;:::i;:::-;38163:139;;37890:419;;;:::o;38315:194::-;38355:4;38375:20;38393:1;38375:20;:::i;:::-;38370:25;;38409:20;38427:1;38409:20;:::i;:::-;38404:25;;38453:1;38450;38446:9;38438:17;;38477:1;38471:4;38468:11;38465:37;;;38482:18;;:::i;:::-;38465:37;38315:194;;;;:::o
Swarm Source
ipfs://3499ed37e9364bae4be0ee0f5bbd22e0b9c0b85b899462e84507b3eba5b38c15
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.