Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 CURE
Holders
201
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,895,227.381739245706464838 CUREValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CURE
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-13 */ /** * SPDX-License-Identifier: MIT */ 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 updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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 IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract CURE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); // Swapback bool private swapping; bool public swapEnabled = false; uint256 public swapTokensAtAmount; uint256 public maxTokensForSwapback; //Anti-whale bool public limitsInEffect = true; bool public transferDelayEnabled = true; uint256 public maxWallet; uint256 public maxTransactionAmount; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Fee receivers address public lpWallet; address public marketingWallet; address public productsWallet; bool public tradingActive = false; uint256 public totalFeesBuy; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyProductsFee; uint256 public totalFeesSell; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellProductsFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForProducts; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isFeeExempt; mapping(address => bool) public _isTxLimitExempt; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event productsWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Cureum", "CURE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 22; uint256 _buyLiquidityFee = 1; uint256 _buyProductsFee = 2; uint256 _sellMarketingFee = 22; uint256 _sellLiquidityFee = 1; uint256 _sellProductsFee = 2; uint256 totalSupply = 1000000000 * 1e18; maxTransactionAmount = (totalSupply * 15) / 1000; // 1.5% of total supply maxWallet = (totalSupply * 25) / 1000; // 2.5% of total supply swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger maxTokensForSwapback = (totalSupply * 2) / 100; // 2% max swapback buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyProductsFee = _buyProductsFee; totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyProductsFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellProductsFee = _sellProductsFee; totalFeesSell = sellMarketingFee + sellLiquidityFee + sellProductsFee; marketingWallet = address(msg.sender); productsWallet = address(msg.sender); lpWallet = msg.sender; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(marketingWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(marketingWallet, true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} /// @dev Launches the token and enables trading. Irriversable. function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } /// @dev Removes the max wallet and max transaction limits function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } /// @dev Disables the Same wallet block transfer delay function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } /// @dev Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500. function updateSwapTokensAtAmount(uint256 newMin, uint256 newMax) external onlyOwner returns (bool) { require( newMin >= 1, "Swap amount cannot be lower than 0.001% total supply." ); require( newMin <= 500, "Swap amount cannot be higher than 0.5% total supply." ); require( newMin <= newMax, "Swap amount cannot be higher than maxTokensForSwapback" ); swapTokensAtAmount = newMin * totalSupply()/ 100000; maxTokensForSwapback = newMax * totalSupply()/ 100000; return true; } /// @dev Changes the maximum amount of tokens that can be bought or sold in a single transaction /// @param newNum Base 1000, so 1% = 10 function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= 2, "Cannot set maxTransactionAmount lower than 0.2%" ); maxTransactionAmount = newNum * (10**18); } /// @dev Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10 function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * totalSupply()/1000; } /// @dev Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isTxLimitExempt[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } /// @dev Sets the fees for buys /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool /// @param _productsFee The fee for the product wallet function updateBuyFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _productsFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyProductsFee = _productsFee; totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyProductsFee; } /// @dev Sets the fees for sells /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool /// @param _productsFee The fee for the product wallet function updateSellFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _productsFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellProductsFee = _productsFee; totalFeesSell = sellMarketingFee + sellLiquidityFee + sellProductsFee; } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function excludeFromFees(address account, bool excluded) public onlyOwner { _isFeeExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @dev Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateLPWallet(address newLPWallet) external onlyOwner { lpWallet = newLPWallet; } function updateProductsWallet(address newWallet) external onlyOwner { emit productsWalletUpdated(newWallet, productsWallet); productsWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isFeeExempt[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isFeeExempt[from] || _isFeeExempt[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isTxLimitExempt[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isTxLimitExempt[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isTxLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isFeeExempt[from] && !_isFeeExempt[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isFeeExempt[from] || _isFeeExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && totalFeesSell > 0) { fees = amount.mul(totalFeesSell).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / totalFeesSell; tokensForProducts += (fees * sellProductsFee) / totalFeesSell; tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell; } // on buy else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) { fees = amount.mul(totalFeesBuy).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / totalFeesBuy; tokensForProducts += (fees * buyProductsFee) / totalFeesBuy; tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForProducts; bool success; if (contractBalance == 0) { return; } if (contractBalance > maxTokensForSwapback) { contractBalance = maxTokensForSwapback; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div( totalTokensToSwap ); uint256 ethForProducts = ethBalance.mul(tokensForProducts).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForProducts; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForProducts = 0; (success, ) = address(productsWallet).call{value: ethForProducts}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(marketingWallet).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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"productsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyProductsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"productsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellProductsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForProducts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_productsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProductsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_productsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMin","type":"uint256"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f43757265756d00000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43555245000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e28565b5080600490816200010d919062000e28565b50505062000130620001246200066f60201b60201c565b6200067760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200073d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f79565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f79565b6040518363ffffffff1660e01b8152600401620002af92919062000fbc565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f79565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200073d60201b60201c565b6200035260a05160016200082760201b60201c565b60006016905060006001905060006002905060006016905060006001905060006002905060006b033b2e3c9fd0803ce800000090506103e8600f8262000399919062001018565b620003a5919062001092565b600a819055506103e8601982620003bd919062001018565b620003c9919062001092565b600981905550612710600582620003e1919062001018565b620003ed919062001092565b600681905550606460028262000404919062001018565b62000410919062001092565b600781905550866010819055508560118190555084601281905550601254601154601054620004409190620010ca565b6200044c9190620010ca565b600f819055508360148190555082601581905550816016819055506016546015546014546200047c9190620010ca565b620004889190620010ca565b60138190555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057362000565620008c860201b60201c565b6001620008f260201b60201c565b62000586306001620008f260201b60201c565b6200059b61dead6001620008f260201b60201c565b620005d0600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008f260201b60201c565b620005f2620005e4620008c860201b60201c565b60016200073d60201b60201c565b620006053060016200073d60201b60201c565b6200061a61dead60016200073d60201b60201c565b6200064f600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073d60201b60201c565b62000661338262000a2c60201b60201c565b505050505050505062001262565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200074d6200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000773620008c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c39062001166565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009026200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000928620008c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009789062001166565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a209190620011a5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a959062001212565b60405180910390fd5b62000ab26000838362000ba460201b60201c565b806002600082825462000ac69190620010ca565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b1d9190620010ca565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b84919062001245565b60405180910390a362000ba06000838362000ba960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3057607f821691505b60208210810362000c465762000c4562000be8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c71565b62000cbc868362000c71565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0962000d0362000cfd8462000cd4565b62000cde565b62000cd4565b9050919050565b6000819050919050565b62000d258362000ce8565b62000d3d62000d348262000d10565b84845462000c7e565b825550505050565b600090565b62000d5462000d45565b62000d6181848462000d1a565b505050565b5b8181101562000d895762000d7d60008262000d4a565b60018101905062000d67565b5050565b601f82111562000dd85762000da28162000c4c565b62000dad8462000c61565b8101602085101562000dbd578190505b62000dd562000dcc8562000c61565b83018262000d66565b50505b505050565b600082821c905092915050565b600062000dfd6000198460080262000ddd565b1980831691505092915050565b600062000e18838362000dea565b9150826002028217905092915050565b62000e338262000bae565b67ffffffffffffffff81111562000e4f5762000e4e62000bb9565b5b62000e5b825462000c17565b62000e6882828562000d8d565b600060209050601f83116001811462000ea0576000841562000e8b578287015190505b62000e97858262000e0a565b86555062000f07565b601f19841662000eb08662000c4c565b60005b8281101562000eda5784890151825560018201915060208501945060208101905062000eb3565b8683101562000efa578489015162000ef6601f89168262000dea565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f418262000f14565b9050919050565b62000f538162000f34565b811462000f5f57600080fd5b50565b60008151905062000f738162000f48565b92915050565b60006020828403121562000f925762000f9162000f0f565b5b600062000fa28482850162000f62565b91505092915050565b62000fb68162000f34565b82525050565b600060408201905062000fd3600083018562000fab565b62000fe2602083018462000fab565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010258262000cd4565b9150620010328362000cd4565b9250828202620010428162000cd4565b915082820484148315176200105c576200105b62000fe9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200109f8262000cd4565b9150620010ac8362000cd4565b925082620010bf57620010be62001063565b5b828204905092915050565b6000620010d78262000cd4565b9150620010e48362000cd4565b9250828201905080821115620010ff57620010fe62000fe9565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200114e60208362001105565b91506200115b8262001116565b602082019050919050565b6000602082019050818103600083015262001181816200113f565b9050919050565b60008115159050919050565b6200119f8162001188565b82525050565b6000602082019050620011bc600083018462001194565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011fa601f8362001105565b91506200120782620011c2565b602082019050919050565b600060208201905081810360008301526200122d81620011eb565b9050919050565b6200123f8162000cd4565b82525050565b60006020820190506200125c600083018462001234565b92915050565b60805160a051615161620012c0600039600081816112cf01528181611978015261294e015260008181610e57015281816128f6015281816139c401528181613aa501528181613acc01528181613b680152613b8f01526151616000f3fe60806040526004361061037a5760003560e01c80638095d564116101d1578063c024666811610102578063e2f45605116100a0578063f63743421161006f578063f637434214610cf5578063f8b45b0514610d20578063fbc10c5514610d4b578063fd52cdd314610d7457610381565b8063e2f4560514610c4b578063e884f26014610c76578063f11a24d314610ca1578063f2fde38b14610ccc57610381565b8063c876d0b9116100dc578063c876d0b914610b8d578063c8c8ebe414610bb8578063d5433db014610be3578063dd62ed3e14610c0e57610381565b8063c024666814610b12578063c17b5b8c14610b3b578063c18bc19514610b6457610381565b8063a0c973f11161016f578063aacebbe311610149578063aacebbe314610a58578063b62496f514610a81578063b97849c114610abe578063bbc0c74214610ae757610381565b8063a0c973f1146109a1578063a457c2d7146109de578063a9059cbb14610a1b57610381565b806392136913116101ab57806392136913146108f9578063924de9b71461092457806395d89b411461094d5780639a7a23d61461097857610381565b80638095d5641461088e5780638a8c523c146108b75780638da5cb5b146108ce57610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107e457806375f0a8741461080d57806377c18352146108385780637bce5a041461086357610381565b806370a0823114610765578063715018a6146107a2578063751039fc146107b957610381565b80634fbee193116102855780634fbee193146106a757806362cfc88b146106e45780636303516c1461070f5780636ddd17131461073a57610381565b8063395093511461061457806349bd5a5e146106515780634a62bb651461067c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f835146105565780632c0e22cc14610581578063313ce567146105be578063367c8581146105e957610381565b80631f3fed8f146104c5578063203e727e146104f057806323b872dd1461051957610381565b80631694505e116103545780631694505e1461041957806318160ddd1461044457806319c59e2c1461046f5780631a8145bb1461049a57610381565b806306fdde0314610386578063095ea7b3146103b15780630e47e822146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9f565b6040516103a89190613cee565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613da9565b610e31565b6040516103e59190613e04565b60405180910390f35b3480156103fa57600080fd5b50610403610e4f565b6040516104109190613e2e565b60405180910390f35b34801561042557600080fd5b5061042e610e55565b60405161043b9190613ea8565b60405180910390f35b34801561045057600080fd5b50610459610e79565b6040516104669190613e2e565b60405180910390f35b34801561047b57600080fd5b50610484610e83565b6040516104919190613e2e565b60405180910390f35b3480156104a657600080fd5b506104af610e89565b6040516104bc9190613e2e565b60405180910390f35b3480156104d157600080fd5b506104da610e8f565b6040516104e79190613e2e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613ec3565b610e95565b005b34801561052557600080fd5b50610540600480360381019061053b9190613ef0565b610f72565b60405161054d9190613e04565b60405180910390f35b34801561056257600080fd5b5061056b61106a565b6040516105789190613f52565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613f6d565b611070565b6040516105b59190613e04565b60405180910390f35b3480156105ca57600080fd5b506105d3611212565b6040516105e09190613fc9565b60405180910390f35b3480156105f557600080fd5b506105fe61121b565b60405161060b9190613e2e565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613da9565b611221565b6040516106489190613e04565b60405180910390f35b34801561065d57600080fd5b506106666112cd565b6040516106739190613f52565b60405180910390f35b34801561068857600080fd5b506106916112f1565b60405161069e9190613e04565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613fe4565b611304565b6040516106db9190613e04565b60405180910390f35b3480156106f057600080fd5b506106f961135a565b6040516107069190613f52565b60405180910390f35b34801561071b57600080fd5b50610724611380565b6040516107319190613f52565b60405180910390f35b34801561074657600080fd5b5061074f6113a6565b60405161075c9190613e04565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613fe4565b6113b9565b6040516107999190613e2e565b60405180910390f35b3480156107ae57600080fd5b506107b7611401565b005b3480156107c557600080fd5b506107ce611489565b6040516107db9190613e04565b60405180910390f35b3480156107f057600080fd5b5061080b6004803603810190610806919061403d565b611529565b005b34801561081957600080fd5b50610822611600565b60405161082f9190613f52565b60405180910390f35b34801561084457600080fd5b5061084d611626565b60405161085a9190613e2e565b60405180910390f35b34801561086f57600080fd5b5061087861162c565b6040516108859190613e2e565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b0919061407d565b611632565b005b3480156108c357600080fd5b506108cc6116eb565b005b3480156108da57600080fd5b506108e361179f565b6040516108f09190613f52565b60405180910390f35b34801561090557600080fd5b5061090e6117c9565b60405161091b9190613e2e565b60405180910390f35b34801561093057600080fd5b5061094b600480360381019061094691906140d0565b6117cf565b005b34801561095957600080fd5b50610962611868565b60405161096f9190613cee565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061403d565b6118fa565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613fe4565b611a12565b6040516109d59190613e04565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613da9565b611a32565b604051610a129190613e04565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613da9565b611b1d565b604051610a4f9190613e04565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613fe4565b611b3b565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613fe4565b611c77565b604051610ab59190613e04565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190613fe4565b611c97565b005b348015610af357600080fd5b50610afc611dd3565b604051610b099190613e04565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b34919061403d565b611de6565b005b348015610b4757600080fd5b50610b626004803603810190610b5d919061407d565b611f0b565b005b348015610b7057600080fd5b50610b8b6004803603810190610b869190613ec3565b611fc4565b005b348015610b9957600080fd5b50610ba26120ad565b604051610baf9190613e04565b60405180910390f35b348015610bc457600080fd5b50610bcd6120c0565b604051610bda9190613e2e565b60405180910390f35b348015610bef57600080fd5b50610bf86120c6565b604051610c059190613e2e565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906140fd565b6120cc565b604051610c429190613e2e565b60405180910390f35b348015610c5757600080fd5b50610c60612153565b604051610c6d9190613e2e565b60405180910390f35b348015610c8257600080fd5b50610c8b612159565b604051610c989190613e04565b60405180910390f35b348015610cad57600080fd5b50610cb66121f9565b604051610cc39190613e2e565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190613fe4565b6121ff565b005b348015610d0157600080fd5b50610d0a6122f6565b604051610d179190613e2e565b60405180910390f35b348015610d2c57600080fd5b50610d356122fc565b604051610d429190613e2e565b60405180910390f35b348015610d5757600080fd5b50610d726004803603810190610d6d9190613fe4565b612302565b005b348015610d8057600080fd5b50610d896123c2565b604051610d969190613e2e565b60405180910390f35b606060038054610dae9061416c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda9061416c565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b6000610e45610e3e6123c8565b84846123d0565b6001905092915050565b60135481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b60185481565b60175481565b610e9d6123c8565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61179f565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906141e9565b60405180910390fd5b6002811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061427b565b60405180910390fd5b670de0b6b3a764000081610f6991906142ca565b600a8190555050565b6000610f7f848484612599565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fca6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561104a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110419061437e565b60405180910390fd5b61105e856110566123c8565b8584036123d0565b60019150509392505050565b61dead81565b600061107a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661109861179f565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906141e9565b60405180910390fd5b6001831015611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614410565b60405180910390fd5b6101f4831115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906144a2565b60405180910390fd5b818311156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614534565b60405180910390fd5b620186a06111c6610e79565b846111d191906142ca565b6111db9190614583565b600681905550620186a06111ed610e79565b836111f891906142ca565b6112029190614583565b6007819055506001905092915050565b60006012905090565b60125481565b60006112c361122e6123c8565b84846001600061123c6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112be91906145b4565b6123d0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114096123c8565b73ffffffffffffffffffffffffffffffffffffffff1661142761179f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906141e9565b60405180910390fd5b6114876000613230565b565b60006114936123c8565b73ffffffffffffffffffffffffffffffffffffffff166114b161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906141e9565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6115316123c8565b73ffffffffffffffffffffffffffffffffffffffff1661154f61179f565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906141e9565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60105481565b61163a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661165861179f565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a5906141e9565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116d691906145b4565b6116e091906145b4565b600f81905550505050565b6116f36123c8565b73ffffffffffffffffffffffffffffffffffffffff1661171161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906141e9565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117d76123c8565b73ffffffffffffffffffffffffffffffffffffffff166117f561179f565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611842906141e9565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b6060600480546118779061416c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a39061416c565b80156118f05780601f106118c5576101008083540402835291602001916118f0565b820191906000526020600020905b8154815290600101906020018083116118d357829003601f168201915b5050505050905090565b6119026123c8565b73ffffffffffffffffffffffffffffffffffffffff1661192061179f565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906141e9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb9061465a565b60405180910390fd5b611a0e82826132f6565b5050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611a416123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906146ec565b60405180910390fd5b611b12611b096123c8565b858584036123d0565b600191505092915050565b6000611b31611b2a6123c8565b8484612599565b6001905092915050565b611b436123c8565b73ffffffffffffffffffffffffffffffffffffffff16611b6161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906141e9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b611c9f6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611cbd61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906141e9565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffa486461dcdff36faabb21004a43dd48cd470ed93cb0bd1899208e7684da368160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60149054906101000a900460ff1681565b611dee6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611e0c61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906141e9565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff9190613e04565b60405180910390a25050565b611f136123c8565b73ffffffffffffffffffffffffffffffffffffffff16611f3161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906141e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611faf91906145b4565b611fb991906145b4565b601381905550505050565b611fcc6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611fea61179f565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141e9565b60405180910390fd5b6005811015612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b9061477e565b60405180910390fd5b6103e861208f610e79565b8261209a91906142ca565b6120a49190614583565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006121636123c8565b73ffffffffffffffffffffffffffffffffffffffff1661218161179f565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141e9565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6122076123c8565b73ffffffffffffffffffffffffffffffffffffffff1661222561179f565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614810565b60405180910390fd5b6122f381613230565b50565b60155481565b60095481565b61230a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661232861179f565b73ffffffffffffffffffffffffffffffffffffffff161461237e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612375906141e9565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361243f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612436906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590614934565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161258c9190613e2e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614a58565b60405180910390fd5b600081036126905761268b83836000613397565b61322b565b600860009054906101000a900460ff1615612d53576126ad61179f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271b57506126eb61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127545750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a75750600560149054906101000a900460ff16155b15612d5257600e60149054906101000a900460ff166128a157601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128615750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ac4565b60405180910390fd5b5b600860019054906101000a900460ff1615612a69576128be61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561294557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a685743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614b7c565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b0c5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb357600a54811115612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c0e565b60405180910390fd5b600954612b62836113b9565b82612b6d91906145b4565b1115612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c7a565b60405180910390fd5b612d51565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c565750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca557600a54811115612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0c565b60405180910390fd5b612d50565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4f57600954612d02836113b9565b82612d0d91906145b4565b1115612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614c7a565b60405180910390fd5b5b5b5b5b5b6000612d5e306113b9565b905060006006548210159050808015612d835750600560159054906101000a900460ff165b8015612d9c5750600560149054906101000a900460ff16155b8015612df25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9e5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee2576001600560146101000a81548160ff021916908315150217905550612ec6613616565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa257600090505b6000811561321b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300557506000601354115b156130d2576130326064613024601354886138d990919063ffffffff16565b6138ef90919063ffffffff16565b90506013546015548261304591906142ca565b61304f9190614583565b6018600082825461306091906145b4565b925050819055506013546016548261307891906142ca565b6130829190614583565b6019600082825461309391906145b4565b92505081905550601354601454826130ab91906142ca565b6130b59190614583565b601760008282546130c691906145b4565b925050819055506131f7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d57506000600f54115b156131f65761315a606461314c600f54886138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600f546011548261316d91906142ca565b6131779190614583565b6018600082825461318891906145b4565b92505081905550600f54601254826131a091906142ca565b6131aa9190614583565b601960008282546131bb91906145b4565b92505081905550600f54601054826131d391906142ca565b6131dd9190614583565b601760008282546131ee91906145b4565b925050819055505b5b600081111561320c5761320b873083613397565b5b80856132189190614d2c565b94505b613226878787613397565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fd906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c90614a58565b60405180910390fd5b613480838383613905565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614dd2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906145b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135fd9190613e2e565b60405180910390a361361084848461390a565b50505050565b6000613621306113b9565b9050600060195460175460185461363891906145b4565b61364291906145b4565b90506000808303613655575050506138d7565b6007548311156136655760075492505b60006002836018548661367891906142ca565b6136829190614583565b61368c9190614583565b905060006136a3828661390f90919063ffffffff16565b905060004790506136b382613925565b60006136c8824761390f90919063ffffffff16565b905060006136f3876136e5601754856138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600061371e88613710601954866138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600081838561372f9190614d2c565b6137399190614d2c565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161379990614e23565b60006040518083038185875af1925050503d80600081146137d6576040519150601f19603f3d011682016040523d82523d6000602084013e6137db565b606091505b5050809850506000871180156137f15750600081115b1561383e576138008782613b62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161383593929190614e38565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388490614e23565b60006040518083038185875af1925050503d80600081146138c1576040519150601f19603f3d011682016040523d82523d6000602084013e6138c6565b606091505b505080985050505050505050505050505b565b600081836138e791906142ca565b905092915050565b600081836138fd9190614583565b905092915050565b505050565b505050565b6000818361391d9190614d2c565b905092915050565b6000600267ffffffffffffffff81111561394257613941614e6f565b5b6040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509050308160008151811061398857613987614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a519190614ee2565b81600181518110613a6557613a64614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aca307f0000000000000000000000000000000000000000000000000000000000000000846123d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b2c959493929190615008565b600060405180830381600087803b158015613b4657600080fd5b505af1158015613b5a573d6000803e3d6000fd5b505050505050565b613b8d307f0000000000000000000000000000000000000000000000000000000000000000846123d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1496959493929190615062565b60606040518083038185885af1158015613c32573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c5791906150d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c98578082015181840152602081019050613c7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cc082613c5e565b613cca8185613c69565b9350613cda818560208601613c7a565b613ce381613ca4565b840191505092915050565b60006020820190508181036000830152613d088184613cb5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d4082613d15565b9050919050565b613d5081613d35565b8114613d5b57600080fd5b50565b600081359050613d6d81613d47565b92915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b60008060408385031215613dc057613dbf613d10565b5b6000613dce85828601613d5e565b9250506020613ddf85828601613d94565b9150509250929050565b60008115159050919050565b613dfe81613de9565b82525050565b6000602082019050613e196000830184613df5565b92915050565b613e2881613d73565b82525050565b6000602082019050613e436000830184613e1f565b92915050565b6000819050919050565b6000613e6e613e69613e6484613d15565b613e49565b613d15565b9050919050565b6000613e8082613e53565b9050919050565b6000613e9282613e75565b9050919050565b613ea281613e87565b82525050565b6000602082019050613ebd6000830184613e99565b92915050565b600060208284031215613ed957613ed8613d10565b5b6000613ee784828501613d94565b91505092915050565b600080600060608486031215613f0957613f08613d10565b5b6000613f1786828701613d5e565b9350506020613f2886828701613d5e565b9250506040613f3986828701613d94565b9150509250925092565b613f4c81613d35565b82525050565b6000602082019050613f676000830184613f43565b92915050565b60008060408385031215613f8457613f83613d10565b5b6000613f9285828601613d94565b9250506020613fa385828601613d94565b9150509250929050565b600060ff82169050919050565b613fc381613fad565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613d10565b5b600061400884828501613d5e565b91505092915050565b61401a81613de9565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000806040838503121561405457614053613d10565b5b600061406285828601613d5e565b925050602061407385828601614028565b9150509250929050565b60008060006060848603121561409657614095613d10565b5b60006140a486828701613d94565b93505060206140b586828701613d94565b92505060406140c686828701613d94565b9150509250925092565b6000602082840312156140e6576140e5613d10565b5b60006140f484828501614028565b91505092915050565b6000806040838503121561411457614113613d10565b5b600061412285828601613d5e565b925050602061413385828601613d5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061418457607f821691505b6020821081036141975761419661413d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d3602083613c69565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000614265602f83613c69565b915061427082614209565b604082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d582613d73565b91506142e083613d73565b92508282026142ee81613d73565b915082820484148315176143055761430461429b565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614368602883613c69565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143fa603583613c69565b91506144058261439e565b604082019050919050565b60006020820190508181036000830152614429816143ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061448c603483613c69565b915061449782614430565b604082019050919050565b600060208201905081810360008301526144bb8161447f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061451e603683613c69565b9150614529826144c2565b604082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613d73565b915061459983613d73565b9250826145a9576145a8614554565b5b828204905092915050565b60006145bf82613d73565b91506145ca83613d73565b92508282019050808211156145e2576145e161429b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614644603983613c69565b915061464f826145e8565b604082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146d6602583613c69565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614768602483613c69565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147fa602683613c69565b91506148058261479e565b604082019050919050565b60006020820190508181036000830152614829816147ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061488c602483613c69565b915061489782614830565b604082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061491e602283613c69565b9150614929826148c2565b604082019050919050565b6000602082019050818103600083015261494d81614911565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149b0602583613c69565b91506149bb82614954565b604082019050919050565b600060208201905081810360008301526149df816149a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a42602383613c69565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614aae601683613c69565b9150614ab982614a78565b602082019050919050565b60006020820190508181036000830152614add81614aa1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b66604983613c69565b9150614b7182614ae4565b606082019050919050565b60006020820190508181036000830152614b9581614b59565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614bf8603583613c69565b9150614c0382614b9c565b604082019050919050565b60006020820190508181036000830152614c2781614beb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c64601383613c69565b9150614c6f82614c2e565b602082019050919050565b60006020820190508181036000830152614c9381614c57565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614cf6603683613c69565b9150614d0182614c9a565b604082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d3782613d73565b9150614d4283613d73565b9250828203905081811115614d5a57614d5961429b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614dbc602683613c69565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b600081905092915050565b50565b6000614e0d600083614df2565b9150614e1882614dfd565b600082019050919050565b6000614e2e82614e00565b9150819050919050565b6000606082019050614e4d6000830186613e1f565b614e5a6020830185613e1f565b614e676040830184613e1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614edc81613d47565b92915050565b600060208284031215614ef857614ef7613d10565b5b6000614f0684828501614ecd565b91505092915050565b6000819050919050565b6000614f34614f2f614f2a84614f0f565b613e49565b613d73565b9050919050565b614f4481614f19565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f7f81613d35565b82525050565b6000614f918383614f76565b60208301905092915050565b6000602082019050919050565b6000614fb582614f4a565b614fbf8185614f55565b9350614fca83614f66565b8060005b83811015614ffb578151614fe28882614f85565b9750614fed83614f9d565b925050600181019050614fce565b5085935050505092915050565b600060a08201905061501d6000830188613e1f565b61502a6020830187614f3b565b818103604083015261503c8186614faa565b905061504b6060830185613f43565b6150586080830184613e1f565b9695505050505050565b600060c0820190506150776000830189613f43565b6150846020830188613e1f565b6150916040830187614f3b565b61509e6060830186614f3b565b6150ab6080830185613f43565b6150b860a0830184613e1f565b979650505050505050565b6000815190506150d281613d7d565b92915050565b6000806000606084860312156150f1576150f0613d10565b5b60006150ff868287016150c3565b9350506020615110868287016150c3565b9250506040615121868287016150c3565b915050925092509256fea264697066735822122072ba41777597b8a6d9a118b2442fe3efe49ca392c872910ae868b94f66baa8ea64736f6c63430008130033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80638095d564116101d1578063c024666811610102578063e2f45605116100a0578063f63743421161006f578063f637434214610cf5578063f8b45b0514610d20578063fbc10c5514610d4b578063fd52cdd314610d7457610381565b8063e2f4560514610c4b578063e884f26014610c76578063f11a24d314610ca1578063f2fde38b14610ccc57610381565b8063c876d0b9116100dc578063c876d0b914610b8d578063c8c8ebe414610bb8578063d5433db014610be3578063dd62ed3e14610c0e57610381565b8063c024666814610b12578063c17b5b8c14610b3b578063c18bc19514610b6457610381565b8063a0c973f11161016f578063aacebbe311610149578063aacebbe314610a58578063b62496f514610a81578063b97849c114610abe578063bbc0c74214610ae757610381565b8063a0c973f1146109a1578063a457c2d7146109de578063a9059cbb14610a1b57610381565b806392136913116101ab57806392136913146108f9578063924de9b71461092457806395d89b411461094d5780639a7a23d61461097857610381565b80638095d5641461088e5780638a8c523c146108b75780638da5cb5b146108ce57610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107e457806375f0a8741461080d57806377c18352146108385780637bce5a041461086357610381565b806370a0823114610765578063715018a6146107a2578063751039fc146107b957610381565b80634fbee193116102855780634fbee193146106a757806362cfc88b146106e45780636303516c1461070f5780636ddd17131461073a57610381565b8063395093511461061457806349bd5a5e146106515780634a62bb651461067c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f835146105565780632c0e22cc14610581578063313ce567146105be578063367c8581146105e957610381565b80631f3fed8f146104c5578063203e727e146104f057806323b872dd1461051957610381565b80631694505e116103545780631694505e1461041957806318160ddd1461044457806319c59e2c1461046f5780631a8145bb1461049a57610381565b806306fdde0314610386578063095ea7b3146103b15780630e47e822146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9f565b6040516103a89190613cee565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613da9565b610e31565b6040516103e59190613e04565b60405180910390f35b3480156103fa57600080fd5b50610403610e4f565b6040516104109190613e2e565b60405180910390f35b34801561042557600080fd5b5061042e610e55565b60405161043b9190613ea8565b60405180910390f35b34801561045057600080fd5b50610459610e79565b6040516104669190613e2e565b60405180910390f35b34801561047b57600080fd5b50610484610e83565b6040516104919190613e2e565b60405180910390f35b3480156104a657600080fd5b506104af610e89565b6040516104bc9190613e2e565b60405180910390f35b3480156104d157600080fd5b506104da610e8f565b6040516104e79190613e2e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613ec3565b610e95565b005b34801561052557600080fd5b50610540600480360381019061053b9190613ef0565b610f72565b60405161054d9190613e04565b60405180910390f35b34801561056257600080fd5b5061056b61106a565b6040516105789190613f52565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613f6d565b611070565b6040516105b59190613e04565b60405180910390f35b3480156105ca57600080fd5b506105d3611212565b6040516105e09190613fc9565b60405180910390f35b3480156105f557600080fd5b506105fe61121b565b60405161060b9190613e2e565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613da9565b611221565b6040516106489190613e04565b60405180910390f35b34801561065d57600080fd5b506106666112cd565b6040516106739190613f52565b60405180910390f35b34801561068857600080fd5b506106916112f1565b60405161069e9190613e04565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613fe4565b611304565b6040516106db9190613e04565b60405180910390f35b3480156106f057600080fd5b506106f961135a565b6040516107069190613f52565b60405180910390f35b34801561071b57600080fd5b50610724611380565b6040516107319190613f52565b60405180910390f35b34801561074657600080fd5b5061074f6113a6565b60405161075c9190613e04565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613fe4565b6113b9565b6040516107999190613e2e565b60405180910390f35b3480156107ae57600080fd5b506107b7611401565b005b3480156107c557600080fd5b506107ce611489565b6040516107db9190613e04565b60405180910390f35b3480156107f057600080fd5b5061080b6004803603810190610806919061403d565b611529565b005b34801561081957600080fd5b50610822611600565b60405161082f9190613f52565b60405180910390f35b34801561084457600080fd5b5061084d611626565b60405161085a9190613e2e565b60405180910390f35b34801561086f57600080fd5b5061087861162c565b6040516108859190613e2e565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b0919061407d565b611632565b005b3480156108c357600080fd5b506108cc6116eb565b005b3480156108da57600080fd5b506108e361179f565b6040516108f09190613f52565b60405180910390f35b34801561090557600080fd5b5061090e6117c9565b60405161091b9190613e2e565b60405180910390f35b34801561093057600080fd5b5061094b600480360381019061094691906140d0565b6117cf565b005b34801561095957600080fd5b50610962611868565b60405161096f9190613cee565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061403d565b6118fa565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613fe4565b611a12565b6040516109d59190613e04565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613da9565b611a32565b604051610a129190613e04565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613da9565b611b1d565b604051610a4f9190613e04565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613fe4565b611b3b565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613fe4565b611c77565b604051610ab59190613e04565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190613fe4565b611c97565b005b348015610af357600080fd5b50610afc611dd3565b604051610b099190613e04565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b34919061403d565b611de6565b005b348015610b4757600080fd5b50610b626004803603810190610b5d919061407d565b611f0b565b005b348015610b7057600080fd5b50610b8b6004803603810190610b869190613ec3565b611fc4565b005b348015610b9957600080fd5b50610ba26120ad565b604051610baf9190613e04565b60405180910390f35b348015610bc457600080fd5b50610bcd6120c0565b604051610bda9190613e2e565b60405180910390f35b348015610bef57600080fd5b50610bf86120c6565b604051610c059190613e2e565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906140fd565b6120cc565b604051610c429190613e2e565b60405180910390f35b348015610c5757600080fd5b50610c60612153565b604051610c6d9190613e2e565b60405180910390f35b348015610c8257600080fd5b50610c8b612159565b604051610c989190613e04565b60405180910390f35b348015610cad57600080fd5b50610cb66121f9565b604051610cc39190613e2e565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190613fe4565b6121ff565b005b348015610d0157600080fd5b50610d0a6122f6565b604051610d179190613e2e565b60405180910390f35b348015610d2c57600080fd5b50610d356122fc565b604051610d429190613e2e565b60405180910390f35b348015610d5757600080fd5b50610d726004803603810190610d6d9190613fe4565b612302565b005b348015610d8057600080fd5b50610d896123c2565b604051610d969190613e2e565b60405180910390f35b606060038054610dae9061416c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda9061416c565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b6000610e45610e3e6123c8565b84846123d0565b6001905092915050565b60135481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b60185481565b60175481565b610e9d6123c8565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61179f565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906141e9565b60405180910390fd5b6002811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061427b565b60405180910390fd5b670de0b6b3a764000081610f6991906142ca565b600a8190555050565b6000610f7f848484612599565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fca6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561104a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110419061437e565b60405180910390fd5b61105e856110566123c8565b8584036123d0565b60019150509392505050565b61dead81565b600061107a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661109861179f565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906141e9565b60405180910390fd5b6001831015611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614410565b60405180910390fd5b6101f4831115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906144a2565b60405180910390fd5b818311156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614534565b60405180910390fd5b620186a06111c6610e79565b846111d191906142ca565b6111db9190614583565b600681905550620186a06111ed610e79565b836111f891906142ca565b6112029190614583565b6007819055506001905092915050565b60006012905090565b60125481565b60006112c361122e6123c8565b84846001600061123c6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112be91906145b4565b6123d0565b6001905092915050565b7f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78381565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114096123c8565b73ffffffffffffffffffffffffffffffffffffffff1661142761179f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906141e9565b60405180910390fd5b6114876000613230565b565b60006114936123c8565b73ffffffffffffffffffffffffffffffffffffffff166114b161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906141e9565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6115316123c8565b73ffffffffffffffffffffffffffffffffffffffff1661154f61179f565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906141e9565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60105481565b61163a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661165861179f565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a5906141e9565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116d691906145b4565b6116e091906145b4565b600f81905550505050565b6116f36123c8565b73ffffffffffffffffffffffffffffffffffffffff1661171161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906141e9565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117d76123c8565b73ffffffffffffffffffffffffffffffffffffffff166117f561179f565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611842906141e9565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b6060600480546118779061416c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a39061416c565b80156118f05780601f106118c5576101008083540402835291602001916118f0565b820191906000526020600020905b8154815290600101906020018083116118d357829003601f168201915b5050505050905090565b6119026123c8565b73ffffffffffffffffffffffffffffffffffffffff1661192061179f565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906141e9565b60405180910390fd5b7f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb9061465a565b60405180910390fd5b611a0e82826132f6565b5050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611a416123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906146ec565b60405180910390fd5b611b12611b096123c8565b858584036123d0565b600191505092915050565b6000611b31611b2a6123c8565b8484612599565b6001905092915050565b611b436123c8565b73ffffffffffffffffffffffffffffffffffffffff16611b6161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906141e9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b611c9f6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611cbd61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906141e9565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffa486461dcdff36faabb21004a43dd48cd470ed93cb0bd1899208e7684da368160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60149054906101000a900460ff1681565b611dee6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611e0c61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906141e9565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff9190613e04565b60405180910390a25050565b611f136123c8565b73ffffffffffffffffffffffffffffffffffffffff16611f3161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906141e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611faf91906145b4565b611fb991906145b4565b601381905550505050565b611fcc6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611fea61179f565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141e9565b60405180910390fd5b6005811015612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b9061477e565b60405180910390fd5b6103e861208f610e79565b8261209a91906142ca565b6120a49190614583565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006121636123c8565b73ffffffffffffffffffffffffffffffffffffffff1661218161179f565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141e9565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6122076123c8565b73ffffffffffffffffffffffffffffffffffffffff1661222561179f565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614810565b60405180910390fd5b6122f381613230565b50565b60155481565b60095481565b61230a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661232861179f565b73ffffffffffffffffffffffffffffffffffffffff161461237e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612375906141e9565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361243f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612436906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590614934565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161258c9190613e2e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614a58565b60405180910390fd5b600081036126905761268b83836000613397565b61322b565b600860009054906101000a900460ff1615612d53576126ad61179f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271b57506126eb61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127545750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a75750600560149054906101000a900460ff16155b15612d5257600e60149054906101000a900460ff166128a157601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128615750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ac4565b60405180910390fd5b5b600860019054906101000a900460ff1615612a69576128be61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561294557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d57507f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a685743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614b7c565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b0c5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb357600a54811115612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c0e565b60405180910390fd5b600954612b62836113b9565b82612b6d91906145b4565b1115612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c7a565b60405180910390fd5b612d51565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c565750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca557600a54811115612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0c565b60405180910390fd5b612d50565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4f57600954612d02836113b9565b82612d0d91906145b4565b1115612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614c7a565b60405180910390fd5b5b5b5b5b5b6000612d5e306113b9565b905060006006548210159050808015612d835750600560159054906101000a900460ff165b8015612d9c5750600560149054906101000a900460ff16155b8015612df25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9e5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee2576001600560146101000a81548160ff021916908315150217905550612ec6613616565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa257600090505b6000811561321b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300557506000601354115b156130d2576130326064613024601354886138d990919063ffffffff16565b6138ef90919063ffffffff16565b90506013546015548261304591906142ca565b61304f9190614583565b6018600082825461306091906145b4565b925050819055506013546016548261307891906142ca565b6130829190614583565b6019600082825461309391906145b4565b92505081905550601354601454826130ab91906142ca565b6130b59190614583565b601760008282546130c691906145b4565b925050819055506131f7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d57506000600f54115b156131f65761315a606461314c600f54886138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600f546011548261316d91906142ca565b6131779190614583565b6018600082825461318891906145b4565b92505081905550600f54601254826131a091906142ca565b6131aa9190614583565b601960008282546131bb91906145b4565b92505081905550600f54601054826131d391906142ca565b6131dd9190614583565b601760008282546131ee91906145b4565b925050819055505b5b600081111561320c5761320b873083613397565b5b80856132189190614d2c565b94505b613226878787613397565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fd906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c90614a58565b60405180910390fd5b613480838383613905565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614dd2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906145b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135fd9190613e2e565b60405180910390a361361084848461390a565b50505050565b6000613621306113b9565b9050600060195460175460185461363891906145b4565b61364291906145b4565b90506000808303613655575050506138d7565b6007548311156136655760075492505b60006002836018548661367891906142ca565b6136829190614583565b61368c9190614583565b905060006136a3828661390f90919063ffffffff16565b905060004790506136b382613925565b60006136c8824761390f90919063ffffffff16565b905060006136f3876136e5601754856138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600061371e88613710601954866138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600081838561372f9190614d2c565b6137399190614d2c565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161379990614e23565b60006040518083038185875af1925050503d80600081146137d6576040519150601f19603f3d011682016040523d82523d6000602084013e6137db565b606091505b5050809850506000871180156137f15750600081115b1561383e576138008782613b62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161383593929190614e38565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388490614e23565b60006040518083038185875af1925050503d80600081146138c1576040519150601f19603f3d011682016040523d82523d6000602084013e6138c6565b606091505b505080985050505050505050505050505b565b600081836138e791906142ca565b905092915050565b600081836138fd9190614583565b905092915050565b505050565b505050565b6000818361391d9190614d2c565b905092915050565b6000600267ffffffffffffffff81111561394257613941614e6f565b5b6040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509050308160008151811061398857613987614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a519190614ee2565b81600181518110613a6557613a64614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b2c959493929190615008565b600060405180830381600087803b158015613b4657600080fd5b505af1158015613b5a573d6000803e3d6000fd5b505050505050565b613b8d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1496959493929190615062565b60606040518083038185885af1158015613c32573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c5791906150d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c98578082015181840152602081019050613c7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cc082613c5e565b613cca8185613c69565b9350613cda818560208601613c7a565b613ce381613ca4565b840191505092915050565b60006020820190508181036000830152613d088184613cb5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d4082613d15565b9050919050565b613d5081613d35565b8114613d5b57600080fd5b50565b600081359050613d6d81613d47565b92915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b60008060408385031215613dc057613dbf613d10565b5b6000613dce85828601613d5e565b9250506020613ddf85828601613d94565b9150509250929050565b60008115159050919050565b613dfe81613de9565b82525050565b6000602082019050613e196000830184613df5565b92915050565b613e2881613d73565b82525050565b6000602082019050613e436000830184613e1f565b92915050565b6000819050919050565b6000613e6e613e69613e6484613d15565b613e49565b613d15565b9050919050565b6000613e8082613e53565b9050919050565b6000613e9282613e75565b9050919050565b613ea281613e87565b82525050565b6000602082019050613ebd6000830184613e99565b92915050565b600060208284031215613ed957613ed8613d10565b5b6000613ee784828501613d94565b91505092915050565b600080600060608486031215613f0957613f08613d10565b5b6000613f1786828701613d5e565b9350506020613f2886828701613d5e565b9250506040613f3986828701613d94565b9150509250925092565b613f4c81613d35565b82525050565b6000602082019050613f676000830184613f43565b92915050565b60008060408385031215613f8457613f83613d10565b5b6000613f9285828601613d94565b9250506020613fa385828601613d94565b9150509250929050565b600060ff82169050919050565b613fc381613fad565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613d10565b5b600061400884828501613d5e565b91505092915050565b61401a81613de9565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000806040838503121561405457614053613d10565b5b600061406285828601613d5e565b925050602061407385828601614028565b9150509250929050565b60008060006060848603121561409657614095613d10565b5b60006140a486828701613d94565b93505060206140b586828701613d94565b92505060406140c686828701613d94565b9150509250925092565b6000602082840312156140e6576140e5613d10565b5b60006140f484828501614028565b91505092915050565b6000806040838503121561411457614113613d10565b5b600061412285828601613d5e565b925050602061413385828601613d5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061418457607f821691505b6020821081036141975761419661413d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d3602083613c69565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000614265602f83613c69565b915061427082614209565b604082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d582613d73565b91506142e083613d73565b92508282026142ee81613d73565b915082820484148315176143055761430461429b565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614368602883613c69565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143fa603583613c69565b91506144058261439e565b604082019050919050565b60006020820190508181036000830152614429816143ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061448c603483613c69565b915061449782614430565b604082019050919050565b600060208201905081810360008301526144bb8161447f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061451e603683613c69565b9150614529826144c2565b604082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613d73565b915061459983613d73565b9250826145a9576145a8614554565b5b828204905092915050565b60006145bf82613d73565b91506145ca83613d73565b92508282019050808211156145e2576145e161429b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614644603983613c69565b915061464f826145e8565b604082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146d6602583613c69565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614768602483613c69565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147fa602683613c69565b91506148058261479e565b604082019050919050565b60006020820190508181036000830152614829816147ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061488c602483613c69565b915061489782614830565b604082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061491e602283613c69565b9150614929826148c2565b604082019050919050565b6000602082019050818103600083015261494d81614911565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149b0602583613c69565b91506149bb82614954565b604082019050919050565b600060208201905081810360008301526149df816149a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a42602383613c69565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614aae601683613c69565b9150614ab982614a78565b602082019050919050565b60006020820190508181036000830152614add81614aa1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b66604983613c69565b9150614b7182614ae4565b606082019050919050565b60006020820190508181036000830152614b9581614b59565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614bf8603583613c69565b9150614c0382614b9c565b604082019050919050565b60006020820190508181036000830152614c2781614beb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c64601383613c69565b9150614c6f82614c2e565b602082019050919050565b60006020820190508181036000830152614c9381614c57565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614cf6603683613c69565b9150614d0182614c9a565b604082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d3782613d73565b9150614d4283613d73565b9250828203905081811115614d5a57614d5961429b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614dbc602683613c69565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b600081905092915050565b50565b6000614e0d600083614df2565b9150614e1882614dfd565b600082019050919050565b6000614e2e82614e00565b9150819050919050565b6000606082019050614e4d6000830186613e1f565b614e5a6020830185613e1f565b614e676040830184613e1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614edc81613d47565b92915050565b600060208284031215614ef857614ef7613d10565b5b6000614f0684828501614ecd565b91505092915050565b6000819050919050565b6000614f34614f2f614f2a84614f0f565b613e49565b613d73565b9050919050565b614f4481614f19565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f7f81613d35565b82525050565b6000614f918383614f76565b60208301905092915050565b6000602082019050919050565b6000614fb582614f4a565b614fbf8185614f55565b9350614fca83614f66565b8060005b83811015614ffb578151614fe28882614f85565b9750614fed83614f9d565b925050600181019050614fce565b5085935050505092915050565b600060a08201905061501d6000830188613e1f565b61502a6020830187614f3b565b818103604083015261503c8186614faa565b905061504b6060830185613f43565b6150586080830184613e1f565b9695505050505050565b600060c0820190506150776000830189613f43565b6150846020830188613e1f565b6150916040830187614f3b565b61509e6060830186614f3b565b6150ab6080830185613f43565b6150b860a0830184613e1f565b979650505050505050565b6000815190506150d281613d7d565b92915050565b6000806000606084860312156150f1576150f0613d10565b5b60006150ff868287016150c3565b9350506020615110868287016150c3565b9250506040615121868287016150c3565b915050925092509256fea264697066735822122072ba41777597b8a6d9a118b2442fe3efe49ca392c872910ae868b94f66baa8ea64736f6c63430008130033
Deployed Bytecode Sourcemap
24889:17883:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12879:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25914:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11832:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25768:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26104:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26064;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13530:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25066:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30418:670;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11674:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14431:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25021:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25313:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35104:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25619:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25173:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12003:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21736:103;;;;;;;;;;;;;:::i;:::-;;29951:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32023:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25649:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25251:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32623:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29767:112;;;;;;;;;;;;;:::i;:::-;;21085:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32290:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10931:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34036:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26318:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15149:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12343:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34544:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26524:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34919:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25726:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33729:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33205:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31606:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25353:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12581:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25211:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30140:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34783:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10712:100;10766:13;10799:5;10792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10712:100;:::o;12879:169::-;12962:4;12979:39;12988:12;:10;:12::i;:::-;13002:7;13011:6;12979:8;:39::i;:::-;13036:4;13029:11;;12879:169;;;;:::o;25914:28::-;;;;:::o;24963:51::-;;;:::o;11832:108::-;11893:7;11920:12;;11913:19;;11832:108;:::o;25768:27::-;;;;:::o;26104:33::-;;;;:::o;26064:::-;;;;:::o;31243:241::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31349:1:::1;31339:6;:11;;31317:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;31469:6;31459;:17;;;;:::i;:::-;31436:20;:40;;;;31243:241:::0;:::o;13530:492::-;13670:4;13687:36;13697:6;13705:9;13716:6;13687:9;:36::i;:::-;13736:24;13763:11;:19;13775:6;13763:19;;;;;;;;;;;;;;;:33;13783:12;:10;:12::i;:::-;13763:33;;;;;;;;;;;;;;;;13736:60;;13835:6;13815:16;:26;;13807:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13922:57;13931:6;13939:12;:10;:12::i;:::-;13972:6;13953:16;:25;13922:8;:57::i;:::-;14010:4;14003:11;;;13530:492;;;;;:::o;25066:53::-;25112:6;25066:53;:::o;30418:670::-;30539:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30593:1:::1;30583:6;:11;;30561:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30718:3;30708:6;:13;;30686:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;30844:6;30834;:16;;30812:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30988:6;30973:13;:11;:13::i;:::-;30964:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;30943:18;:51;;;;31052:6;31037:13;:11;:13::i;:::-;31028:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;31005:20;:53;;;;31076:4;31069:11;;30418:670:::0;;;;:::o;11674:93::-;11732:5;11757:2;11750:9;;11674:93;:::o;25876:29::-;;;;:::o;14431:215::-;14519:4;14536:80;14545:12;:10;:12::i;:::-;14559:7;14605:10;14568:11;:25;14580:12;:10;:12::i;:::-;14568:25;;;;;;;;;;;;;;;:34;14594:7;14568:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14536:8;:80::i;:::-;14634:4;14627:11;;14431:215;;;;:::o;25021:38::-;;;:::o;25313:33::-;;;;;;;;;;;;;:::o;35104:119::-;35170:4;35194:12;:21;35207:7;35194:21;;;;;;;;;;;;;;;;;;;;;;;;;35187:28;;35104:119;;;:::o;25686:29::-;;;;;;;;;;;;;:::o;25619:23::-;;;;;;;;;;;;;:::o;25173:31::-;;;;;;;;;;;;;:::o;12003:127::-;12077:7;12104:9;:18;12114:7;12104:18;;;;;;;;;;;;;;;;12097:25;;12003:127;;;:::o;21736:103::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21801:30:::1;21828:1;21801:18;:30::i;:::-;21736:103::o:0;29951:121::-;30003:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30037:5:::1;30020:14;;:22;;;;;;;;;;;;;;;;;;30060:4;30053:11;;29951:121:::0;:::o;32023:152::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32163:4:::1;32136:16;:24;32153:6;32136:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32023:152:::0;;:::o;25649:30::-;;;;;;;;;;;;;:::o;25251:35::-;;;;:::o;25802:30::-;;;;:::o;32623:352::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32796:13:::1;32778:15;:31;;;;32838:13;32820:15;:31;;;;32879:12;32862:14;:29;;;;32953:14;;32935:15;;32917;;:33;;;;:::i;:::-;:50;;;;:::i;:::-;32902:12;:65;;;;32623:352:::0;;;:::o;29767:112::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29838:4:::1;29822:13;;:20;;;;;;;;;;;;;;;;;;29867:4;29853:11;;:18;;;;;;;;;;;;;;;;;;29767:112::o:0;21085:87::-;21131:7;21158:6;;;;;;;;;;;21151:13;;21085:87;:::o;25949:31::-;;;;:::o;32290:100::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32375:7:::1;32361:11;;:21;;;;;;;;;;;;;;;;;;32290:100:::0;:::o;10931:104::-;10987:13;11020:7;11013:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10931:104;:::o;34036:304::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34180:13:::1;34172:21;;:4;:21;;::::0;34150:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34291:41;34320:4;34326:5;34291:28;:41::i;:::-;34036:304:::0;;:::o;26318:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15149:413::-;15242:4;15259:24;15286:11;:25;15298:12;:10;:12::i;:::-;15286:25;;;;;;;;;;;;;;;:34;15312:7;15286:34;;;;;;;;;;;;;;;;15259:61;;15359:15;15339:16;:35;;15331:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15452:67;15461:12;:10;:12::i;:::-;15475:7;15503:15;15484:16;:34;15452:8;:67::i;:::-;15550:4;15543:11;;;15149:413;;;;:::o;12343:175::-;12429:4;12446:42;12456:12;:10;:12::i;:::-;12470:9;12481:6;12446:9;:42::i;:::-;12506:4;12499:11;;12343:175;;;;:::o;34544:231::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34704:15:::1;;;;;;;;;;;34661:59;;34684:18;34661:59;;;;;;;;;;;;34749:18;34731:15;;:36;;;;;;;;;;;;;;;;;;34544:231:::0;:::o;26524:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34919:177::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35036:14:::1;;;;;;;;;;;35003:48;;35025:9;35003:48;;;;;;;;;;;;35079:9;35062:14;;:26;;;;;;;;;;;;;;;;;;34919:177:::0;:::o;25726:33::-;;;;;;;;;;;;;:::o;33729:175::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33838:8:::1;33814:12;:21;33827:7;33814:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33878:7;33862:34;;;33887:8;33862:34;;;;;;:::i;:::-;;;;;;;;33729:175:::0;;:::o;33205:360::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33380:13:::1;33361:16;:32;;;;33423:13;33404:16;:32;;;;33465:12;33447:15;:30;;;;33542:15;;33523:16;;33504;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;33488:13;:69;;;;33205:360:::0;;;:::o;31606:232::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:1:::1;31705:6;:11;;31683:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31826:4;31812:13;:11;:13::i;:::-;31803:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;31791:9;:39;;;;31606:232:::0;:::o;25353:39::-;;;;;;;;;;;;;:::o;25430:35::-;;;;:::o;26025:30::-;;;;:::o;12581:151::-;12670:7;12697:11;:18;12709:5;12697:18;;;;;;;;;;;;;;;:27;12716:7;12697:27;;;;;;;;;;;;;;;;12690:34;;12581:151;;;;:::o;25211:33::-;;;;:::o;30140:135::-;30200:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30240:5:::1;30217:20;;:28;;;;;;;;;;;;;;;;;;30263:4;30256:11;;30140:135:::0;:::o;25839:30::-;;;;:::o;21994:201::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22103:1:::1;22083:22;;:8;:22;;::::0;22075:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22159:28;22178:8;22159:18;:28::i;:::-;21994:201:::0;:::o;25987:31::-;;;;:::o;25399:24::-;;;;:::o;34783:128::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34892:11:::1;34881:8;;:22;;;;;;;;;;;;;;;;;;34783:128:::0;:::o;26144:32::-;;;;:::o;9718:98::-;9771:7;9798:10;9791:17;;9718:98;:::o;18833:380::-;18986:1;18969:19;;:5;:19;;;18961:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19067:1;19048:21;;:7;:21;;;19040:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19151:6;19121:11;:18;19133:5;19121:18;;;;;;;;;;;;;;;:27;19140:7;19121:27;;;;;;;;;;;;;;;:36;;;;19189:7;19173:32;;19182:5;19173:32;;;19198:6;19173:32;;;;;;:::i;:::-;;;;;;;;18833:380;;;:::o;35231:4650::-;35379:1;35363:18;;:4;:18;;;35355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35456:1;35442:16;;:2;:16;;;35434:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35525:1;35515:6;:11;35511:93;;35543:28;35559:4;35565:2;35569:1;35543:15;:28::i;:::-;35586:7;;35511:93;35620:14;;;;;;;;;;;35616:2428;;;35681:7;:5;:7::i;:::-;35673:15;;:4;:15;;;;:49;;;;;35715:7;:5;:7::i;:::-;35709:13;;:2;:13;;;;35673:49;:86;;;;;35757:1;35743:16;;:2;:16;;;;35673:86;:128;;;;;35794:6;35780:21;;:2;:21;;;;35673:128;:158;;;;;35823:8;;;;;;;;;;;35822:9;35673:158;35651:2382;;;35871:13;;;;;;;;;;;35866:209;;35943:12;:18;35956:4;35943:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35965:12;:16;35978:2;35965:16;;;;;;;;;;;;;;;;;;;;;;;;;35943:38;35909:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;35866:209;36231:20;;;;;;;;;;;36227:641;;;36312:7;:5;:7::i;:::-;36306:13;;:2;:13;;;;:72;;;;;36362:15;36348:30;;:2;:30;;;;36306:72;:129;;;;;36421:13;36407:28;;:2;:28;;;;36306:129;36276:573;;;36599:12;36524:28;:39;36553:9;36524:39;;;;;;;;;;;;;;;;:87;36486:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36813:12;36771:28;:39;36800:9;36771:39;;;;;;;;;;;;;;;:54;;;;36276:573;36227:641;36942:25;:31;36968:4;36942:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36999:16;:20;37016:2;36999:20;;;;;;;;;;;;;;;;;;;;;;;;;36998:21;36942:77;36916:1102;;;37106:20;;37096:6;:30;;37062:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37314:9;;37297:13;37307:2;37297:9;:13::i;:::-;37288:6;:22;;;;:::i;:::-;:35;;37254:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36916:1102;;;37492:25;:29;37518:2;37492:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37547:16;:22;37564:4;37547:22;;;;;;;;;;;;;;;;;;;;;;;;;37546:23;37492:77;37466:552;;;37656:20;;37646:6;:30;;37612:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:552;;;37813:16;:20;37830:2;37813:20;;;;;;;;;;;;;;;;;;;;;;;;;37808:210;;37918:9;;37901:13;37911:2;37901:9;:13::i;:::-;37892:6;:22;;;;:::i;:::-;:35;;37858:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37808:210;37466:552;36916:1102;35651:2382;35616:2428;38056:28;38087:24;38105:4;38087:9;:24::i;:::-;38056:55;;38124:12;38163:18;;38139:20;:42;;38124:57;;38212:7;:35;;;;;38236:11;;;;;;;;;;;38212:35;:61;;;;;38265:8;;;;;;;;;;;38264:9;38212:61;:110;;;;;38291:25;:31;38317:4;38291:31;;;;;;;;;;;;;;;;;;;;;;;;;38290:32;38212:110;:146;;;;;38340:12;:18;38353:4;38340:18;;;;;;;;;;;;;;;;;;;;;;;;;38339:19;38212:146;:180;;;;;38376:12;:16;38389:2;38376:16;;;;;;;;;;;;;;;;;;;;;;;;;38375:17;38212:180;38194:312;;;38430:4;38419:8;;:15;;;;;;;;;;;;;;;;;;38451:10;:8;:10::i;:::-;38489:5;38478:8;;:16;;;;;;;;;;;;;;;;;;38194:312;38518:12;38534:8;;;;;;;;;;;38533:9;38518:24;;38644:12;:18;38657:4;38644:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38666:12;:16;38679:2;38666:16;;;;;;;;;;;;;;;;;;;;;;;;;38644:38;38640:86;;;38709:5;38699:15;;38640:86;38738:12;38843:7;38839:989;;;38895:25;:29;38921:2;38895:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38944:1;38928:13;;:17;38895:50;38891:788;;;38973:34;39003:3;38973:25;38984:13;;38973:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38966:41;;39076:13;;39056:16;;39049:4;:23;;;;:::i;:::-;39048:41;;;;:::i;:::-;39026:18;;:63;;;;;;;:::i;:::-;;;;;;;;39156:13;;39137:15;;39130:4;:22;;;;:::i;:::-;39129:40;;;;:::i;:::-;39108:17;;:61;;;;;;;:::i;:::-;;;;;;;;39238:13;;39218:16;;39211:4;:23;;;;:::i;:::-;39210:41;;;;:::i;:::-;39188:18;;:63;;;;;;;:::i;:::-;;;;;;;;38891:788;;;39313:25;:31;39339:4;39313:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39363:1;39348:12;;:16;39313:51;39309:370;;;39392:33;39421:3;39392:24;39403:12;;39392:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39385:40;;39493:12;;39474:15;;39467:4;:22;;;;:::i;:::-;39466:39;;;;:::i;:::-;39444:18;;:61;;;;;;;:::i;:::-;;;;;;;;39571:12;;39553:14;;39546:4;:21;;;;:::i;:::-;39545:38;;;;:::i;:::-;39524:17;;:59;;;;;;;:::i;:::-;;;;;;;;39651:12;;39632:15;;39625:4;:22;;;;:::i;:::-;39624:39;;;;:::i;:::-;39602:18;;:61;;;;;;;:::i;:::-;;;;;;;;39309:370;38891:788;39706:1;39699:4;:8;39695:91;;;39728:42;39744:4;39758;39765;39728:15;:42::i;:::-;39695:91;39812:4;39802:14;;;;;:::i;:::-;;;38839:989;39840:33;39856:4;39862:2;39866:6;39840:15;:33::i;:::-;35344:4537;;;;35231:4650;;;;:::o;22355:191::-;22429:16;22448:6;;;;;;;;;;;22429:25;;22474:8;22465:6;;:17;;;;;;;;;;;;;;;;;;22529:8;22498:40;;22519:8;22498:40;;;;;;;;;;;;22418:128;22355:191;:::o;34348:188::-;34465:5;34431:25;:31;34457:4;34431:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34522:5;34488:40;;34516:4;34488:40;;;;;;;;;;;;34348:188;;:::o;16052:733::-;16210:1;16192:20;;:6;:20;;;16184:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16294:1;16273:23;;:9;:23;;;16265:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16349:47;16370:6;16378:9;16389:6;16349:20;:47::i;:::-;16409:21;16433:9;:17;16443:6;16433:17;;;;;;;;;;;;;;;;16409:41;;16486:6;16469:13;:23;;16461:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16607:6;16591:13;:22;16571:9;:17;16581:6;16571:17;;;;;;;;;;;;;;;:42;;;;16659:6;16635:9;:20;16645:9;16635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16700:9;16683:35;;16692:6;16683:35;;;16711:6;16683:35;;;;;;:::i;:::-;;;;;;;;16731:46;16751:6;16759:9;16770:6;16731:19;:46::i;:::-;16173:612;16052:733;;;:::o;41008:1759::-;41047:23;41073:24;41091:4;41073:9;:24::i;:::-;41047:50;;41108:25;41204:17;;41170:18;;41136;;:52;;;;:::i;:::-;:85;;;;:::i;:::-;41108:113;;41232:12;41280:1;41261:15;:20;41257:59;;41298:7;;;;;41257:59;41350:20;;41332:15;:38;41328:109;;;41405:20;;41387:38;;41328:109;41498:23;41611:1;41578:17;41543:18;;41525:15;:36;;;;:::i;:::-;41524:71;;;;:::i;:::-;:88;;;;:::i;:::-;41498:114;;41623:26;41652:36;41672:15;41652;:19;;:36;;;;:::i;:::-;41623:65;;41701:25;41729:21;41701:49;;41763:36;41780:18;41763:16;:36::i;:::-;41812:18;41833:44;41859:17;41833:21;:25;;:44;;;;:::i;:::-;41812:65;;41890:23;41916:81;41969:17;41916:34;41931:18;;41916:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;41890:107;;42008:22;42033:56;42071:17;42033:33;42048:17;;42033:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;42008:81;;42102:23;42159:14;42141:15;42128:10;:28;;;;:::i;:::-;:45;;;;:::i;:::-;42102:71;;42207:1;42186:18;:22;;;;42240:1;42219:18;:22;;;;42272:1;42252:17;:21;;;;42308:14;;;;;;;;;;;42300:28;;42336:14;42300:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42286:69;;;;;42390:1;42372:15;:19;:42;;;;;42413:1;42395:15;:19;42372:42;42368:278;;;42431:46;42444:15;42461;42431:12;:46::i;:::-;42497:137;42530:18;42567:15;42601:18;;42497:137;;;;;;;;:::i;:::-;;;;;;;;42368:278;42680:15;;;;;;;;;;;42672:29;;42723:21;42672:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42658:101;;;;;41036:1731;;;;;;;;;;41008:1759;:::o;3161:98::-;3219:7;3250:1;3246;:5;;;;:::i;:::-;3239:12;;3161:98;;;;:::o;3560:::-;3618:7;3649:1;3645;:5;;;;:::i;:::-;3638:12;;3560:98;;;;:::o;19813:125::-;;;;:::o;20542:124::-;;;;:::o;2804:98::-;2862:7;2893:1;2889;:5;;;;:::i;:::-;2882:12;;2804:98;;;;:::o;39889:589::-;40015:21;40053:1;40039:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40015:40;;40084:4;40066;40071:1;40066:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40110:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40100:4;40105:1;40100:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40145:62;40162:4;40177:15;40195:11;40145:8;:62::i;:::-;40246:15;:66;;;40327:11;40353:1;40397:4;40424;40444:15;40246:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39944:534;39889:589;:::o;40486:514::-;40634:62;40651:4;40666:15;40684:11;40634:8;:62::i;:::-;40739:15;:31;;;40778:9;40811:4;40831:11;40857:1;40900;40943:8;;;;;;;;;;;40966:15;40739:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40486:514;;:::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:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:474::-;6156:6;6164;6213:2;6201:9;6192:7;6188:23;6184:32;6181:119;;;6219:79;;:::i;:::-;6181:119;6339:1;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6310:117;6466:2;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6437:118;6088:474;;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:619::-;8145:6;8153;8161;8210:2;8198:9;8189:7;8185:23;8181:32;8178:119;;;8216:79;;:::i;:::-;8178:119;8336:1;8361:53;8406:7;8397:6;8386:9;8382:22;8361:53;:::i;:::-;8351:63;;8307:117;8463:2;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8434:118;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8068:619;;;;;:::o;8693:323::-;8749:6;8798:2;8786:9;8777:7;8773:23;8769:32;8766:119;;;8804:79;;:::i;:::-;8766:119;8924:1;8949:50;8991:7;8982:6;8971:9;8967:22;8949:50;:::i;:::-;8939:60;;8895:114;8693:323;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:320;9732:6;9769:1;9763:4;9759:12;9749:22;;9816:1;9810:4;9806:12;9837:18;9827:81;;9893:4;9885:6;9881:17;9871:27;;9827:81;9955:2;9947:6;9944:14;9924:18;9921:38;9918:84;;9974:18;;:::i;:::-;9918:84;9739:269;9688:320;;;:::o;10014:182::-;10154:34;10150:1;10142:6;10138:14;10131:58;10014:182;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10202:366;;;:::o;10574:419::-;10740:4;10778:2;10767:9;10763:18;10755:26;;10827:9;10821:4;10817:20;10813:1;10802:9;10798:17;10791:47;10855:131;10981:4;10855:131;:::i;:::-;10847:139;;10574:419;;;:::o;10999:234::-;11139:34;11135:1;11127:6;11123:14;11116:58;11208:17;11203:2;11195:6;11191:15;11184:42;10999:234;:::o;11239:366::-;11381:3;11402:67;11466:2;11461:3;11402:67;:::i;:::-;11395:74;;11478:93;11567:3;11478:93;:::i;:::-;11596:2;11591:3;11587:12;11580:19;;11239:366;;;:::o;11611:419::-;11777:4;11815:2;11804:9;11800:18;11792:26;;11864:9;11858:4;11854:20;11850:1;11839:9;11835:17;11828:47;11892:131;12018:4;11892:131;:::i;:::-;11884:139;;11611:419;;;:::o;12036:180::-;12084:77;12081:1;12074:88;12181:4;12178:1;12171:15;12205:4;12202:1;12195:15;12222:410;12262:7;12285:20;12303:1;12285:20;:::i;:::-;12280:25;;12319:20;12337:1;12319:20;:::i;:::-;12314:25;;12374:1;12371;12367:9;12396:30;12414:11;12396:30;:::i;:::-;12385:41;;12575:1;12566:7;12562:15;12559:1;12556:22;12536:1;12529:9;12509:83;12486:139;;12605:18;;:::i;:::-;12486:139;12270:362;12222:410;;;;:::o;12638:227::-;12778:34;12774:1;12766:6;12762:14;12755:58;12847:10;12842:2;12834:6;12830:15;12823:35;12638:227;:::o;12871:366::-;13013:3;13034:67;13098:2;13093:3;13034:67;:::i;:::-;13027:74;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;12871:366;;;:::o;13243:419::-;13409:4;13447:2;13436:9;13432:18;13424:26;;13496:9;13490:4;13486:20;13482:1;13471:9;13467:17;13460:47;13524:131;13650:4;13524:131;:::i;:::-;13516:139;;13243:419;;;:::o;13668:240::-;13808:34;13804:1;13796:6;13792:14;13785:58;13877:23;13872:2;13864:6;13860:15;13853:48;13668:240;:::o;13914:366::-;14056:3;14077:67;14141:2;14136:3;14077:67;:::i;:::-;14070:74;;14153:93;14242:3;14153:93;:::i;:::-;14271:2;14266:3;14262:12;14255:19;;13914:366;;;:::o;14286:419::-;14452:4;14490:2;14479:9;14475:18;14467:26;;14539:9;14533:4;14529:20;14525:1;14514:9;14510:17;14503:47;14567:131;14693:4;14567:131;:::i;:::-;14559:139;;14286:419;;;:::o;14711:239::-;14851:34;14847:1;14839:6;14835:14;14828:58;14920:22;14915:2;14907:6;14903:15;14896:47;14711:239;:::o;14956:366::-;15098:3;15119:67;15183:2;15178:3;15119:67;:::i;:::-;15112:74;;15195:93;15284:3;15195:93;:::i;:::-;15313:2;15308:3;15304:12;15297:19;;14956:366;;;:::o;15328:419::-;15494:4;15532:2;15521:9;15517:18;15509:26;;15581:9;15575:4;15571:20;15567:1;15556:9;15552:17;15545:47;15609:131;15735:4;15609:131;:::i;:::-;15601:139;;15328:419;;;:::o;15753:241::-;15893:34;15889:1;15881:6;15877:14;15870:58;15962:24;15957:2;15949:6;15945:15;15938:49;15753:241;:::o;16000:366::-;16142:3;16163:67;16227:2;16222:3;16163:67;:::i;:::-;16156:74;;16239:93;16328:3;16239:93;:::i;:::-;16357:2;16352:3;16348:12;16341:19;;16000:366;;;:::o;16372:419::-;16538:4;16576:2;16565:9;16561:18;16553:26;;16625:9;16619:4;16615:20;16611:1;16600:9;16596:17;16589:47;16653:131;16779:4;16653:131;:::i;:::-;16645:139;;16372:419;;;:::o;16797:180::-;16845:77;16842:1;16835:88;16942:4;16939:1;16932:15;16966:4;16963:1;16956:15;16983:185;17023:1;17040:20;17058:1;17040:20;:::i;:::-;17035:25;;17074:20;17092:1;17074:20;:::i;:::-;17069:25;;17113:1;17103:35;;17118:18;;:::i;:::-;17103:35;17160:1;17157;17153:9;17148:14;;16983:185;;;;:::o;17174:191::-;17214:3;17233:20;17251:1;17233:20;:::i;:::-;17228:25;;17267:20;17285:1;17267:20;:::i;:::-;17262:25;;17310:1;17307;17303:9;17296:16;;17331:3;17328:1;17325:10;17322:36;;;17338:18;;:::i;:::-;17322:36;17174:191;;;;:::o;17371:244::-;17511:34;17507:1;17499:6;17495:14;17488:58;17580:27;17575:2;17567:6;17563:15;17556:52;17371:244;:::o;17621:366::-;17763:3;17784:67;17848:2;17843:3;17784:67;:::i;:::-;17777:74;;17860:93;17949:3;17860:93;:::i;:::-;17978:2;17973:3;17969:12;17962:19;;17621:366;;;:::o;17993:419::-;18159:4;18197:2;18186:9;18182:18;18174:26;;18246:9;18240:4;18236:20;18232:1;18221:9;18217:17;18210:47;18274:131;18400:4;18274:131;:::i;:::-;18266:139;;17993:419;;;:::o;18418:224::-;18558:34;18554:1;18546:6;18542:14;18535:58;18627:7;18622:2;18614:6;18610:15;18603:32;18418:224;:::o;18648:366::-;18790:3;18811:67;18875:2;18870:3;18811:67;:::i;:::-;18804:74;;18887:93;18976:3;18887:93;:::i;:::-;19005:2;19000:3;18996:12;18989:19;;18648:366;;;:::o;19020:419::-;19186:4;19224:2;19213:9;19209:18;19201:26;;19273:9;19267:4;19263:20;19259:1;19248:9;19244:17;19237:47;19301:131;19427:4;19301:131;:::i;:::-;19293:139;;19020:419;;;:::o;19445:223::-;19585:34;19581:1;19573:6;19569:14;19562:58;19654:6;19649:2;19641:6;19637:15;19630:31;19445:223;:::o;19674:366::-;19816:3;19837:67;19901:2;19896:3;19837:67;:::i;:::-;19830:74;;19913:93;20002:3;19913:93;:::i;:::-;20031:2;20026:3;20022:12;20015:19;;19674:366;;;:::o;20046:419::-;20212:4;20250:2;20239:9;20235:18;20227:26;;20299:9;20293:4;20289:20;20285:1;20274:9;20270:17;20263:47;20327:131;20453:4;20327:131;:::i;:::-;20319:139;;20046:419;;;:::o;20471:225::-;20611:34;20607:1;20599:6;20595:14;20588:58;20680:8;20675:2;20667:6;20663:15;20656:33;20471:225;:::o;20702:366::-;20844:3;20865:67;20929:2;20924:3;20865:67;:::i;:::-;20858:74;;20941:93;21030:3;20941:93;:::i;:::-;21059:2;21054:3;21050:12;21043:19;;20702:366;;;:::o;21074:419::-;21240:4;21278:2;21267:9;21263:18;21255:26;;21327:9;21321:4;21317:20;21313:1;21302:9;21298:17;21291:47;21355:131;21481:4;21355:131;:::i;:::-;21347:139;;21074:419;;;:::o;21499:223::-;21639:34;21635:1;21627:6;21623:14;21616:58;21708:6;21703:2;21695:6;21691:15;21684:31;21499:223;:::o;21728:366::-;21870:3;21891:67;21955:2;21950:3;21891:67;:::i;:::-;21884:74;;21967:93;22056:3;21967:93;:::i;:::-;22085:2;22080:3;22076:12;22069:19;;21728:366;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:221::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:4;22729:2;22721:6;22717:15;22710:29;22525:221;:::o;22752:366::-;22894:3;22915:67;22979:2;22974:3;22915:67;:::i;:::-;22908:74;;22991:93;23080:3;22991:93;:::i;:::-;23109:2;23104:3;23100:12;23093:19;;22752:366;;;:::o;23124:419::-;23290:4;23328:2;23317:9;23313:18;23305:26;;23377:9;23371:4;23367:20;23363:1;23352:9;23348:17;23341:47;23405:131;23531:4;23405:131;:::i;:::-;23397:139;;23124:419;;;:::o;23549:224::-;23689:34;23685:1;23677:6;23673:14;23666:58;23758:7;23753:2;23745:6;23741:15;23734:32;23549:224;:::o;23779:366::-;23921:3;23942:67;24006:2;24001:3;23942:67;:::i;:::-;23935:74;;24018:93;24107:3;24018:93;:::i;:::-;24136:2;24131:3;24127:12;24120:19;;23779:366;;;:::o;24151:419::-;24317:4;24355:2;24344:9;24340:18;24332:26;;24404:9;24398:4;24394:20;24390:1;24379:9;24375:17;24368:47;24432:131;24558:4;24432:131;:::i;:::-;24424:139;;24151:419;;;:::o;24576:222::-;24716:34;24712:1;24704:6;24700:14;24693:58;24785:5;24780:2;24772:6;24768:15;24761:30;24576:222;:::o;24804:366::-;24946:3;24967:67;25031:2;25026:3;24967:67;:::i;:::-;24960:74;;25043:93;25132:3;25043:93;:::i;:::-;25161:2;25156:3;25152:12;25145:19;;24804:366;;;:::o;25176:419::-;25342:4;25380:2;25369:9;25365:18;25357:26;;25429:9;25423:4;25419:20;25415:1;25404:9;25400:17;25393:47;25457:131;25583:4;25457:131;:::i;:::-;25449:139;;25176:419;;;:::o;25601:172::-;25741:24;25737:1;25729:6;25725:14;25718:48;25601:172;:::o;25779:366::-;25921:3;25942:67;26006:2;26001:3;25942:67;:::i;:::-;25935:74;;26018:93;26107:3;26018:93;:::i;:::-;26136:2;26131:3;26127:12;26120:19;;25779:366;;;:::o;26151:419::-;26317:4;26355:2;26344:9;26340:18;26332:26;;26404:9;26398:4;26394:20;26390:1;26379:9;26375:17;26368:47;26432:131;26558:4;26432:131;:::i;:::-;26424:139;;26151:419;;;:::o;26576:297::-;26716:34;26712:1;26704:6;26700:14;26693:58;26785:34;26780:2;26772:6;26768:15;26761:59;26854:11;26849:2;26841:6;26837:15;26830:36;26576:297;:::o;26879:366::-;27021:3;27042:67;27106:2;27101:3;27042:67;:::i;:::-;27035:74;;27118:93;27207:3;27118:93;:::i;:::-;27236:2;27231:3;27227:12;27220:19;;26879:366;;;:::o;27251:419::-;27417:4;27455:2;27444:9;27440:18;27432:26;;27504:9;27498:4;27494:20;27490:1;27479:9;27475:17;27468:47;27532:131;27658:4;27532:131;:::i;:::-;27524:139;;27251:419;;;:::o;27676:240::-;27816:34;27812:1;27804:6;27800:14;27793:58;27885:23;27880:2;27872:6;27868:15;27861:48;27676:240;:::o;27922:366::-;28064:3;28085:67;28149:2;28144:3;28085:67;:::i;:::-;28078:74;;28161:93;28250:3;28161:93;:::i;:::-;28279:2;28274:3;28270:12;28263:19;;27922:366;;;:::o;28294:419::-;28460:4;28498:2;28487:9;28483:18;28475:26;;28547:9;28541:4;28537:20;28533:1;28522:9;28518:17;28511:47;28575:131;28701:4;28575:131;:::i;:::-;28567:139;;28294:419;;;:::o;28719:169::-;28859:21;28855:1;28847:6;28843:14;28836:45;28719:169;:::o;28894:366::-;29036:3;29057:67;29121:2;29116:3;29057:67;:::i;:::-;29050:74;;29133:93;29222:3;29133:93;:::i;:::-;29251:2;29246:3;29242:12;29235:19;;28894:366;;;:::o;29266:419::-;29432:4;29470:2;29459:9;29455:18;29447:26;;29519:9;29513:4;29509:20;29505:1;29494:9;29490:17;29483:47;29547:131;29673:4;29547:131;:::i;:::-;29539:139;;29266:419;;;:::o;29691:241::-;29831:34;29827:1;29819:6;29815:14;29808:58;29900:24;29895:2;29887:6;29883:15;29876:49;29691:241;:::o;29938:366::-;30080:3;30101:67;30165:2;30160:3;30101:67;:::i;:::-;30094:74;;30177:93;30266:3;30177:93;:::i;:::-;30295:2;30290:3;30286:12;30279:19;;29938:366;;;:::o;30310:419::-;30476:4;30514:2;30503:9;30499:18;30491:26;;30563:9;30557:4;30553:20;30549:1;30538:9;30534:17;30527:47;30591:131;30717:4;30591:131;:::i;:::-;30583:139;;30310:419;;;:::o;30735:194::-;30775:4;30795:20;30813:1;30795:20;:::i;:::-;30790:25;;30829:20;30847:1;30829:20;:::i;:::-;30824:25;;30873:1;30870;30866:9;30858:17;;30897:1;30891:4;30888:11;30885:37;;;30902:18;;:::i;:::-;30885:37;30735:194;;;;:::o;30935:225::-;31075:34;31071:1;31063:6;31059:14;31052:58;31144:8;31139:2;31131:6;31127:15;31120:33;30935:225;:::o;31166:366::-;31308:3;31329:67;31393:2;31388:3;31329:67;:::i;:::-;31322:74;;31405:93;31494:3;31405:93;:::i;:::-;31523:2;31518:3;31514:12;31507:19;;31166:366;;;:::o;31538:419::-;31704:4;31742:2;31731:9;31727:18;31719:26;;31791:9;31785:4;31781:20;31777:1;31766:9;31762:17;31755:47;31819:131;31945:4;31819:131;:::i;:::-;31811:139;;31538:419;;;:::o;31963:147::-;32064:11;32101:3;32086:18;;31963:147;;;;:::o;32116:114::-;;:::o;32236:398::-;32395:3;32416:83;32497:1;32492:3;32416:83;:::i;:::-;32409:90;;32508:93;32597:3;32508:93;:::i;:::-;32626:1;32621:3;32617:11;32610:18;;32236:398;;;:::o;32640:379::-;32824:3;32846:147;32989:3;32846:147;:::i;:::-;32839:154;;33010:3;33003:10;;32640:379;;;:::o;33025:442::-;33174:4;33212:2;33201:9;33197:18;33189:26;;33225:71;33293:1;33282:9;33278:17;33269:6;33225:71;:::i;:::-;33306:72;33374:2;33363:9;33359:18;33350:6;33306:72;:::i;:::-;33388;33456:2;33445:9;33441:18;33432:6;33388:72;:::i;:::-;33025:442;;;;;;:::o;33473:180::-;33521:77;33518:1;33511:88;33618:4;33615:1;33608:15;33642:4;33639:1;33632:15;33659:180;33707:77;33704:1;33697:88;33804:4;33801:1;33794:15;33828:4;33825:1;33818:15;33845:143;33902:5;33933:6;33927:13;33918:22;;33949:33;33976:5;33949:33;:::i;:::-;33845:143;;;;:::o;33994:351::-;34064:6;34113:2;34101:9;34092:7;34088:23;34084:32;34081:119;;;34119:79;;:::i;:::-;34081:119;34239:1;34264:64;34320:7;34311:6;34300:9;34296:22;34264:64;:::i;:::-;34254:74;;34210:128;33994:351;;;;:::o;34351:85::-;34396:7;34425:5;34414:16;;34351:85;;;:::o;34442:158::-;34500:9;34533:61;34551:42;34560:32;34586:5;34560:32;:::i;:::-;34551:42;:::i;:::-;34533:61;:::i;:::-;34520:74;;34442:158;;;:::o;34606:147::-;34701:45;34740:5;34701:45;:::i;:::-;34696:3;34689:58;34606:147;;:::o;34759:114::-;34826:6;34860:5;34854:12;34844:22;;34759:114;;;:::o;34879:184::-;34978:11;35012:6;35007:3;35000:19;35052:4;35047:3;35043:14;35028:29;;34879:184;;;;:::o;35069:132::-;35136:4;35159:3;35151:11;;35189:4;35184:3;35180:14;35172:22;;35069:132;;;:::o;35207:108::-;35284:24;35302:5;35284:24;:::i;:::-;35279:3;35272:37;35207:108;;:::o;35321:179::-;35390:10;35411:46;35453:3;35445:6;35411:46;:::i;:::-;35489:4;35484:3;35480:14;35466:28;;35321:179;;;;:::o;35506:113::-;35576:4;35608;35603:3;35599:14;35591:22;;35506:113;;;:::o;35655:732::-;35774:3;35803:54;35851:5;35803:54;:::i;:::-;35873:86;35952:6;35947:3;35873:86;:::i;:::-;35866:93;;35983:56;36033:5;35983:56;:::i;:::-;36062:7;36093:1;36078:284;36103:6;36100:1;36097:13;36078:284;;;36179:6;36173:13;36206:63;36265:3;36250:13;36206:63;:::i;:::-;36199:70;;36292:60;36345:6;36292:60;:::i;:::-;36282:70;;36138:224;36125:1;36122;36118:9;36113:14;;36078:284;;;36082:14;36378:3;36371:10;;35779:608;;;35655:732;;;;:::o;36393:831::-;36656:4;36694:3;36683:9;36679:19;36671:27;;36708:71;36776:1;36765:9;36761:17;36752:6;36708:71;:::i;:::-;36789:80;36865:2;36854:9;36850:18;36841:6;36789:80;:::i;:::-;36916:9;36910:4;36906:20;36901:2;36890:9;36886:18;36879:48;36944:108;37047:4;37038:6;36944:108;:::i;:::-;36936:116;;37062:72;37130:2;37119:9;37115:18;37106:6;37062:72;:::i;:::-;37144:73;37212:3;37201:9;37197:19;37188:6;37144:73;:::i;:::-;36393:831;;;;;;;;:::o;37230:807::-;37479:4;37517:3;37506:9;37502:19;37494:27;;37531:71;37599:1;37588:9;37584:17;37575:6;37531:71;:::i;:::-;37612:72;37680:2;37669:9;37665:18;37656:6;37612:72;:::i;:::-;37694:80;37770:2;37759:9;37755:18;37746:6;37694:80;:::i;:::-;37784;37860:2;37849:9;37845:18;37836:6;37784:80;:::i;:::-;37874:73;37942:3;37931:9;37927:19;37918:6;37874:73;:::i;:::-;37957;38025:3;38014:9;38010:19;38001:6;37957:73;:::i;:::-;37230:807;;;;;;;;;:::o;38043:143::-;38100:5;38131:6;38125:13;38116:22;;38147:33;38174:5;38147:33;:::i;:::-;38043:143;;;;:::o;38192:663::-;38280:6;38288;38296;38345:2;38333:9;38324:7;38320:23;38316:32;38313:119;;;38351:79;;:::i;:::-;38313:119;38471:1;38496:64;38552:7;38543:6;38532:9;38528:22;38496:64;:::i;:::-;38486:74;;38442:128;38609:2;38635:64;38691:7;38682:6;38671:9;38667:22;38635:64;:::i;:::-;38625:74;;38580:129;38748:2;38774:64;38830:7;38821:6;38810:9;38806:22;38774:64;:::i;:::-;38764:74;;38719:129;38192:663;;;;;:::o
Swarm Source
ipfs://72ba41777597b8a6d9a118b2442fe3efe49ca392c872910ae868b94f66baa8ea
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.