ERC-20
Overview
Max Total Supply
420,690,000,000,000 ECOCK
Holders
38
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,832,244,538,337.889588864 ECOCKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ECOCK
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-10 */ /* https://x.com/dogeofficialceo/status/1833315063756951853 https://t.me/Elons_Cock * SPDX-License-Identifier: UNLICENSE */ pragma solidity 0.8.26; 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 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function setDevWallet(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract ECOCK is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTaxTotal; uint256 private buyMarketingTax; uint256 private buyProjectTax; uint256 private sellTaxTotal; uint256 private sellMarketingTax; uint256 private sellProjectTax; uint256 private transferTaxTotal; uint256 private transferMarketingTax; uint256 private transferProjectTax; uint256 private tokensForMarketing; uint256 private tokensForProject; uint256 private buyCount; uint256 private firstBlock; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; mapping (address => bool) private bots; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetDexPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Elon's Cock", "ECOCK") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); setAddressAsExemptFromTxLimits(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); setAddressAsExemptFromTxLimits(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 _buyMarketingTax = 19; uint256 _buyProjectTax = 0; uint256 _sellMarketingTax = 19; uint256 _sellProjectTax = 0; uint256 _transferMarketingTax = 0; uint256 _transferProjectTax = 0; uint256 _buyCount = 0; uint256 _totalSupply = 420_690_000_000_000 * 10 ** decimals(); maxTx = (_totalSupply * 20) / 1000; maxWallet = (_totalSupply * 20) / 1000; swapBackValueMin = (_totalSupply * 20) / 1000; swapBackValueMax = (_totalSupply * 20) / 1000; buyMarketingTax = _buyMarketingTax; buyProjectTax = _buyProjectTax; buyTaxTotal = buyMarketingTax + buyProjectTax; sellMarketingTax = _sellMarketingTax; sellProjectTax = _sellProjectTax; sellTaxTotal = sellMarketingTax + sellProjectTax; transferMarketingTax = _transferMarketingTax; transferProjectTax = _transferProjectTax; transferTaxTotal = transferMarketingTax + transferProjectTax; buyCount = _buyCount; marketingWallet = address(msg.sender); projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount setAddressAsExemptFromFees(msg.sender, true); setAddressAsExemptFromFees(address(this), true); setAddressAsExemptFromFees(address(0xdead), true); setAddressAsExemptFromFees(marketingWallet, true); setAddressAsExemptFromTxLimits(msg.sender, true); setAddressAsExemptFromTxLimits(address(this), true); setAddressAsExemptFromTxLimits(address(0xdead), true); setAddressAsExemptFromTxLimits(marketingWallet, true); transferOwnership(msg.sender); /* _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 {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function setTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; firstBlock = block.number; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function removeLimits() external onlyOwner { limitsEnabled = false; transferMarketingTax = 0; transferProjectTax = 0; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function setAmountsForMaxAndForMinSwapBack( bool _enable, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newMaxTxLimit Base 1000, so 1% = 10 */ function maxTxLimitSet( uint256 newMaxTxLimit ) external onlyOwner { require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newMaxTxLimit * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newMaxWalletLimit Base 1000, so 1% = 10 */ function maxWalletLimitset( uint256 newMaxWalletLimit ) external onlyOwner { require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newMaxWalletLimit * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function setAddressAsExemptFromTxLimits( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function setBuyFees( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { buyMarketingTax = _marketingFee; buyProjectTax = _devFee; buyTaxTotal = buyMarketingTax + buyProjectTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function setSellFees( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { sellMarketingTax = _marketingFee; sellProjectTax = _devFee; sellTaxTotal = sellMarketingTax + sellProjectTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax); } function setMktWallet(address newMktWal) external onlyOwner { emit MarketingWalletUpdated(newMktWal, marketingWallet); marketingWallet = newMktWal; } /** * @notice Sets the project wallet * @dev onlyOwner. * Emits an {ProjectWalletUpdated} event * @param newDevWal The new dev wallet */ function setProjWallet(address newDevWal) external onlyOwner { emit ProjectWalletUpdated(newDevWal, projectWallet); projectWallet = newDevWal; } function setTransferTax( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { transferMarketingTax = _marketingFee; transferProjectTax = _devFee; transferTaxTotal = transferMarketingTax + transferProjectTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function setAddressAsExemptFromFees( address account, bool excluded ) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetDexPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setDexPair(address pair, bool value) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setDexPair(pair, value); } function _setDexPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetDexPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newMktWal The new marketing wallet */ /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function viewSwapback() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function viewLimits() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees * @return _projectWallet The wallet that receives the dev fees */ function viewReceivers() external view returns (address _marketingWallet, address _projectWallet) { return (marketingWallet, projectWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _buyMarketingTax The fee for buys that gets sent to marketing * @return _buyProjectTax The fee for buys that gets sent to dev * @return _sellTaxTotal The total fee for sells * @return _sellMarketingTax The fee for sells that gets sent to marketing * @return _sellProjectTax The fee for sells that gets sent to dev */ function viewTaxes() external view returns ( uint256 _buyTaxTotal, uint256 _buyMarketingTax, uint256 _buyProjectTax, uint256 _sellTaxTotal, uint256 _sellMarketingTax, uint256 _sellProjectTax ) { _buyTaxTotal = buyTaxTotal; _buyMarketingTax = buyMarketingTax; _buyProjectTax = buyProjectTax; _sellTaxTotal = sellTaxTotal; _sellMarketingTax = sellMarketingTax; _sellProjectTax = sellProjectTax; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function viewMappings( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { require(!bots[from] && !bots[to]); } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { buyCount++; require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] ) { swapping = true; swapBack(amount); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[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] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); tokensForProject += (fees * sellProjectTax) / sellTaxTotal; tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal; } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { if (buyCount>60&&block.number==firstBlock){ fees = amount.mul(45).div(100); tokensForMarketing += fees; } else { fees = amount.mul(buyTaxTotal).div(100); tokensForProject += (fees * buyProjectTax) / buyTaxTotal; tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal; } } // on transfers else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { fees = amount.mul(transferTaxTotal).div(100); tokensForProject += (fees * transferProjectTax) / transferTaxTotal; tokensForMarketing += (fees * transferMarketingTax) / transferTaxTotal; } 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] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function addBot(address[] memory bots_) public onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBots(address[] memory notbot) public onlyOwner { for (uint i = 0; i < notbot.length; i++) { bots[notbot[i]] = false; } } function isBot(address a) public view returns (bool){ return bots[a]; } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 5) { contractBalance = amount * 5; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForProject).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForProject = 0; (success, ) = address(projectWallet).call{value: ethForDev}(""); (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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","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":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTxLimitSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletLimitset","outputs":[],"stateMutability":"nonpayable","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setAddressAsExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setAddressAsExemptFromTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setAmountsForMaxAndForMinSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWal","type":"address"}],"name":"setMktWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWal","type":"address"}],"name":"setProjWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"viewMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040525f600560156101000a81548160ff021916908315150217905550600160085f6101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff0219169083151502179055506001601f5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600b81526020017f456c6f6e277320436f636b0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f45434f434b00000000000000000000000000000000000000000000000000000081525081600390816100f29190610e7c565b5080600490816101029190610e7c565b5050506101216101166105d960201b60201c565b6105e060201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014a8160016106a360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101eb9190610fa9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102749190610fa9565b6040518363ffffffff1660e01b8152600401610291929190610fe3565b6020604051808303815f875af11580156102ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d19190610fa9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061031760a05160016106a360201b60201c565b61032a60a05160016107d160201b60201c565b5f601390505f80601390505f805f805f61034861086f60201b60201c565b600a6103549190611172565b66017e9d8602b40061036691906111bc565b90506103e860148261037891906111bc565b610382919061122a565b600a819055506103e860148261039891906111bc565b6103a2919061122a565b6009819055506103e86014826103b891906111bc565b6103c2919061122a565b6006819055506103e86014826103d891906111bc565b6103e2919061122a565b60078190555087600f8190555086601081905550601054600f54610406919061125a565b600e81905550856012819055508460138190555060135460125461042a919061125a565b601181905550836015819055508260168190555060165460155461044e919061125a565b6014819055508160198190555033600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104ed33600161087760201b60201c565b6104fe30600161087760201b60201c565b61051161dead600161087760201b60201c565b610544600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087760201b60201c565b6105553360016106a360201b60201c565b6105663060016106a360201b60201c565b61057961dead60016106a360201b60201c565b6105ac600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016106a360201b60201c565b6105bb336109a560201b60201c565b6105cb3382610aad60201b60201c565b505050505050505050611456565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6106b16105d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106d5610c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461072b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610722906112e7565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516107c5919061131f565b60405180910390a25050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b5f6009905090565b6108856105d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108a9610c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f6906112e7565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610999919061131f565b60405180910390a25050565b6109b36105d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109d7610c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a24906112e7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a92906113a8565b60405180910390fd5b610aaa816105e060201b60201c565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290611410565b60405180910390fd5b610b2c5f8383610c3860201b60201c565b8060025f828254610b3d919061125a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b8f919061125a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bf3919061143d565b60405180910390a3610c0c5f8383610c3d60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cbd57607f821691505b602082108103610cd057610ccf610c79565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cf7565b610d3c8683610cf7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d80610d7b610d7684610d54565b610d5d565b610d54565b9050919050565b5f819050919050565b610d9983610d66565b610dad610da582610d87565b848454610d03565b825550505050565b5f90565b610dc1610db5565b610dcc818484610d90565b505050565b5b81811015610def57610de45f82610db9565b600181019050610dd2565b5050565b601f821115610e3457610e0581610cd6565b610e0e84610ce8565b81016020851015610e1d578190505b610e31610e2985610ce8565b830182610dd1565b50505b505050565b5f82821c905092915050565b5f610e545f1984600802610e39565b1980831691505092915050565b5f610e6c8383610e45565b9150826002028217905092915050565b610e8582610c42565b67ffffffffffffffff811115610e9e57610e9d610c4c565b5b610ea88254610ca6565b610eb3828285610df3565b5f60209050601f831160018114610ee4575f8415610ed2578287015190505b610edc8582610e61565b865550610f43565b601f198416610ef286610cd6565b5f5b82811015610f1957848901518255600182019150602085019450602081019050610ef4565b86831015610f365784890151610f32601f891682610e45565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7882610f4f565b9050919050565b610f8881610f6e565b8114610f92575f80fd5b50565b5f81519050610fa381610f7f565b92915050565b5f60208284031215610fbe57610fbd610f4b565b5b5f610fcb84828501610f95565b91505092915050565b610fdd81610f6e565b82525050565b5f604082019050610ff65f830185610fd4565b6110036020830184610fd4565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561108c578086048111156110685761106761100a565b5b60018516156110775780820291505b808102905061108585611037565b945061104c565b94509492505050565b5f826110a4576001905061115f565b816110b1575f905061115f565b81600181146110c757600281146110d157611100565b600191505061115f565b60ff8411156110e3576110e261100a565b5b8360020a9150848211156110fa576110f961100a565b5b5061115f565b5060208310610133831016604e8410600b84101617156111355782820a9050838111156111305761112f61100a565b5b61115f565b6111428484846001611043565b925090508184048111156111595761115861100a565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61117c82610d54565b915061118783611166565b92506111b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611095565b905092915050565b5f6111c682610d54565b91506111d183610d54565b92508282026111df81610d54565b915082820484148315176111f6576111f561100a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61123482610d54565b915061123f83610d54565b92508261124f5761124e6111fd565b5b828204905092915050565b5f61126482610d54565b915061126f83610d54565b92508282019050808211156112875761128661100a565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6112d160208361128d565b91506112dc8261129d565b602082019050919050565b5f6020820190508181035f8301526112fe816112c5565b9050919050565b5f8115159050919050565b61131981611305565b82525050565b5f6020820190506113325f830184611310565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61139260268361128d565b915061139d82611338565b604082019050919050565b5f6020820190508181035f8301526113bf81611386565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6113fa601f8361128d565b9150611405826113c6565b602082019050919050565b5f6020820190508181035f830152611427816113ee565b9050919050565b61143781610d54565b82525050565b5f6020820190506114505f83018461142e565b92915050565b60805160a05161518861148c5f395f81816120f001526122c601525f81816139cc01528181613aab0152613ad201526151885ff3fe608060405260043610610233575f3560e01c806370a082311161012d578063a457c2d7116100aa578063dd62ed3e1161006e578063dd62ed3e14610818578063e55648f414610854578063ebb2b6451461087c578063f242ab41146108a4578063f2fde38b146108ce5761023a565b8063a457c2d714610728578063a9059cbb14610764578063b2d8f208146107a0578063d98d2939146107c8578063da7346b7146107f05761023a565b80638da5cb5b116100f15780638da5cb5b1461065c57806395d89b411461068657806399d9b547146106b05780639c1de68c146106d85780639fd8234e146107005761023a565b806370a08231146105b6578063715018a6146105f2578063751039fc146106085780637c519ffb1461061e5780637ff6f7b9146106345761023a565b80632b96cacc116101bb578063395093511161017f57806339509351146104ab5780633b8c2849146104e75780633ba48be6146105255780633bbac579146105505780634ada218b1461058c5761023a565b80632b96cacc146103d95780632e63ed0314610401578063303780b11461042d578063313ce5671461045957806331c2d847146104835761023a565b806311abf5371161020257806311abf537146102f457806318160ddd146103235780631f53ac021461034d57806321bbcbb11461037557806323b872dd1461039d5761023a565b8063065e812b1461023e57806306fdde0314610266578063095ea7b3146102905780630b726539146102cc5761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b50610264600480360381019061025f9190613be2565b6108f6565b005b348015610271575f80fd5b5061027a610a32565b6040516102879190613c7d565b60405180910390f35b34801561029b575f80fd5b506102b660048036038101906102b19190613cd0565b610ac2565b6040516102c39190613d28565b60405180910390f35b3480156102d7575f80fd5b506102f260048036038101906102ed9190613d6b565b610adf565b005b3480156102ff575f80fd5b50610308610c01565b60405161031a96959493929190613db8565b60405180910390f35b34801561032e575f80fd5b50610337610c2d565b6040516103449190613e17565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190613be2565b610c36565b005b348015610380575f80fd5b5061039b60048036038101906103969190613f70565b610d2c565b005b3480156103a8575f80fd5b506103c360048036038101906103be9190613fb7565b610e33565b6040516103d09190613d28565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa9190614007565b610f25565b005b34801561040c575f80fd5b50610415611047565b60405161042493929190614032565b60405180910390f35b348015610438575f80fd5b5061044161106b565b60405161045093929190614032565b60405180910390f35b348015610464575f80fd5b5061046d61108e565b60405161047a9190614082565b60405180910390f35b34801561048e575f80fd5b506104a960048036038101906104a49190613f70565b611096565b005b3480156104b6575f80fd5b506104d160048036038101906104cc9190613cd0565b61119c565b6040516104de9190613d28565b60405180910390f35b3480156104f2575f80fd5b5061050d60048036038101906105089190613be2565b611243565b60405161051c9392919061409b565b60405180910390f35b348015610530575f80fd5b50610539611331565b6040516105479291906140df565b60405180910390f35b34801561055b575f80fd5b5061057660048036038101906105719190613be2565b611380565b6040516105839190613d28565b60405180910390f35b348015610597575f80fd5b506105a06113d2565b6040516105ad9190613d28565b60405180910390f35b3480156105c1575f80fd5b506105dc60048036038101906105d79190613be2565b6113e4565b6040516105e99190613e17565b60405180910390f35b3480156105fd575f80fd5b50610606611429565b005b348015610613575f80fd5b5061061c6114b0565b005b348015610629575f80fd5b50610632611589565b005b34801561063f575f80fd5b5061065a60048036038101906106559190614106565b611670565b005b348015610667575f80fd5b50610670611708565b60405161067d9190614131565b60405180910390f35b348015610691575f80fd5b5061069a611730565b6040516106a79190613c7d565b60405180910390f35b3480156106bb575f80fd5b506106d660048036038101906106d1919061414a565b6117c0565b005b3480156106e3575f80fd5b506106fe60048036038101906106f99190614007565b6118aa565b005b34801561070b575f80fd5b506107266004803603810190610721919061414a565b6119cc565b005b348015610733575f80fd5b5061074e60048036038101906107499190613cd0565b611af7565b60405161075b9190613d28565b60405180910390f35b34801561076f575f80fd5b5061078a60048036038101906107859190613cd0565b611bdd565b6040516107979190613d28565b60405180910390f35b3480156107ab575f80fd5b506107c660048036038101906107c1919061414a565b611bfa565b005b3480156107d3575f80fd5b506107ee60048036038101906107e99190614188565b611d25565b005b3480156107fb575f80fd5b5061081660048036038101906108119190613d6b565b611ece565b005b348015610823575f80fd5b5061083e600480360381019061083991906141d8565b611ff0565b60405161084b9190613e17565b60405180910390f35b34801561085f575f80fd5b5061087a60048036038101906108759190613d6b565b612072565b005b348015610887575f80fd5b506108a2600480360381019061089d9190613be2565b61218a565b005b3480156108af575f80fd5b506108b86122c4565b6040516108c59190614131565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef9190613be2565b6122e8565b005b6108fe6123de565b73ffffffffffffffffffffffffffffffffffffffff1661091c611708565b73ffffffffffffffffffffffffffffffffffffffff1614610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614260565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610a41906142ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906142ab565b8015610ab85780601f10610a8f57610100808354040283529160200191610ab8565b820191905f5260205f20905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b5f610ad5610ace6123de565b84846123e5565b6001905092915050565b610ae76123de565b73ffffffffffffffffffffffffffffffffffffffff16610b05611708565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290614260565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610bf59190613d28565b60405180910390a25050565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f600254905090565b610c3e6123de565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611708565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990614260565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061434b565b60405180910390fd5b610d29816125a8565b50565b610d346123de565b73ffffffffffffffffffffffffffffffffffffffff16610d52611708565b73ffffffffffffffffffffffffffffffffffffffff1614610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f90614260565b60405180910390fd5b5f5b8151811015610e2f576001601e5f848481518110610dcb57610dca614369565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610daa565b5050565b5f610e3f84848461266b565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e866123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90614406565b60405180910390fd5b610f1985610f116123de565b8584036123e5565b60019150509392505050565b610f2d6123de565b73ffffffffffffffffffffffffffffffffffffffff16610f4b611708565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890614260565b60405180910390fd5b6005811015610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90614494565b60405180910390fd5b6103e8610ff0610c2d565b82610ffb91906144df565b611005919061454d565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace60095460405161103c9190613e17565b60405180910390a150565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f805f60085f9054906101000a900460ff1692506009549150600a549050909192565b5f6009905090565b61109e6123de565b73ffffffffffffffffffffffffffffffffffffffff166110bc611708565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614260565b60405180910390fd5b5f5b8151811015611198575f601e5f84848151811061113457611133614369565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611114565b5050565b5f6112396111a86123de565b848460015f6111b56123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611234919061457d565b6123e5565b6001905092915050565b5f805f601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169250601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169150601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114316123de565b73ffffffffffffffffffffffffffffffffffffffff1661144f611708565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90614260565b60405180910390fd5b6114ae5f6125a8565b565b6114b86123de565b73ffffffffffffffffffffffffffffffffffffffff166114d6611708565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614260565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055505f6015819055505f6016819055505f601481905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6115916123de565b73ffffffffffffffffffffffffffffffffffffffff166115af611708565b73ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90614260565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff02191690831515021790555043601a81905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6116786123de565b73ffffffffffffffffffffffffffffffffffffffff16611696611708565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614260565b60405180910390fd5b80601f5f6101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461173f906142ab565b80601f016020809104026020016040519081016040528092919081815260200182805461176b906142ab565b80156117b65780601f1061178d576101008083540402835291602001916117b6565b820191905f5260205f20905b81548152906001019060200180831161179957829003601f168201915b5050505050905090565b6117c86123de565b73ffffffffffffffffffffffffffffffffffffffff166117e6611708565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390614260565b60405180910390fd5b816015819055508060168190555060165460155461185a919061457d565b601481905550606460145411156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614620565b60405180910390fd5b5050565b6118b26123de565b73ffffffffffffffffffffffffffffffffffffffff166118d0611708565b73ffffffffffffffffffffffffffffffffffffffff1614611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90614260565b60405180910390fd5b600281101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614688565b60405180910390fd5b6103e8611975610c2d565b8261198091906144df565b61198a919061454d565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516119c19190613e17565b60405180910390a150565b6119d46123de565b73ffffffffffffffffffffffffffffffffffffffff166119f2611708565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614260565b60405180910390fd5b8160128190555080601381905550601354601254611a66919061457d565b60118190555060646011541115611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990614716565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051611aeb93929190614734565b60405180910390a15050565b5f8060015f611b046123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb5906147d9565b60405180910390fd5b611bd2611bc96123de565b858584036123e5565b600191505092915050565b5f611bf0611be96123de565b848461266b565b6001905092915050565b611c026123de565b73ffffffffffffffffffffffffffffffffffffffff16611c20611708565b73ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90614260565b60405180910390fd5b81600f8190555080601081905550601054600f54611c94919061457d565b600e819055506064600e541115611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614867565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051611d1993929190614734565b60405180910390a15050565b611d2d6123de565b73ffffffffffffffffffffffffffffffffffffffff16611d4b611708565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614260565b60405180910390fd5b6001821015611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906148f5565b60405180910390fd5b81811015611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614983565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611e4e610c2d565b611e5891906144df565b611e62919061454d565b60068190555061271081611e74610c2d565b611e7e91906144df565b611e88919061454d565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611ec193929190614032565b60405180910390a1505050565b611ed66123de565b73ffffffffffffffffffffffffffffffffffffffff16611ef4611708565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614260565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611fe49190613d28565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61207a6123de565b73ffffffffffffffffffffffffffffffffffffffff16612098611708565b73ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614260565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614a11565b60405180910390fd5b61218682826133fe565b5050565b6121926123de565b73ffffffffffffffffffffffffffffffffffffffff166121b0611708565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614260565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6122f06123de565b73ffffffffffffffffffffffffffffffffffffffff1661230e611708565b73ffffffffffffffffffffffffffffffffffffffff1614612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614260565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c99061434b565b60405180910390fd5b6123db816125a8565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614a9f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614b2d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161259b9190613e17565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090614bbb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90614c49565b60405180910390fd5b5f810361275e5761275983835f61349c565b6133f9565b612766611708565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d457506127a4611708565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561280c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612846575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f5750600560149054906101000a900460ff16155b1561290b57601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129025750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61290a575f80fd5b5b60085f9054906101000a900460ff1615612e0557612927611708565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129955750612965611708565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129cd57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a07575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a205750600560149054906101000a900460ff16155b15612e0457600c5f9054906101000a900460ff16612b1357601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ad35750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990614cd7565b60405180910390fd5b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bb05750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6e5760195f815480929190612bc790614cf5565b9190505550600a54811115612c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0890614dac565b60405180910390fd5b600954612c1d836113e4565b82612c28919061457d565b1115612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6090614e14565b60405180910390fd5b612e03565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d0b5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d5a57600a54811115612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90614ea2565b60405180910390fd5b612e02565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e0157600954612db4836113e4565b82612dbf919061457d565b1115612e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df790614e14565b60405180910390fd5b5b5b5b5b5b5f612e0f306113e4565b90505f6006548210159050808015612e335750600560159054906101000a900460ff165b8015612e4c5750600560149054906101000a900460ff16155b8015612e9f5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ef25750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f455750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f89576001600560146101000a81548160ff021916908315150217905550612f6e83613711565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130385750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613041575f90505b5f81156133e957601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561309f57505f601154115b15613137576130cc60646130be601154886138fb90919063ffffffff16565b61391090919063ffffffff16565b9050601154601354826130df91906144df565b6130e9919061454d565b60185f8282546130f9919061457d565b925050819055506011546012548261311191906144df565b61311b919061454d565b60175f82825461312b919061457d565b925050819055506133c6565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561318e57505f600e54115b1561328557603c6019541180156131a65750601a5443145b156131f1576131d260646131c4602d886138fb90919063ffffffff16565b61391090919063ffffffff16565b90508060175f8282546131e5919061457d565b92505081905550613280565b613219606461320b600e54886138fb90919063ffffffff16565b61391090919063ffffffff16565b9050600e546010548261322c91906144df565b613236919061454d565b60185f828254613246919061457d565b92505081905550600e54600f548261325e91906144df565b613268919061454d565b60175f828254613278919061457d565b925050819055505b6133c5565b5f6014541180156132dd5750601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133305750601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c45761335d606461334f601454886138fb90919063ffffffff16565b61391090919063ffffffff16565b90506014546016548261337091906144df565b61337a919061454d565b60185f82825461338a919061457d565b92505081905550601454601554826133a291906144df565b6133ac919061454d565b60175f8282546133bc919061457d565b925050819055505b5b5b5f8111156133da576133d987308361349c565b5b80856133e69190614ec0565b94505b6133f487878761349c565b505050505b505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361350a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350190614bbb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356f90614c49565b60405180910390fd5b613583838383613925565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fd90614f63565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613694919061457d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f89190613e17565b60405180910390a361370b84848461392a565b50505050565b5f61371b306113e4565b90505f8190505f808303613731575050506138f8565b6007548311156137415760075492505b601f5f9054906101000a900460ff168015613767575060058461376491906144df565b83115b1561377c5760058461377991906144df565b92505b5f8390505f47905061378d8261392f565b5f6137a18247613b6290919063ffffffff16565b90505f6137cb866137bd601854856138fb90919063ffffffff16565b61391090919063ffffffff16565b90505f6017819055505f601881905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161382090614fae565b5f6040518083038185875af1925050503d805f811461385a576040519150601f19603f3d011682016040523d82523d5f602084013e61385f565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138ab90614fae565b5f6040518083038185875af1925050503d805f81146138e5576040519150601f19603f3d011682016040523d82523d5f602084013e6138ea565b606091505b505080955050505050505050505b50565b5f818361390891906144df565b905092915050565b5f818361391d919061454d565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561394b5761394a613e34565b5b6040519080825280602002602001820160405280156139795781602001602082028036833780820191505090505b50905030815f815181106139905761398f614369565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a579190614fd6565b81600181518110613a6b57613a6a614369565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ad0307f0000000000000000000000000000000000000000000000000000000000000000846123e5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b319594939291906150fa565b5f604051808303815f87803b158015613b48575f80fd5b505af1158015613b5a573d5f803e3d5ffd5b505050505050565b5f8183613b6f9190614ec0565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bb182613b88565b9050919050565b613bc181613ba7565b8114613bcb575f80fd5b50565b5f81359050613bdc81613bb8565b92915050565b5f60208284031215613bf757613bf6613b80565b5b5f613c0484828501613bce565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c4f82613c0d565b613c598185613c17565b9350613c69818560208601613c27565b613c7281613c35565b840191505092915050565b5f6020820190508181035f830152613c958184613c45565b905092915050565b5f819050919050565b613caf81613c9d565b8114613cb9575f80fd5b50565b5f81359050613cca81613ca6565b92915050565b5f8060408385031215613ce657613ce5613b80565b5b5f613cf385828601613bce565b9250506020613d0485828601613cbc565b9150509250929050565b5f8115159050919050565b613d2281613d0e565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b613d4a81613d0e565b8114613d54575f80fd5b50565b5f81359050613d6581613d41565b92915050565b5f8060408385031215613d8157613d80613b80565b5b5f613d8e85828601613bce565b9250506020613d9f85828601613d57565b9150509250929050565b613db281613c9d565b82525050565b5f60c082019050613dcb5f830189613da9565b613dd86020830188613da9565b613de56040830187613da9565b613df26060830186613da9565b613dff6080830185613da9565b613e0c60a0830184613da9565b979650505050505050565b5f602082019050613e2a5f830184613da9565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613e6a82613c35565b810181811067ffffffffffffffff82111715613e8957613e88613e34565b5b80604052505050565b5f613e9b613b77565b9050613ea78282613e61565b919050565b5f67ffffffffffffffff821115613ec657613ec5613e34565b5b602082029050602081019050919050565b5f80fd5b5f613eed613ee884613eac565b613e92565b90508083825260208201905060208402830185811115613f1057613f0f613ed7565b5b835b81811015613f395780613f258882613bce565b845260208401935050602081019050613f12565b5050509392505050565b5f82601f830112613f5757613f56613e30565b5b8135613f67848260208601613edb565b91505092915050565b5f60208284031215613f8557613f84613b80565b5b5f82013567ffffffffffffffff811115613fa257613fa1613b84565b5b613fae84828501613f43565b91505092915050565b5f805f60608486031215613fce57613fcd613b80565b5b5f613fdb86828701613bce565b9350506020613fec86828701613bce565b9250506040613ffd86828701613cbc565b9150509250925092565b5f6020828403121561401c5761401b613b80565b5b5f61402984828501613cbc565b91505092915050565b5f6060820190506140455f830186613d19565b6140526020830185613da9565b61405f6040830184613da9565b949350505050565b5f60ff82169050919050565b61407c81614067565b82525050565b5f6020820190506140955f830184614073565b92915050565b5f6060820190506140ae5f830186613d19565b6140bb6020830185613d19565b6140c86040830184613d19565b949350505050565b6140d981613ba7565b82525050565b5f6040820190506140f25f8301856140d0565b6140ff60208301846140d0565b9392505050565b5f6020828403121561411b5761411a613b80565b5b5f61412884828501613d57565b91505092915050565b5f6020820190506141445f8301846140d0565b92915050565b5f80604083850312156141605761415f613b80565b5b5f61416d85828601613cbc565b925050602061417e85828601613cbc565b9150509250929050565b5f805f6060848603121561419f5761419e613b80565b5b5f6141ac86828701613d57565b93505060206141bd86828701613cbc565b92505060406141ce86828701613cbc565b9150509250925092565b5f80604083850312156141ee576141ed613b80565b5b5f6141fb85828601613bce565b925050602061420c85828601613bce565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61424a602083613c17565b915061425582614216565b602082019050919050565b5f6020820190508181035f8301526142778161423e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142c257607f821691505b6020821081036142d5576142d461427e565b5b50919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614335602683613c17565b9150614340826142db565b604082019050919050565b5f6020820190508181035f83015261436281614329565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6143f0602883613c17565b91506143fb82614396565b604082019050919050565b5f6020820190508181035f83015261441d816143e4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61447e602483613c17565b915061448982614424565b604082019050919050565b5f6020820190508181035f8301526144ab81614472565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6144e982613c9d565b91506144f483613c9d565b925082820261450281613c9d565b91508282048414831517614519576145186144b2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61455782613c9d565b915061456283613c9d565b92508261457257614571614520565b5b828204905092915050565b5f61458782613c9d565b915061459283613c9d565b92508282019050808211156145aa576145a96144b2565b5b92915050565b7f546f74616c207472616e73666572206665652063616e6e6f74206265206869675f8201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b5f61460a602d83613c17565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f614672602083613c17565b915061467d8261463e565b602082019050919050565b5f6020820190508181035f83015261469f81614666565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f614700602983613c17565b915061470b826146a6565b604082019050919050565b5f6020820190508181035f83015261472d816146f4565b9050919050565b5f6060820190506147475f830186613da9565b6147546020830185613da9565b6147616040830184613da9565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6147c3602583613c17565b91506147ce82614769565b604082019050919050565b5f6020820190508181035f8301526147f0816147b7565b9050919050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f614851602883613c17565b915061485c826147f7565b604082019050919050565b5f6020820190508181035f83015261487e81614845565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6148df603483613c17565b91506148ea82614885565b604082019050919050565b5f6020820190508181035f83015261490c816148d3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f61496d602a83613c17565b915061497882614913565b604082019050919050565b5f6020820190508181035f83015261499a81614961565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6149fb603983613c17565b9150614a06826149a1565b604082019050919050565b5f6020820190508181035f830152614a28816149ef565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614a89602483613c17565b9150614a9482614a2f565b604082019050919050565b5f6020820190508181035f830152614ab681614a7d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b17602283613c17565b9150614b2282614abd565b604082019050919050565b5f6020820190508181035f830152614b4481614b0b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ba5602583613c17565b9150614bb082614b4b565b604082019050919050565b5f6020820190508181035f830152614bd281614b99565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614c33602383613c17565b9150614c3e82614bd9565b604082019050919050565b5f6020820190508181035f830152614c6081614c27565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614cc1602283613c17565b9150614ccc82614c67565b604082019050919050565b5f6020820190508181035f830152614cee81614cb5565b9050919050565b5f614cff82613c9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3157614d306144b2565b5b600182019050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614d96602683613c17565b9150614da182614d3c565b604082019050919050565b5f6020820190508181035f830152614dc381614d8a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614dfe601383613c17565b9150614e0982614dca565b602082019050919050565b5f6020820190508181035f830152614e2b81614df2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614e8c602783613c17565b9150614e9782614e32565b604082019050919050565b5f6020820190508181035f830152614eb981614e80565b9050919050565b5f614eca82613c9d565b9150614ed583613c9d565b9250828203905081811115614eed57614eec6144b2565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614f4d602683613c17565b9150614f5882614ef3565b604082019050919050565b5f6020820190508181035f830152614f7a81614f41565b9050919050565b5f81905092915050565b50565b5f614f995f83614f81565b9150614fa482614f8b565b5f82019050919050565b5f614fb882614f8e565b9150819050919050565b5f81519050614fd081613bb8565b92915050565b5f60208284031215614feb57614fea613b80565b5b5f614ff884828501614fc2565b91505092915050565b5f819050919050565b5f819050919050565b5f61502d61502861502384615001565b61500a565b613c9d565b9050919050565b61503d81615013565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61507581613ba7565b82525050565b5f615086838361506c565b60208301905092915050565b5f602082019050919050565b5f6150a882615043565b6150b2818561504d565b93506150bd8361505d565b805f5b838110156150ed5781516150d4888261507b565b97506150df83615092565b9250506001810190506150c0565b5085935050505092915050565b5f60a08201905061510d5f830188613da9565b61511a6020830187615034565b818103604083015261512c818661509e565b905061513b60608301856140d0565b6151486080830184613da9565b969550505050505056fea26469706673582212201e0a0b587e5bb36be851e75169b99d28129c0584b5b53240d6a0382fe6b6e3e164736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610233575f3560e01c806370a082311161012d578063a457c2d7116100aa578063dd62ed3e1161006e578063dd62ed3e14610818578063e55648f414610854578063ebb2b6451461087c578063f242ab41146108a4578063f2fde38b146108ce5761023a565b8063a457c2d714610728578063a9059cbb14610764578063b2d8f208146107a0578063d98d2939146107c8578063da7346b7146107f05761023a565b80638da5cb5b116100f15780638da5cb5b1461065c57806395d89b411461068657806399d9b547146106b05780639c1de68c146106d85780639fd8234e146107005761023a565b806370a08231146105b6578063715018a6146105f2578063751039fc146106085780637c519ffb1461061e5780637ff6f7b9146106345761023a565b80632b96cacc116101bb578063395093511161017f57806339509351146104ab5780633b8c2849146104e75780633ba48be6146105255780633bbac579146105505780634ada218b1461058c5761023a565b80632b96cacc146103d95780632e63ed0314610401578063303780b11461042d578063313ce5671461045957806331c2d847146104835761023a565b806311abf5371161020257806311abf537146102f457806318160ddd146103235780631f53ac021461034d57806321bbcbb11461037557806323b872dd1461039d5761023a565b8063065e812b1461023e57806306fdde0314610266578063095ea7b3146102905780630b726539146102cc5761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b50610264600480360381019061025f9190613be2565b6108f6565b005b348015610271575f80fd5b5061027a610a32565b6040516102879190613c7d565b60405180910390f35b34801561029b575f80fd5b506102b660048036038101906102b19190613cd0565b610ac2565b6040516102c39190613d28565b60405180910390f35b3480156102d7575f80fd5b506102f260048036038101906102ed9190613d6b565b610adf565b005b3480156102ff575f80fd5b50610308610c01565b60405161031a96959493929190613db8565b60405180910390f35b34801561032e575f80fd5b50610337610c2d565b6040516103449190613e17565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190613be2565b610c36565b005b348015610380575f80fd5b5061039b60048036038101906103969190613f70565b610d2c565b005b3480156103a8575f80fd5b506103c360048036038101906103be9190613fb7565b610e33565b6040516103d09190613d28565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa9190614007565b610f25565b005b34801561040c575f80fd5b50610415611047565b60405161042493929190614032565b60405180910390f35b348015610438575f80fd5b5061044161106b565b60405161045093929190614032565b60405180910390f35b348015610464575f80fd5b5061046d61108e565b60405161047a9190614082565b60405180910390f35b34801561048e575f80fd5b506104a960048036038101906104a49190613f70565b611096565b005b3480156104b6575f80fd5b506104d160048036038101906104cc9190613cd0565b61119c565b6040516104de9190613d28565b60405180910390f35b3480156104f2575f80fd5b5061050d60048036038101906105089190613be2565b611243565b60405161051c9392919061409b565b60405180910390f35b348015610530575f80fd5b50610539611331565b6040516105479291906140df565b60405180910390f35b34801561055b575f80fd5b5061057660048036038101906105719190613be2565b611380565b6040516105839190613d28565b60405180910390f35b348015610597575f80fd5b506105a06113d2565b6040516105ad9190613d28565b60405180910390f35b3480156105c1575f80fd5b506105dc60048036038101906105d79190613be2565b6113e4565b6040516105e99190613e17565b60405180910390f35b3480156105fd575f80fd5b50610606611429565b005b348015610613575f80fd5b5061061c6114b0565b005b348015610629575f80fd5b50610632611589565b005b34801561063f575f80fd5b5061065a60048036038101906106559190614106565b611670565b005b348015610667575f80fd5b50610670611708565b60405161067d9190614131565b60405180910390f35b348015610691575f80fd5b5061069a611730565b6040516106a79190613c7d565b60405180910390f35b3480156106bb575f80fd5b506106d660048036038101906106d1919061414a565b6117c0565b005b3480156106e3575f80fd5b506106fe60048036038101906106f99190614007565b6118aa565b005b34801561070b575f80fd5b506107266004803603810190610721919061414a565b6119cc565b005b348015610733575f80fd5b5061074e60048036038101906107499190613cd0565b611af7565b60405161075b9190613d28565b60405180910390f35b34801561076f575f80fd5b5061078a60048036038101906107859190613cd0565b611bdd565b6040516107979190613d28565b60405180910390f35b3480156107ab575f80fd5b506107c660048036038101906107c1919061414a565b611bfa565b005b3480156107d3575f80fd5b506107ee60048036038101906107e99190614188565b611d25565b005b3480156107fb575f80fd5b5061081660048036038101906108119190613d6b565b611ece565b005b348015610823575f80fd5b5061083e600480360381019061083991906141d8565b611ff0565b60405161084b9190613e17565b60405180910390f35b34801561085f575f80fd5b5061087a60048036038101906108759190613d6b565b612072565b005b348015610887575f80fd5b506108a2600480360381019061089d9190613be2565b61218a565b005b3480156108af575f80fd5b506108b86122c4565b6040516108c59190614131565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef9190613be2565b6122e8565b005b6108fe6123de565b73ffffffffffffffffffffffffffffffffffffffff1661091c611708565b73ffffffffffffffffffffffffffffffffffffffff1614610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990614260565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610a41906142ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906142ab565b8015610ab85780601f10610a8f57610100808354040283529160200191610ab8565b820191905f5260205f20905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b5f610ad5610ace6123de565b84846123e5565b6001905092915050565b610ae76123de565b73ffffffffffffffffffffffffffffffffffffffff16610b05611708565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290614260565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610bf59190613d28565b60405180910390a25050565b5f805f805f80600e549550600f5494506010549350601154925060125491506013549050909192939495565b5f600254905090565b610c3e6123de565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611708565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990614260565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061434b565b60405180910390fd5b610d29816125a8565b50565b610d346123de565b73ffffffffffffffffffffffffffffffffffffffff16610d52611708565b73ffffffffffffffffffffffffffffffffffffffff1614610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f90614260565b60405180910390fd5b5f5b8151811015610e2f576001601e5f848481518110610dcb57610dca614369565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610daa565b5050565b5f610e3f84848461266b565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e866123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90614406565b60405180910390fd5b610f1985610f116123de565b8584036123e5565b60019150509392505050565b610f2d6123de565b73ffffffffffffffffffffffffffffffffffffffff16610f4b611708565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890614260565b60405180910390fd5b6005811015610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90614494565b60405180910390fd5b6103e8610ff0610c2d565b82610ffb91906144df565b611005919061454d565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace60095460405161103c9190613e17565b60405180910390a150565b5f805f600560159054906101000a900460ff16925060065491506007549050909192565b5f805f60085f9054906101000a900460ff1692506009549150600a549050909192565b5f6009905090565b61109e6123de565b73ffffffffffffffffffffffffffffffffffffffff166110bc611708565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614260565b60405180910390fd5b5f5b8151811015611198575f601e5f84848151811061113457611133614369565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611114565b5050565b5f6112396111a86123de565b848460015f6111b56123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611234919061457d565b6123e5565b6001905092915050565b5f805f601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169250601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169150601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690509193909250565b5f80600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114316123de565b73ffffffffffffffffffffffffffffffffffffffff1661144f611708565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90614260565b60405180910390fd5b6114ae5f6125a8565b565b6114b86123de565b73ffffffffffffffffffffffffffffffffffffffff166114d6611708565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614260565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055505f6015819055505f6016819055505f601481905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6115916123de565b73ffffffffffffffffffffffffffffffffffffffff166115af611708565b73ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90614260565b60405180910390fd5b6001600c5f6101000a81548160ff0219169083151502179055506001600560156101000a81548160ff02191690831515021790555043601a81905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b6116786123de565b73ffffffffffffffffffffffffffffffffffffffff16611696611708565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614260565b60405180910390fd5b80601f5f6101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461173f906142ab565b80601f016020809104026020016040519081016040528092919081815260200182805461176b906142ab565b80156117b65780601f1061178d576101008083540402835291602001916117b6565b820191905f5260205f20905b81548152906001019060200180831161179957829003601f168201915b5050505050905090565b6117c86123de565b73ffffffffffffffffffffffffffffffffffffffff166117e6611708565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390614260565b60405180910390fd5b816015819055508060168190555060165460155461185a919061457d565b601481905550606460145411156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614620565b60405180910390fd5b5050565b6118b26123de565b73ffffffffffffffffffffffffffffffffffffffff166118d0611708565b73ffffffffffffffffffffffffffffffffffffffff1614611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90614260565b60405180910390fd5b600281101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614688565b60405180910390fd5b6103e8611975610c2d565b8261198091906144df565b61198a919061454d565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516119c19190613e17565b60405180910390a150565b6119d46123de565b73ffffffffffffffffffffffffffffffffffffffff166119f2611708565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614260565b60405180910390fd5b8160128190555080601381905550601354601254611a66919061457d565b60118190555060646011541115611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990614716565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051611aeb93929190614734565b60405180910390a15050565b5f8060015f611b046123de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb5906147d9565b60405180910390fd5b611bd2611bc96123de565b858584036123e5565b600191505092915050565b5f611bf0611be96123de565b848461266b565b6001905092915050565b611c026123de565b73ffffffffffffffffffffffffffffffffffffffff16611c20611708565b73ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90614260565b60405180910390fd5b81600f8190555080601081905550601054600f54611c94919061457d565b600e819055506064600e541115611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614867565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051611d1993929190614734565b60405180910390a15050565b611d2d6123de565b73ffffffffffffffffffffffffffffffffffffffff16611d4b611708565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614260565b60405180910390fd5b6001821015611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906148f5565b60405180910390fd5b81811015611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90614983565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611e4e610c2d565b611e5891906144df565b611e62919061454d565b60068190555061271081611e74610c2d565b611e7e91906144df565b611e88919061454d565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611ec193929190614032565b60405180910390a1505050565b611ed66123de565b73ffffffffffffffffffffffffffffffffffffffff16611ef4611708565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614260565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611fe49190613d28565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61207a6123de565b73ffffffffffffffffffffffffffffffffffffffff16612098611708565b73ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614260565b60405180910390fd5b7f0000000000000000000000004361737b1ab6bfdc6a2cdc3c15e1b1ecafe186bf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614a11565b60405180910390fd5b61218682826133fe565b5050565b6121926123de565b73ffffffffffffffffffffffffffffffffffffffff166121b0611708565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614260565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000004361737b1ab6bfdc6a2cdc3c15e1b1ecafe186bf81565b6122f06123de565b73ffffffffffffffffffffffffffffffffffffffff1661230e611708565b73ffffffffffffffffffffffffffffffffffffffff1614612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614260565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c99061434b565b60405180910390fd5b6123db816125a8565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614a9f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614b2d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161259b9190613e17565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090614bbb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90614c49565b60405180910390fd5b5f810361275e5761275983835f61349c565b6133f9565b612766611708565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d457506127a4611708565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561280c57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612846575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f5750600560149054906101000a900460ff16155b1561290b57601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129025750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61290a575f80fd5b5b60085f9054906101000a900460ff1615612e0557612927611708565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129955750612965611708565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129cd57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a07575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a205750600560149054906101000a900460ff16155b15612e0457600c5f9054906101000a900460ff16612b1357601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612ad35750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990614cd7565b60405180910390fd5b5b601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bb05750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6e5760195f815480929190612bc790614cf5565b9190505550600a54811115612c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0890614dac565b60405180910390fd5b600954612c1d836113e4565b82612c28919061457d565b1115612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6090614e14565b60405180910390fd5b612e03565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d0b5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d5a57600a54811115612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90614ea2565b60405180910390fd5b612e02565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e0157600954612db4836113e4565b82612dbf919061457d565b1115612e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df790614e14565b60405180910390fd5b5b5b5b5b5b5f612e0f306113e4565b90505f6006548210159050808015612e335750600560159054906101000a900460ff165b8015612e4c5750600560149054906101000a900460ff16155b8015612e9f5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ef25750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f455750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f89576001600560146101000a81548160ff021916908315150217905550612f6e83613711565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130385750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613041575f90505b5f81156133e957601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561309f57505f601154115b15613137576130cc60646130be601154886138fb90919063ffffffff16565b61391090919063ffffffff16565b9050601154601354826130df91906144df565b6130e9919061454d565b60185f8282546130f9919061457d565b925050819055506011546012548261311191906144df565b61311b919061454d565b60175f82825461312b919061457d565b925050819055506133c6565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561318e57505f600e54115b1561328557603c6019541180156131a65750601a5443145b156131f1576131d260646131c4602d886138fb90919063ffffffff16565b61391090919063ffffffff16565b90508060175f8282546131e5919061457d565b92505081905550613280565b613219606461320b600e54886138fb90919063ffffffff16565b61391090919063ffffffff16565b9050600e546010548261322c91906144df565b613236919061454d565b60185f828254613246919061457d565b92505081905550600e54600f548261325e91906144df565b613268919061454d565b60175f828254613278919061457d565b925050819055505b6133c5565b5f6014541180156132dd5750601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156133305750601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c45761335d606461334f601454886138fb90919063ffffffff16565b61391090919063ffffffff16565b90506014546016548261337091906144df565b61337a919061454d565b60185f82825461338a919061457d565b92505081905550601454601554826133a291906144df565b6133ac919061454d565b60175f8282546133bc919061457d565b925050819055505b5b5b5f8111156133da576133d987308361349c565b5b80856133e69190614ec0565b94505b6133f487878761349c565b505050505b505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361350a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350190614bbb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356f90614c49565b60405180910390fd5b613583838383613925565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fd90614f63565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613694919061457d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f89190613e17565b60405180910390a361370b84848461392a565b50505050565b5f61371b306113e4565b90505f8190505f808303613731575050506138f8565b6007548311156137415760075492505b601f5f9054906101000a900460ff168015613767575060058461376491906144df565b83115b1561377c5760058461377991906144df565b92505b5f8390505f47905061378d8261392f565b5f6137a18247613b6290919063ffffffff16565b90505f6137cb866137bd601854856138fb90919063ffffffff16565b61391090919063ffffffff16565b90505f6017819055505f601881905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161382090614fae565b5f6040518083038185875af1925050503d805f811461385a576040519150601f19603f3d011682016040523d82523d5f602084013e61385f565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138ab90614fae565b5f6040518083038185875af1925050503d805f81146138e5576040519150601f19603f3d011682016040523d82523d5f602084013e6138ea565b606091505b505080955050505050505050505b50565b5f818361390891906144df565b905092915050565b5f818361391d919061454d565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561394b5761394a613e34565b5b6040519080825280602002602001820160405280156139795781602001602082028036833780820191505090505b50905030815f815181106139905761398f614369565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a579190614fd6565b81600181518110613a6b57613a6a614369565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ad0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123e5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b319594939291906150fa565b5f604051808303815f87803b158015613b48575f80fd5b505af1158015613b5a573d5f803e3d5ffd5b505050505050565b5f8183613b6f9190614ec0565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bb182613b88565b9050919050565b613bc181613ba7565b8114613bcb575f80fd5b50565b5f81359050613bdc81613bb8565b92915050565b5f60208284031215613bf757613bf6613b80565b5b5f613c0484828501613bce565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c4f82613c0d565b613c598185613c17565b9350613c69818560208601613c27565b613c7281613c35565b840191505092915050565b5f6020820190508181035f830152613c958184613c45565b905092915050565b5f819050919050565b613caf81613c9d565b8114613cb9575f80fd5b50565b5f81359050613cca81613ca6565b92915050565b5f8060408385031215613ce657613ce5613b80565b5b5f613cf385828601613bce565b9250506020613d0485828601613cbc565b9150509250929050565b5f8115159050919050565b613d2281613d0e565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b613d4a81613d0e565b8114613d54575f80fd5b50565b5f81359050613d6581613d41565b92915050565b5f8060408385031215613d8157613d80613b80565b5b5f613d8e85828601613bce565b9250506020613d9f85828601613d57565b9150509250929050565b613db281613c9d565b82525050565b5f60c082019050613dcb5f830189613da9565b613dd86020830188613da9565b613de56040830187613da9565b613df26060830186613da9565b613dff6080830185613da9565b613e0c60a0830184613da9565b979650505050505050565b5f602082019050613e2a5f830184613da9565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613e6a82613c35565b810181811067ffffffffffffffff82111715613e8957613e88613e34565b5b80604052505050565b5f613e9b613b77565b9050613ea78282613e61565b919050565b5f67ffffffffffffffff821115613ec657613ec5613e34565b5b602082029050602081019050919050565b5f80fd5b5f613eed613ee884613eac565b613e92565b90508083825260208201905060208402830185811115613f1057613f0f613ed7565b5b835b81811015613f395780613f258882613bce565b845260208401935050602081019050613f12565b5050509392505050565b5f82601f830112613f5757613f56613e30565b5b8135613f67848260208601613edb565b91505092915050565b5f60208284031215613f8557613f84613b80565b5b5f82013567ffffffffffffffff811115613fa257613fa1613b84565b5b613fae84828501613f43565b91505092915050565b5f805f60608486031215613fce57613fcd613b80565b5b5f613fdb86828701613bce565b9350506020613fec86828701613bce565b9250506040613ffd86828701613cbc565b9150509250925092565b5f6020828403121561401c5761401b613b80565b5b5f61402984828501613cbc565b91505092915050565b5f6060820190506140455f830186613d19565b6140526020830185613da9565b61405f6040830184613da9565b949350505050565b5f60ff82169050919050565b61407c81614067565b82525050565b5f6020820190506140955f830184614073565b92915050565b5f6060820190506140ae5f830186613d19565b6140bb6020830185613d19565b6140c86040830184613d19565b949350505050565b6140d981613ba7565b82525050565b5f6040820190506140f25f8301856140d0565b6140ff60208301846140d0565b9392505050565b5f6020828403121561411b5761411a613b80565b5b5f61412884828501613d57565b91505092915050565b5f6020820190506141445f8301846140d0565b92915050565b5f80604083850312156141605761415f613b80565b5b5f61416d85828601613cbc565b925050602061417e85828601613cbc565b9150509250929050565b5f805f6060848603121561419f5761419e613b80565b5b5f6141ac86828701613d57565b93505060206141bd86828701613cbc565b92505060406141ce86828701613cbc565b9150509250925092565b5f80604083850312156141ee576141ed613b80565b5b5f6141fb85828601613bce565b925050602061420c85828601613bce565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61424a602083613c17565b915061425582614216565b602082019050919050565b5f6020820190508181035f8301526142778161423e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806142c257607f821691505b6020821081036142d5576142d461427e565b5b50919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614335602683613c17565b9150614340826142db565b604082019050919050565b5f6020820190508181035f83015261436281614329565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6143f0602883613c17565b91506143fb82614396565b604082019050919050565b5f6020820190508181035f83015261441d816143e4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61447e602483613c17565b915061448982614424565b604082019050919050565b5f6020820190508181035f8301526144ab81614472565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6144e982613c9d565b91506144f483613c9d565b925082820261450281613c9d565b91508282048414831517614519576145186144b2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61455782613c9d565b915061456283613c9d565b92508261457257614571614520565b5b828204905092915050565b5f61458782613c9d565b915061459283613c9d565b92508282019050808211156145aa576145a96144b2565b5b92915050565b7f546f74616c207472616e73666572206665652063616e6e6f74206265206869675f8201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b5f61460a602d83613c17565b9150614615826145b0565b604082019050919050565b5f6020820190508181035f830152614637816145fe565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f614672602083613c17565b915061467d8261463e565b602082019050919050565b5f6020820190508181035f83015261469f81614666565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572205f8201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b5f614700602983613c17565b915061470b826146a6565b604082019050919050565b5f6020820190508181035f83015261472d816146f4565b9050919050565b5f6060820190506147475f830186613da9565b6147546020830185613da9565b6147616040830184613da9565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6147c3602583613c17565b91506147ce82614769565b604082019050919050565b5f6020820190508181035f8301526147f0816147b7565b9050919050565b7f546f74616c20627579206665652063616e6e6f742062652068696768657220745f8201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b5f614851602883613c17565b915061485c826147f7565b604082019050919050565b5f6020820190508181035f83015261487e81614845565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6148df603483613c17565b91506148ea82614885565b604082019050919050565b5f6020820190508181035f83015261490c816148d3565b9050919050565b7f6d6178696d756d20616d6f756e742063616e74206265206869676865722074685f8201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b5f61496d602a83613c17565b915061497882614913565b604082019050919050565b5f6020820190508181035f83015261499a81614961565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6149fb603983613c17565b9150614a06826149a1565b604082019050919050565b5f6020820190508181035f830152614a28816149ef565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614a89602483613c17565b9150614a9482614a2f565b604082019050919050565b5f6020820190508181035f830152614ab681614a7d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b17602283613c17565b9150614b2282614abd565b604082019050919050565b5f6020820190508181035f830152614b4481614b0b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614ba5602583613c17565b9150614bb082614b4b565b604082019050919050565b5f6020820190508181035f830152614bd281614b99565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614c33602383613c17565b9150614c3e82614bd9565b604082019050919050565b5f6020820190508181035f830152614c6081614c27565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f742061637469765f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614cc1602283613c17565b9150614ccc82614c67565b604082019050919050565b5f6020820190508181035f830152614cee81614cb5565b9050919050565b5f614cff82613c9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3157614d306144b2565b5b600182019050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614d96602683613c17565b9150614da182614d3c565b604082019050919050565b5f6020820190508181035f830152614dc381614d8a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614dfe601383613c17565b9150614e0982614dca565b602082019050919050565b5f6020820190508181035f830152614e2b81614df2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614e8c602783613c17565b9150614e9782614e32565b604082019050919050565b5f6020820190508181035f830152614eb981614e80565b9050919050565b5f614eca82613c9d565b9150614ed583613c9d565b9250828203905081811115614eed57614eec6144b2565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614f4d602683613c17565b9150614f5882614ef3565b604082019050919050565b5f6020820190508181035f830152614f7a81614f41565b9050919050565b5f81905092915050565b50565b5f614f995f83614f81565b9150614fa482614f8b565b5f82019050919050565b5f614fb882614f8e565b9150819050919050565b5f81519050614fd081613bb8565b92915050565b5f60208284031215614feb57614fea613b80565b5b5f614ff884828501614fc2565b91505092915050565b5f819050919050565b5f819050919050565b5f61502d61502861502384615001565b61500a565b613c9d565b9050919050565b61503d81615013565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61507581613ba7565b82525050565b5f615086838361506c565b60208301905092915050565b5f602082019050919050565b5f6150a882615043565b6150b2818561504d565b93506150bd8361505d565b805f5b838110156150ed5781516150d4888261507b565b97506150df83615092565b9250506001810190506150c0565b5085935050505092915050565b5f60a08201905061510d5f830188613da9565b61511a6020830187615034565b818103604083015261512c818661509e565b905061513b60608301856140d0565b6151486080830184613da9565b969550505050505056fea26469706673582212201e0a0b587e5bb36be851e75169b99d28129c0584b5b53240d6a0382fe6b6e3e164736f6c634300081a0033
Deployed Bytecode Sourcemap
25655:22882:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35691:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36869:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40172:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22855:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47007:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33494:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38327:353;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39027:241;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11975:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47178:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41206:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39500:188;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;47348:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26229:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;31522:228;;;;;;;;;;;;;:::i;:::-;;31170:197;;;;;;;;;;;;;:::i;:::-;;46916:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11232:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36218:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33021:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35234:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34545:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32214:564;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34049:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37379:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36043:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25775:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35691:172;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35801:15:::1;;;;;;;;;;;35767:50;;35790:9;35767:50;;;;;;;;;;;;35846:9;35828:15;;:27;;;;;;;;;;;;;;;;;;35691:172:::0;:::o;11013:100::-;11067:13;11100:5;11093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:100;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;36869:216::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37019:8:::1;36990:17;:26;37008:7;36990:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;37059:7;37043:34;;;37068:8;37043:34;;;;;;:::i;:::-;;;;;;;;36869:216:::0;;:::o;40172:572::-;40257:20;40292:24;40331:22;40368:21;40404:25;40444:23;40510:11;;40495:26;;40551:15;;40532:34;;40594:13;;40577:30;;40634:12;;40618:28;;40677:16;;40657:36;;40722:14;;40704:32;;40172:572;;;;;;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;22855:233::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22973:1:::1;22953:22;;:8;:22;;::::0;22931:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23052:28;23071:8;23052:18;:28::i;:::-;22855:233:::0;:::o;47007:163::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47080:6:::1;47075:88;47096:5;:12;47092:1;:16;47075:88;;;47147:4;47130;:14;47135:5;47141:1;47135:8;;;;;;;;:::i;:::-;;;;;;;;47130:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;47110:3;;;;;;;47075:88;;;;47007:163:::0;:::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;33494:287::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33623:1:::1;33602:17;:22;;33594:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33726:4;33709:13;:11;:13::i;:::-;33689:17;:33;;;;:::i;:::-;33688:42;;;;:::i;:::-;33676:9;:54;;;;33746:27;33763:9;;33746:27;;;;;;:::i;:::-;;;;;;;;33494:287:::0;:::o;38327:353::-;38415:21;38451:25;38491;38563:15;;;;;;;;;;;38544:34;;38609:16;;38589:36;;38656:16;;38636:36;;38327:353;;;:::o;39027:241::-;39099:19;39120:18;39140:14;39189:13;;;;;;;;;;;39172:30;;39226:9;;39213:22;;39255:5;;39246:14;;39027:241;;;:::o;11975:92::-;12033:5;12058:1;12051:8;;11975:92;:::o;47178:162::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47251:6:::1;47246:87;47267:6;:13;47263:1;:17;47246:87;;;47318:5;47300:4;:15;47305:6;47312:1;47305:9;;;;;;;;:::i;:::-;;;;;;;;47300:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;47282:3;;;;;;;47246:87;;;;47178:162:::0;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;41206:447::-;41325:23;41363:25;41403:31;41483:17;:26;41501:7;41483:26;;;;;;;;;;;;;;;;;;;;;;;;;41462:47;;41543:19;:28;41563:7;41543:28;;;;;;;;;;;;;;;;;;;;;;;;;41520:51;;41611:25;:34;41637:7;41611:34;;;;;;;;;;;;;;;;;;;;;;;;;41582:63;;41206:447;;;;;:::o;39500:188::-;39575:24;39601:22;39649:15;;;;;;;;;;;39666:13;;;;;;;;;;;39641:39;;;;39500:188;;:::o;47348:83::-;47395:4;47416;:7;47421:1;47416:7;;;;;;;;;;;;;;;;;;;;;;;;;47409:14;;47348:83;;;:::o;26229:34::-;;;;;;;;;;;;;:::o;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;31522:228::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31592:5:::1;31576:13;;:21;;;;;;;;;;;;;;;;;;31631:1;31608:20;:24;;;;31664:1;31643:18;:22;;;;31695:1;31676:16;:20;;;;31726:15;31712:30;;;;;;;;;;31522:228::o:0;31170:197::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31239:4:::1;31222:14;;:21;;;;;;;;;;;;;;;;;;31272:4;31254:15;;:22;;;;;;;;;;;;;;;;;;31300:12;31287:10;:25;;;;31343:15;31328:31;;;;;;;;;;31170:197::o:0;46916:79::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46982:5:::1;46975:4;;:12;;;;;;;;;;;;;;;;;;46916:79:::0;:::o;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;11232:104::-;11288:13;11321:7;11314:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11232:104;:::o;36218:402::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36360:13:::1;36337:20;:36;;;;36405:7;36384:18;:28;;;;36465:18;;36442:20;;:41;;;;:::i;:::-;36423:16;:60;;;;36536:3;36516:16;;:23;;36494:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36218:402:::0;;:::o;33021:255::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33138:1:::1;33121:13;:18;;33113:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:4;33212:13;:11;:13::i;:::-;33196;:29;;;;:::i;:::-;33195:38;;;;:::i;:::-;33187:5;:46;;;;33249:19;33262:5;;33249:19;;;;;;:::i;:::-;;;;;;;;33021:255:::0;:::o;35234:449::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35369:13:::1;35350:16;:32;;;;35410:7;35393:14;:24;;;;35462:14;;35443:16;;:33;;;;:::i;:::-;35428:12;:48;;;;35525:3;35509:12;;:19;;35487:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35613:62;35628:12;;35642:16;;35660:14;;35613:62;;;;;;;;:::i;:::-;;;;;;;;35234:449:::0;;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;34545:400::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34678:13:::1;34660:15;:31;;;;34718:7;34702:13;:23;;;;34768:13;;34750:15;;:31;;;;:::i;:::-;34736:11;:45;;;;34815:3;34800:11;;:18;;34792:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:58;34893:11;;34906:15;;34923:13;;34879:58;;;;;;;;:::i;:::-;;;;;;;;34545:400:::0;;:::o;32214:564::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32393:1:::1;32385:4;:9;;32363:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32501:4;32493;:12;;32485:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32583:7;32565:15;;:25;;;;;;;;;;;;;;;;;;32645:5;32637:4;32621:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32620:30;;;;:::i;:::-;32601:16;:49;;;;32705:5;32697:4;32681:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32680:30;;;;:::i;:::-;32661:16;:49;;;;32726:44;32750:7;32759:4;32765;32726:44;;;;;;;;:::i;:::-;;;;;;;;32214:564:::0;;;:::o;34049:209::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34199:4:::1;34169:19;:27;34189:6;34169:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34237:6;34219:31;;;34245:4;34219:31;;;;;;:::i;:::-;;;;;;;;34049:209:::0;;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;37379:241::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37483:7:::1;37475:15;;:4;:15;;::::0;37453:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37588:24;37600:4;37606:5;37588:11;:24::i;:::-;37379:241:::0;;:::o;36043:167::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36152:13:::1;;;;;;;;;;;36120:46;;36141:9;36120:46;;;;;;;;;;;;36193:9;36177:13;;:25;;;;;;;;;;;;;;;;;;36043:167:::0;:::o;25775:32::-;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;10019:98::-;10072:7;10099:10;10092:17;;10019:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;23248:191::-;23322:16;23341:6;;;;;;;;;;;23322:25;;23367:8;23358:6;;:17;;;;;;;;;;;;;;;;;;23422:8;23391:40;;23412:8;23391:40;;;;;;;;;;;;23311:128;23248:191;:::o;41661:4643::-;41809:1;41793:18;;:4;:18;;;41785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41886:1;41872:16;;:2;:16;;;41864:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41955:1;41945:6;:11;41941:93;;41973:28;41989:4;41995:2;41999:1;41973:15;:28::i;:::-;42016:7;;41941:93;42076:7;:5;:7::i;:::-;42068:15;;:4;:15;;;;:49;;;;;42110:7;:5;:7::i;:::-;42104:13;;:2;:13;;;;42068:49;:86;;;;;42152:1;42138:16;;:2;:16;;;;42068:86;:128;;;;;42189:6;42175:21;;:2;:21;;;;42068:128;:158;;;;;42218:8;;;;;;;;;;;42217:9;42068:158;42046:268;;;42270:4;:10;42275:4;42270:10;;;;;;;;;;;;;;;;;;;;;;;;;42269:11;:24;;;;;42285:4;:8;42290:2;42285:8;;;;;;;;;;;;;;;;;;;;;;;;;42284:9;42269:24;42261:33;;;;;;42046:268;42330:13;;;;;;;;;;;42326:1613;;;42390:7;:5;:7::i;:::-;42382:15;;:4;:15;;;;:49;;;;;42424:7;:5;:7::i;:::-;42418:13;;:2;:13;;;;42382:49;:86;;;;;42466:1;42452:16;;:2;:16;;;;42382:86;:128;;;;;42503:6;42489:21;;:2;:21;;;;42382:128;:158;;;;;42532:8;;;;;;;;;;;42531:9;42382:158;42360:1568;;;42580:14;;;;;;;;;;;42575:232;;42653:17;:23;42671:4;42653:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42680:17;:21;42698:2;42680:21;;;;;;;;;;;;;;;;;;;;;;;;;42653:48;42619:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;42575:232;42897:25;:31;42923:4;42897:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42933:19;:23;42953:2;42933:23;;;;;;;;;;;;;;;;;;;;;;;;;42932:24;42897:59;42871:1042;;;42999:8;;:10;;;;;;;;;:::i;:::-;;;;;;43076:5;;43066:6;:15;;43032:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;43254:9;;43237:13;43247:2;43237:9;:13::i;:::-;43228:6;:22;;;;:::i;:::-;:35;;43194:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42871:1042;;;43432:25;:29;43458:2;43432:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;43466:19;:25;43486:4;43466:25;;;;;;;;;;;;;;;;;;;;;;;;;43465:26;43432:59;43406:507;;;43578:5;;43568:6;:15;;43534:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43406:507;;;43705:19;:23;43725:2;43705:23;;;;;;;;;;;;;;;;;;;;;;;;;43700:213;;43813:9;;43796:13;43806:2;43796:9;:13::i;:::-;43787:6;:22;;;;:::i;:::-;:35;;43753:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43700:213;43406:507;42871:1042;42360:1568;42326:1613;43951:28;43982:24;44000:4;43982:9;:24::i;:::-;43951:55;;44019:12;44058:16;;44034:20;:40;;44019:55;;44105:7;:39;;;;;44129:15;;;;;;;;;;;44105:39;:65;;;;;44162:8;;;;;;;;;;;44161:9;44105:65;:114;;;;;44188:25;:31;44214:4;44188:31;;;;;;;;;;;;;;;;;;;;;;;;;44187:32;44105:114;:155;;;;;44237:17;:23;44255:4;44237:23;;;;;;;;;;;;;;;;;;;;;;;;;44236:24;44105:155;:194;;;;;44278:17;:21;44296:2;44278:21;;;;;;;;;;;;;;;;;;;;;;;;;44277:22;44105:194;44087:332;;;44337:4;44326:8;;:15;;;;;;;;;;;;;;;;;;44358:16;44367:6;44358:8;:16::i;:::-;44402:5;44391:8;;:16;;;;;;;;;;;;;;;;;;44087:332;44431:12;44447:8;;;;;;;;;;;44446:9;44431:24;;44557:17;:23;44575:4;44557:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44584:17;:21;44602:2;44584:21;;;;;;;;;;;;;;;;;;;;;;;;;44557:48;44553:96;;;44632:5;44622:15;;44553:96;44661:12;44766:7;44762:1489;;;44818:25;:29;44844:2;44818:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;44866:1;44851:12;;:16;44818:49;44814:1286;;;44895:33;44924:3;44895:24;44906:12;;44895:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44888:40;;44993:12;;44975:14;;44968:4;:21;;;;:::i;:::-;44967:38;;;;:::i;:::-;44947:16;;:58;;;;;;;:::i;:::-;;;;;;;;45074:12;;45054:16;;45047:4;:23;;;;:::i;:::-;45046:40;;;;:::i;:::-;45024:18;;:62;;;;;;;:::i;:::-;;;;;;;;44814:1286;;;45148:25;:31;45174:4;45148:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45197:1;45183:11;;:15;45148:50;45144:956;;;45232:2;45223:8;;:11;:37;;;;;45250:10;;45236:12;:24;45223:37;45219:431;;;45291:23;45310:3;45291:14;45302:2;45291:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;45284:30;;45359:4;45337:18;;:26;;;;;;;:::i;:::-;;;;;;;;45219:431;;;45436:32;45464:3;45436:23;45447:11;;45436:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;45429:39;;45536:11;;45519:13;;45512:4;:20;;;;:::i;:::-;45511:36;;;;:::i;:::-;45491:16;;:56;;;;;;;:::i;:::-;;;;;;;;45619:11;;45600:15;;45593:4;:22;;;;:::i;:::-;45592:38;;;;:::i;:::-;45570:18;;:60;;;;;;;:::i;:::-;;;;;;;;45219:431;45144:956;;;45774:1;45755:16;;:20;:56;;;;;45780:25;:31;45806:4;45780:31;;;;;;;;;;;;;;;;;;;;;;;;;45779:32;45755:56;:90;;;;;45816:25;:29;45842:2;45816:29;;;;;;;;;;;;;;;;;;;;;;;;;45815:30;45755:90;45751:349;;;45873:37;45906:3;45873:28;45884:16;;45873:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;45866:44;;45979:16;;45957:18;;45950:4;:25;;;;:::i;:::-;45949:46;;;;:::i;:::-;45929:16;;:66;;;;;;;:::i;:::-;;;;;;;;46068:16;;46044:20;;46037:4;:27;;;;:::i;:::-;46036:48;;;;:::i;:::-;46014:18;;:70;;;;;;;:::i;:::-;;;;;;;;45751:349;45144:956;44814:1286;46129:1;46122:4;:8;46118:91;;;46151:42;46167:4;46181;46188;46151:15;:42::i;:::-;46118:91;46235:4;46225:14;;;;;:::i;:::-;;;44762:1489;46263:33;46279:4;46285:2;46289:6;46263:15;:33::i;:::-;41774:4530;;;;41661:4643;;;;:::o;37628:154::-;37728:5;37694:25;:31;37720:4;37694:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37768:5;37751:23;;37762:4;37751:23;;;;;;;;;;;;37628:154;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;47439:1095::-;47492:23;47518:24;47536:4;47518:9;:24::i;:::-;47492:50;;47553:25;47581:15;47553:43;;47607:12;47655:1;47636:15;:20;47632:59;;47673:7;;;;;47632:59;47725:16;;47707:15;:34;47703:101;;;47776:16;;47758:34;;47703:101;47820:4;;;;;;;;;;;:36;;;;;47855:1;47846:6;:10;;;;:::i;:::-;47828:15;:28;47820:36;47816:97;;;47900:1;47891:6;:10;;;;:::i;:::-;47873:28;;47816:97;47925:26;47954:15;47925:44;;47982:25;48010:21;47982:49;;48044:36;48061:18;48044:16;:36::i;:::-;48093:18;48114:44;48140:17;48114:21;:25;;:44;;;;:::i;:::-;48093:65;;48171:17;48191:79;48242:17;48191:32;48206:16;;48191:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;48171:99;;48304:1;48283:18;:22;;;;48335:1;48316:16;:20;;;;48371:13;;;;;;;;;;;48363:27;;48398:9;48363:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48349:63;;;;;48447:15;;;;;;;;;;;48439:29;;48490:21;48439:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48425:101;;;;;47481:1053;;;;;;;47439:1095;;:::o;3378:98::-;3436:7;3467:1;3463;:5;;;;:::i;:::-;3456:12;;3378:98;;;;:::o;3777:::-;3835:7;3866:1;3862;:5;;;;:::i;:::-;3855:12;;3777:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;46312:571::-;46438:21;46476:1;46462:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46438:40;;46507:4;46489;46494:1;46489:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46533:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46523:4;46528:1;46523:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;46562:56;46579:4;46594:9;46606:11;46562:8;:56::i;:::-;46657:9;:60;;;46732:11;46758:1;46802:4;46829;46849:15;46657:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46367:516;46312:571;:::o;3021:98::-;3079:7;3110:1;3106;:5;;;;:::i;:::-;3099:12;;3021:98;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:139::-;1545:6;1540:3;1535;1529:23;1586:1;1577:6;1572:3;1568:16;1561:27;1456:139;;;:::o;1601:102::-;1642:6;1693:2;1689:7;1684:2;1677:5;1673:14;1669:28;1659:38;;1601:102;;;:::o;1709:377::-;1797:3;1825:39;1858:5;1825:39;:::i;:::-;1880:71;1944:6;1939:3;1880:71;:::i;:::-;1873:78;;1960:65;2018:6;2013:3;2006:4;1999:5;1995:16;1960:65;:::i;:::-;2050:29;2072:6;2050:29;:::i;:::-;2045:3;2041:39;2034:46;;1801:285;1709:377;;;;:::o;2092:313::-;2205:4;2243:2;2232:9;2228:18;2220:26;;2292:9;2286:4;2282:20;2278:1;2267:9;2263:17;2256:47;2320:78;2393:4;2384:6;2320:78;:::i;:::-;2312:86;;2092:313;;;;:::o;2411:77::-;2448:7;2477:5;2466:16;;2411:77;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:116::-;3744:21;3759:5;3744:21;:::i;:::-;3737:5;3734:32;3724:60;;3780:1;3777;3770:12;3724:60;3674:116;:::o;3796:133::-;3839:5;3877:6;3864:20;3855:29;;3893:30;3917:5;3893:30;:::i;:::-;3796:133;;;;:::o;3935:468::-;4000:6;4008;4057:2;4045:9;4036:7;4032:23;4028:32;4025:119;;;4063:79;;:::i;:::-;4025:119;4183:1;4208:53;4253:7;4244:6;4233:9;4229:22;4208:53;:::i;:::-;4198:63;;4154:117;4310:2;4336:50;4378:7;4369:6;4358:9;4354:22;4336:50;:::i;:::-;4326:60;;4281:115;3935:468;;;;;:::o;4409:118::-;4496:24;4514:5;4496:24;:::i;:::-;4491:3;4484:37;4409:118;;:::o;4533:775::-;4766:4;4804:3;4793:9;4789:19;4781:27;;4818:71;4886:1;4875:9;4871:17;4862:6;4818:71;:::i;:::-;4899:72;4967:2;4956:9;4952:18;4943:6;4899:72;:::i;:::-;4981;5049:2;5038:9;5034:18;5025:6;4981:72;:::i;:::-;5063;5131:2;5120:9;5116:18;5107:6;5063:72;:::i;:::-;5145:73;5213:3;5202:9;5198:19;5189:6;5145:73;:::i;:::-;5228;5296:3;5285:9;5281:19;5272:6;5228:73;:::i;:::-;4533:775;;;;;;;;;:::o;5314:222::-;5407:4;5445:2;5434:9;5430:18;5422:26;;5458:71;5526:1;5515:9;5511:17;5502:6;5458:71;:::i;:::-;5314:222;;;;:::o;5542:117::-;5651:1;5648;5641:12;5665:180;5713:77;5710:1;5703:88;5810:4;5807:1;5800:15;5834:4;5831:1;5824:15;5851:281;5934:27;5956:4;5934:27;:::i;:::-;5926:6;5922:40;6064:6;6052:10;6049:22;6028:18;6016:10;6013:34;6010:62;6007:88;;;6075:18;;:::i;:::-;6007:88;6115:10;6111:2;6104:22;5894:238;5851:281;;:::o;6138:129::-;6172:6;6199:20;;:::i;:::-;6189:30;;6228:33;6256:4;6248:6;6228:33;:::i;:::-;6138:129;;;:::o;6273:311::-;6350:4;6440:18;6432:6;6429:30;6426:56;;;6462:18;;:::i;:::-;6426:56;6512:4;6504:6;6500:17;6492:25;;6572:4;6566;6562:15;6554:23;;6273:311;;;:::o;6590:117::-;6699:1;6696;6689:12;6730:710;6826:5;6851:81;6867:64;6924:6;6867:64;:::i;:::-;6851:81;:::i;:::-;6842:90;;6952:5;6981:6;6974:5;6967:21;7015:4;7008:5;7004:16;6997:23;;7068:4;7060:6;7056:17;7048:6;7044:30;7097:3;7089:6;7086:15;7083:122;;;7116:79;;:::i;:::-;7083:122;7231:6;7214:220;7248:6;7243:3;7240:15;7214:220;;;7323:3;7352:37;7385:3;7373:10;7352:37;:::i;:::-;7347:3;7340:50;7419:4;7414:3;7410:14;7403:21;;7290:144;7274:4;7269:3;7265:14;7258:21;;7214:220;;;7218:21;6832:608;;6730:710;;;;;:::o;7463:370::-;7534:5;7583:3;7576:4;7568:6;7564:17;7560:27;7550:122;;7591:79;;:::i;:::-;7550:122;7708:6;7695:20;7733:94;7823:3;7815:6;7808:4;7800:6;7796:17;7733:94;:::i;:::-;7724:103;;7540:293;7463:370;;;;:::o;7839:539::-;7923:6;7972:2;7960:9;7951:7;7947:23;7943:32;7940:119;;;7978:79;;:::i;:::-;7940:119;8126:1;8115:9;8111:17;8098:31;8156:18;8148:6;8145:30;8142:117;;;8178:79;;:::i;:::-;8142:117;8283:78;8353:7;8344:6;8333:9;8329:22;8283:78;:::i;:::-;8273:88;;8069:302;7839:539;;;;:::o;8384:619::-;8461:6;8469;8477;8526:2;8514:9;8505:7;8501:23;8497:32;8494:119;;;8532:79;;:::i;:::-;8494:119;8652:1;8677:53;8722:7;8713:6;8702:9;8698:22;8677:53;:::i;:::-;8667:63;;8623:117;8779:2;8805:53;8850:7;8841:6;8830:9;8826:22;8805:53;:::i;:::-;8795:63;;8750:118;8907:2;8933:53;8978:7;8969:6;8958:9;8954:22;8933:53;:::i;:::-;8923:63;;8878:118;8384:619;;;;;:::o;9009:329::-;9068:6;9117:2;9105:9;9096:7;9092:23;9088:32;9085:119;;;9123:79;;:::i;:::-;9085:119;9243:1;9268:53;9313:7;9304:6;9293:9;9289:22;9268:53;:::i;:::-;9258:63;;9214:117;9009:329;;;;:::o;9344:430::-;9487:4;9525:2;9514:9;9510:18;9502:26;;9538:65;9600:1;9589:9;9585:17;9576:6;9538:65;:::i;:::-;9613:72;9681:2;9670:9;9666:18;9657:6;9613:72;:::i;:::-;9695;9763:2;9752:9;9748:18;9739:6;9695:72;:::i;:::-;9344:430;;;;;;:::o;9780:86::-;9815:7;9855:4;9848:5;9844:16;9833:27;;9780:86;;;:::o;9872:112::-;9955:22;9971:5;9955:22;:::i;:::-;9950:3;9943:35;9872:112;;:::o;9990:214::-;10079:4;10117:2;10106:9;10102:18;10094:26;;10130:67;10194:1;10183:9;10179:17;10170:6;10130:67;:::i;:::-;9990:214;;;;:::o;10210:406::-;10341:4;10379:2;10368:9;10364:18;10356:26;;10392:65;10454:1;10443:9;10439:17;10430:6;10392:65;:::i;:::-;10467:66;10529:2;10518:9;10514:18;10505:6;10467:66;:::i;:::-;10543;10605:2;10594:9;10590:18;10581:6;10543:66;:::i;:::-;10210:406;;;;;;:::o;10622:118::-;10709:24;10727:5;10709:24;:::i;:::-;10704:3;10697:37;10622:118;;:::o;10746:332::-;10867:4;10905:2;10894:9;10890:18;10882:26;;10918:71;10986:1;10975:9;10971:17;10962:6;10918:71;:::i;:::-;10999:72;11067:2;11056:9;11052:18;11043:6;10999:72;:::i;:::-;10746:332;;;;;:::o;11084:323::-;11140:6;11189:2;11177:9;11168:7;11164:23;11160:32;11157:119;;;11195:79;;:::i;:::-;11157:119;11315:1;11340:50;11382:7;11373:6;11362:9;11358:22;11340:50;:::i;:::-;11330:60;;11286:114;11084:323;;;;:::o;11413:222::-;11506:4;11544:2;11533:9;11529:18;11521:26;;11557:71;11625:1;11614:9;11610:17;11601:6;11557:71;:::i;:::-;11413:222;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:613::-;12195:6;12203;12211;12260:2;12248:9;12239:7;12235:23;12231:32;12228:119;;;12266:79;;:::i;:::-;12228:119;12386:1;12411:50;12453:7;12444:6;12433:9;12429:22;12411:50;:::i;:::-;12401:60;;12357:114;12510:2;12536:53;12581:7;12572:6;12561:9;12557:22;12536:53;:::i;:::-;12526:63;;12481:118;12638:2;12664:53;12709:7;12700:6;12689:9;12685:22;12664:53;:::i;:::-;12654:63;;12609:118;12121:613;;;;;:::o;12740:474::-;12808:6;12816;12865:2;12853:9;12844:7;12840:23;12836:32;12833:119;;;12871:79;;:::i;:::-;12833:119;12991:1;13016:53;13061:7;13052:6;13041:9;13037:22;13016:53;:::i;:::-;13006:63;;12962:117;13118:2;13144:53;13189:7;13180:6;13169:9;13165:22;13144:53;:::i;:::-;13134:63;;13089:118;12740:474;;;;;:::o;13220:182::-;13360:34;13356:1;13348:6;13344:14;13337:58;13220:182;:::o;13408:366::-;13550:3;13571:67;13635:2;13630:3;13571:67;:::i;:::-;13564:74;;13647:93;13736:3;13647:93;:::i;:::-;13765:2;13760:3;13756:12;13749:19;;13408:366;;;:::o;13780:419::-;13946:4;13984:2;13973:9;13969:18;13961:26;;14033:9;14027:4;14023:20;14019:1;14008:9;14004:17;13997:47;14061:131;14187:4;14061:131;:::i;:::-;14053:139;;13780:419;;;:::o;14205:180::-;14253:77;14250:1;14243:88;14350:4;14347:1;14340:15;14374:4;14371:1;14364:15;14391:320;14435:6;14472:1;14466:4;14462:12;14452:22;;14519:1;14513:4;14509:12;14540:18;14530:81;;14596:4;14588:6;14584:17;14574:27;;14530:81;14658:2;14650:6;14647:14;14627:18;14624:38;14621:84;;14677:18;;:::i;:::-;14621:84;14442:269;14391:320;;;:::o;14717:225::-;14857:34;14853:1;14845:6;14841:14;14834:58;14926:8;14921:2;14913:6;14909:15;14902:33;14717:225;:::o;14948:366::-;15090:3;15111:67;15175:2;15170:3;15111:67;:::i;:::-;15104:74;;15187:93;15276:3;15187:93;:::i;:::-;15305:2;15300:3;15296:12;15289:19;;14948:366;;;:::o;15320:419::-;15486:4;15524:2;15513:9;15509:18;15501:26;;15573:9;15567:4;15563:20;15559:1;15548:9;15544:17;15537:47;15601:131;15727:4;15601:131;:::i;:::-;15593:139;;15320:419;;;:::o;15745:180::-;15793:77;15790:1;15783:88;15890:4;15887:1;15880:15;15914:4;15911:1;15904:15;15931:227;16071:34;16067:1;16059:6;16055:14;16048:58;16140:10;16135:2;16127:6;16123:15;16116:35;15931:227;:::o;16164:366::-;16306:3;16327:67;16391:2;16386:3;16327:67;:::i;:::-;16320:74;;16403:93;16492:3;16403:93;:::i;:::-;16521:2;16516:3;16512:12;16505:19;;16164:366;;;:::o;16536:419::-;16702:4;16740:2;16729:9;16725:18;16717:26;;16789:9;16783:4;16779:20;16775:1;16764:9;16760:17;16753:47;16817:131;16943:4;16817:131;:::i;:::-;16809:139;;16536:419;;;:::o;16961:223::-;17101:34;17097:1;17089:6;17085:14;17078:58;17170:6;17165:2;17157:6;17153:15;17146:31;16961:223;:::o;17190:366::-;17332:3;17353:67;17417:2;17412:3;17353:67;:::i;:::-;17346:74;;17429:93;17518:3;17429:93;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17190:366;;;:::o;17562:419::-;17728:4;17766:2;17755:9;17751:18;17743:26;;17815:9;17809:4;17805:20;17801:1;17790:9;17786:17;17779:47;17843:131;17969:4;17843:131;:::i;:::-;17835:139;;17562:419;;;:::o;17987:180::-;18035:77;18032:1;18025:88;18132:4;18129:1;18122:15;18156:4;18153:1;18146:15;18173:410;18213:7;18236:20;18254:1;18236:20;:::i;:::-;18231:25;;18270:20;18288:1;18270:20;:::i;:::-;18265:25;;18325:1;18322;18318:9;18347:30;18365:11;18347:30;:::i;:::-;18336:41;;18526:1;18517:7;18513:15;18510:1;18507:22;18487:1;18480:9;18460:83;18437:139;;18556:18;;:::i;:::-;18437:139;18221:362;18173:410;;;;:::o;18589:180::-;18637:77;18634:1;18627:88;18734:4;18731:1;18724:15;18758:4;18755:1;18748:15;18775:185;18815:1;18832:20;18850:1;18832:20;:::i;:::-;18827:25;;18866:20;18884:1;18866:20;:::i;:::-;18861:25;;18905:1;18895:35;;18910:18;;:::i;:::-;18895:35;18952:1;18949;18945:9;18940:14;;18775:185;;;;:::o;18966:191::-;19006:3;19025:20;19043:1;19025:20;:::i;:::-;19020:25;;19059:20;19077:1;19059:20;:::i;:::-;19054:25;;19102:1;19099;19095:9;19088:16;;19123:3;19120:1;19117:10;19114:36;;;19130:18;;:::i;:::-;19114:36;18966:191;;;;:::o;19163:232::-;19303:34;19299:1;19291:6;19287:14;19280:58;19372:15;19367:2;19359:6;19355:15;19348:40;19163:232;:::o;19401:366::-;19543:3;19564:67;19628:2;19623:3;19564:67;:::i;:::-;19557:74;;19640:93;19729:3;19640:93;:::i;:::-;19758:2;19753:3;19749:12;19742:19;;19401:366;;;:::o;19773:419::-;19939:4;19977:2;19966:9;19962:18;19954:26;;20026:9;20020:4;20016:20;20012:1;20001:9;19997:17;19990:47;20054:131;20180:4;20054:131;:::i;:::-;20046:139;;19773:419;;;:::o;20198:182::-;20338:34;20334:1;20326:6;20322:14;20315:58;20198:182;:::o;20386:366::-;20528:3;20549:67;20613:2;20608:3;20549:67;:::i;:::-;20542:74;;20625:93;20714:3;20625:93;:::i;:::-;20743:2;20738:3;20734:12;20727:19;;20386:366;;;:::o;20758:419::-;20924:4;20962:2;20951:9;20947:18;20939:26;;21011:9;21005:4;21001:20;20997:1;20986:9;20982:17;20975:47;21039:131;21165:4;21039:131;:::i;:::-;21031:139;;20758:419;;;:::o;21183:228::-;21323:34;21319:1;21311:6;21307:14;21300:58;21392:11;21387:2;21379:6;21375:15;21368:36;21183:228;:::o;21417:366::-;21559:3;21580:67;21644:2;21639:3;21580:67;:::i;:::-;21573:74;;21656:93;21745:3;21656:93;:::i;:::-;21774:2;21769:3;21765:12;21758:19;;21417:366;;;:::o;21789:419::-;21955:4;21993:2;21982:9;21978:18;21970:26;;22042:9;22036:4;22032:20;22028:1;22017:9;22013:17;22006:47;22070:131;22196:4;22070:131;:::i;:::-;22062:139;;21789:419;;;:::o;22214:442::-;22363:4;22401:2;22390:9;22386:18;22378:26;;22414:71;22482:1;22471:9;22467:17;22458:6;22414:71;:::i;:::-;22495:72;22563:2;22552:9;22548:18;22539:6;22495:72;:::i;:::-;22577;22645:2;22634:9;22630:18;22621:6;22577:72;:::i;:::-;22214:442;;;;;;:::o;22662:224::-;22802:34;22798:1;22790:6;22786:14;22779:58;22871:7;22866:2;22858:6;22854:15;22847:32;22662:224;:::o;22892:366::-;23034:3;23055:67;23119:2;23114:3;23055:67;:::i;:::-;23048:74;;23131:93;23220:3;23131:93;:::i;:::-;23249:2;23244:3;23240:12;23233:19;;22892:366;;;:::o;23264:419::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:227::-;23829:34;23825:1;23817:6;23813:14;23806:58;23898:10;23893:2;23885:6;23881:15;23874:35;23689:227;:::o;23922:366::-;24064:3;24085:67;24149:2;24144:3;24085:67;:::i;:::-;24078:74;;24161:93;24250:3;24161:93;:::i;:::-;24279:2;24274:3;24270:12;24263:19;;23922:366;;;:::o;24294:419::-;24460:4;24498:2;24487:9;24483:18;24475:26;;24547:9;24541:4;24537:20;24533:1;24522:9;24518:17;24511:47;24575:131;24701:4;24575:131;:::i;:::-;24567:139;;24294:419;;;:::o;24719:239::-;24859:34;24855:1;24847:6;24843:14;24836:58;24928:22;24923:2;24915:6;24911:15;24904:47;24719:239;:::o;24964:366::-;25106:3;25127:67;25191:2;25186:3;25127:67;:::i;:::-;25120:74;;25203:93;25292:3;25203:93;:::i;:::-;25321:2;25316:3;25312:12;25305:19;;24964:366;;;:::o;25336:419::-;25502:4;25540:2;25529:9;25525:18;25517:26;;25589:9;25583:4;25579:20;25575:1;25564:9;25560:17;25553:47;25617:131;25743:4;25617:131;:::i;:::-;25609:139;;25336:419;;;:::o;25761:229::-;25901:34;25897:1;25889:6;25885:14;25878:58;25970:12;25965:2;25957:6;25953:15;25946:37;25761:229;:::o;25996:366::-;26138:3;26159:67;26223:2;26218:3;26159:67;:::i;:::-;26152:74;;26235:93;26324:3;26235:93;:::i;:::-;26353:2;26348:3;26344:12;26337:19;;25996:366;;;:::o;26368:419::-;26534:4;26572:2;26561:9;26557:18;26549:26;;26621:9;26615:4;26611:20;26607:1;26596:9;26592:17;26585:47;26649:131;26775:4;26649:131;:::i;:::-;26641:139;;26368:419;;;:::o;26793:244::-;26933:34;26929:1;26921:6;26917:14;26910:58;27002:27;26997:2;26989:6;26985:15;26978:52;26793:244;:::o;27043:366::-;27185:3;27206:67;27270:2;27265:3;27206:67;:::i;:::-;27199:74;;27282:93;27371:3;27282:93;:::i;:::-;27400:2;27395:3;27391:12;27384:19;;27043:366;;;:::o;27415:419::-;27581:4;27619:2;27608:9;27604:18;27596:26;;27668:9;27662:4;27658:20;27654:1;27643:9;27639:17;27632:47;27696:131;27822:4;27696:131;:::i;:::-;27688:139;;27415:419;;;:::o;27840:223::-;27980:34;27976:1;27968:6;27964:14;27957:58;28049:6;28044:2;28036:6;28032:15;28025:31;27840:223;:::o;28069:366::-;28211:3;28232:67;28296:2;28291:3;28232:67;:::i;:::-;28225:74;;28308:93;28397:3;28308:93;:::i;:::-;28426:2;28421:3;28417:12;28410:19;;28069:366;;;:::o;28441:419::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:221::-;29006:34;29002:1;28994:6;28990:14;28983:58;29075:4;29070:2;29062:6;29058:15;29051:29;28866:221;:::o;29093:366::-;29235:3;29256:67;29320:2;29315:3;29256:67;:::i;:::-;29249:74;;29332:93;29421:3;29332:93;:::i;:::-;29450:2;29445:3;29441:12;29434:19;;29093:366;;;:::o;29465:419::-;29631:4;29669:2;29658:9;29654:18;29646:26;;29718:9;29712:4;29708:20;29704:1;29693:9;29689:17;29682:47;29746:131;29872:4;29746:131;:::i;:::-;29738:139;;29465:419;;;:::o;29890:224::-;30030:34;30026:1;30018:6;30014:14;30007:58;30099:7;30094:2;30086:6;30082:15;30075:32;29890:224;:::o;30120:366::-;30262:3;30283:67;30347:2;30342:3;30283:67;:::i;:::-;30276:74;;30359:93;30448:3;30359:93;:::i;:::-;30477:2;30472:3;30468:12;30461:19;;30120:366;;;:::o;30492:419::-;30658:4;30696:2;30685:9;30681:18;30673:26;;30745:9;30739:4;30735:20;30731:1;30720:9;30716:17;30709:47;30773:131;30899:4;30773:131;:::i;:::-;30765:139;;30492:419;;;:::o;30917:222::-;31057:34;31053:1;31045:6;31041:14;31034:58;31126:5;31121:2;31113:6;31109:15;31102:30;30917:222;:::o;31145:366::-;31287:3;31308:67;31372:2;31367:3;31308:67;:::i;:::-;31301:74;;31384:93;31473:3;31384:93;:::i;:::-;31502:2;31497:3;31493:12;31486:19;;31145:366;;;:::o;31517:419::-;31683:4;31721:2;31710:9;31706:18;31698:26;;31770:9;31764:4;31760:20;31756:1;31745:9;31741:17;31734:47;31798:131;31924:4;31798:131;:::i;:::-;31790:139;;31517:419;;;:::o;31942:221::-;32082:34;32078:1;32070:6;32066:14;32059:58;32151:4;32146:2;32138:6;32134:15;32127:29;31942:221;:::o;32169:366::-;32311:3;32332:67;32396:2;32391:3;32332:67;:::i;:::-;32325:74;;32408:93;32497:3;32408:93;:::i;:::-;32526:2;32521:3;32517:12;32510:19;;32169:366;;;:::o;32541:419::-;32707:4;32745:2;32734:9;32730:18;32722:26;;32794:9;32788:4;32784:20;32780:1;32769:9;32765:17;32758:47;32822:131;32948:4;32822:131;:::i;:::-;32814:139;;32541:419;;;:::o;32966:233::-;33005:3;33028:24;33046:5;33028:24;:::i;:::-;33019:33;;33074:66;33067:5;33064:77;33061:103;;33144:18;;:::i;:::-;33061:103;33191:1;33184:5;33180:13;33173:20;;32966:233;;;:::o;33205:225::-;33345:34;33341:1;33333:6;33329:14;33322:58;33414:8;33409:2;33401:6;33397:15;33390:33;33205:225;:::o;33436:366::-;33578:3;33599:67;33663:2;33658:3;33599:67;:::i;:::-;33592:74;;33675:93;33764:3;33675:93;:::i;:::-;33793:2;33788:3;33784:12;33777:19;;33436:366;;;:::o;33808:419::-;33974:4;34012:2;34001:9;33997:18;33989:26;;34061:9;34055:4;34051:20;34047:1;34036:9;34032:17;34025:47;34089:131;34215:4;34089:131;:::i;:::-;34081:139;;33808:419;;;:::o;34233:169::-;34373:21;34369:1;34361:6;34357:14;34350:45;34233:169;:::o;34408:366::-;34550:3;34571:67;34635:2;34630:3;34571:67;:::i;:::-;34564:74;;34647:93;34736:3;34647:93;:::i;:::-;34765:2;34760:3;34756:12;34749:19;;34408:366;;;:::o;34780:419::-;34946:4;34984:2;34973:9;34969:18;34961:26;;35033:9;35027:4;35023:20;35019:1;35008:9;35004:17;34997:47;35061:131;35187:4;35061:131;:::i;:::-;35053:139;;34780:419;;;:::o;35205:226::-;35345:34;35341:1;35333:6;35329:14;35322:58;35414:9;35409:2;35401:6;35397:15;35390:34;35205:226;:::o;35437:366::-;35579:3;35600:67;35664:2;35659:3;35600:67;:::i;:::-;35593:74;;35676:93;35765:3;35676:93;:::i;:::-;35794:2;35789:3;35785:12;35778:19;;35437:366;;;:::o;35809:419::-;35975:4;36013:2;36002:9;35998:18;35990:26;;36062:9;36056:4;36052:20;36048:1;36037:9;36033:17;36026:47;36090:131;36216:4;36090:131;:::i;:::-;36082:139;;35809:419;;;:::o;36234:194::-;36274:4;36294:20;36312:1;36294:20;:::i;:::-;36289:25;;36328:20;36346:1;36328:20;:::i;:::-;36323:25;;36372:1;36369;36365:9;36357:17;;36396:1;36390:4;36387:11;36384:37;;;36401:18;;:::i;:::-;36384:37;36234:194;;;;:::o;36434:225::-;36574:34;36570:1;36562:6;36558:14;36551:58;36643:8;36638:2;36630:6;36626:15;36619:33;36434:225;:::o;36665:366::-;36807:3;36828:67;36892:2;36887:3;36828:67;:::i;:::-;36821:74;;36904:93;36993:3;36904:93;:::i;:::-;37022:2;37017:3;37013:12;37006:19;;36665:366;;;:::o;37037:419::-;37203:4;37241:2;37230:9;37226:18;37218:26;;37290:9;37284:4;37280:20;37276:1;37265:9;37261:17;37254:47;37318:131;37444:4;37318:131;:::i;:::-;37310:139;;37037:419;;;:::o;37462:147::-;37563:11;37600:3;37585:18;;37462:147;;;;:::o;37615:114::-;;:::o;37735:398::-;37894:3;37915:83;37996:1;37991:3;37915:83;:::i;:::-;37908:90;;38007:93;38096:3;38007:93;:::i;:::-;38125:1;38120:3;38116:11;38109:18;;37735:398;;;:::o;38139:379::-;38323:3;38345:147;38488:3;38345:147;:::i;:::-;38338:154;;38509:3;38502:10;;38139:379;;;:::o;38524:143::-;38581:5;38612:6;38606:13;38597:22;;38628:33;38655:5;38628:33;:::i;:::-;38524:143;;;;:::o;38673:351::-;38743:6;38792:2;38780:9;38771:7;38767:23;38763:32;38760:119;;;38798:79;;:::i;:::-;38760:119;38918:1;38943:64;38999:7;38990:6;38979:9;38975:22;38943:64;:::i;:::-;38933:74;;38889:128;38673:351;;;;:::o;39030:85::-;39075:7;39104:5;39093:16;;39030:85;;;:::o;39121:60::-;39149:3;39170:5;39163:12;;39121:60;;;:::o;39187:158::-;39245:9;39278:61;39296:42;39305:32;39331:5;39305:32;:::i;:::-;39296:42;:::i;:::-;39278:61;:::i;:::-;39265:74;;39187:158;;;:::o;39351:147::-;39446:45;39485:5;39446:45;:::i;:::-;39441:3;39434:58;39351:147;;:::o;39504:114::-;39571:6;39605:5;39599:12;39589:22;;39504:114;;;:::o;39624:184::-;39723:11;39757:6;39752:3;39745:19;39797:4;39792:3;39788:14;39773:29;;39624:184;;;;:::o;39814:132::-;39881:4;39904:3;39896:11;;39934:4;39929:3;39925:14;39917:22;;39814:132;;;:::o;39952:108::-;40029:24;40047:5;40029:24;:::i;:::-;40024:3;40017:37;39952:108;;:::o;40066:179::-;40135:10;40156:46;40198:3;40190:6;40156:46;:::i;:::-;40234:4;40229:3;40225:14;40211:28;;40066:179;;;;:::o;40251:113::-;40321:4;40353;40348:3;40344:14;40336:22;;40251:113;;;:::o;40400:732::-;40519:3;40548:54;40596:5;40548:54;:::i;:::-;40618:86;40697:6;40692:3;40618:86;:::i;:::-;40611:93;;40728:56;40778:5;40728:56;:::i;:::-;40807:7;40838:1;40823:284;40848:6;40845:1;40842:13;40823:284;;;40924:6;40918:13;40951:63;41010:3;40995:13;40951:63;:::i;:::-;40944:70;;41037:60;41090:6;41037:60;:::i;:::-;41027:70;;40883:224;40870:1;40867;40863:9;40858:14;;40823:284;;;40827:14;41123:3;41116:10;;40524:608;;;40400:732;;;;:::o;41138:831::-;41401:4;41439:3;41428:9;41424:19;41416:27;;41453:71;41521:1;41510:9;41506:17;41497:6;41453:71;:::i;:::-;41534:80;41610:2;41599:9;41595:18;41586:6;41534:80;:::i;:::-;41661:9;41655:4;41651:20;41646:2;41635:9;41631:18;41624:48;41689:108;41792:4;41783:6;41689:108;:::i;:::-;41681:116;;41807:72;41875:2;41864:9;41860:18;41851:6;41807:72;:::i;:::-;41889:73;41957:3;41946:9;41942:19;41933:6;41889:73;:::i;:::-;41138:831;;;;;;;;:::o
Swarm Source
ipfs://1e0a0b587e5bb36be851e75169b99d28129c0584b5b53240d6a0382fe6b6e3e1
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.