ERC-20
Overview
Max Total Supply
952,596,380.969675346442071838 3AC
Holders
366
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ThreeArrowsCapital
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) // pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 ); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.0; // import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ 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}. * * 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 default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0)); require(to != address(0)); uint256 fromBalance = _balances[from]; require(fromBalance >= amount); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); } function _mint(address to, uint256 amount) internal virtual { _totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { _balances[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { _balances[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { _totalSupply -= amount; } emit Transfer(from, 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 { _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount); unchecked { _approve(owner, spender, currentAllowance - amount); } } } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH(address token,uint256 amountTokenDesired,uint256 amountTokenMin,uint256 amountETHMin,address to,uint256 deadline) external payable returns (uint256 amountToken,uint256 amountETH,uint256 liquidity); function removeLiquidityETH(address token,uint liquidity,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external returns (uint amountToken, uint amountETH); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } library FixedPoint { // range: [0, 2**112 - 1] // resolution: 1 / 2**112 struct uq112x112 { uint224 _x; } // range: [0, 2**144 - 1] // resolution: 1 / 2**112 struct uq144x112 { uint _x; } uint8 private constant RESOLUTION = 112; // encode a uint112 as a UQ112x112 function encode(uint112 x) internal pure returns (uq112x112 memory) { return uq112x112(uint224(x) << RESOLUTION); } // encodes a uint144 as a UQ144x112 function encode144(uint144 x) internal pure returns (uq144x112 memory) { return uq144x112(uint256(x) << RESOLUTION); } // divide a UQ112x112 by a uint112, returning a UQ112x112 function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) { require(x != 0, 'FixedPoint: DIV_BY_ZERO'); return uq112x112(self._x / uint224(x)); } // multiply a UQ112x112 by a uint, returning a UQ144x112 // reverts on overflow function mul(uq112x112 memory self, uint y) internal pure returns (uq144x112 memory) { uint z; require(y == 0 || (z = uint(self._x) * y) / y == uint(self._x), "FixedPoint: MULTIPLICATION_OVERFLOW"); return uq144x112(z); } // returns a UQ112x112 which represents the ratio of the numerator to the denominator // equivalent to encode(numerator).div(denominator) function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, "FixedPoint: DIV_BY_ZERO"); return uq112x112((uint224(numerator) << RESOLUTION) / denominator); } // decode a UQ112x112 into a uint112 by truncating after the radix point function decode(uq112x112 memory self) internal pure returns (uint112) { return uint112(self._x >> RESOLUTION); } // decode a UQ144x112 into a uint144 by truncating after the radix point function decode144(uq144x112 memory self) internal pure returns (uint144) { return uint144(self._x >> RESOLUTION); } } library UniswapV2Library { function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS'); } } library UniswapV2OracleLibrary { using FixedPoint for *; // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1] function currentBlockTimestamp() internal view returns (uint32) { return uint32(block.timestamp % 2 ** 32); } // produces the cumulative price using counterfactuals to save gas and avoid a call to sync. function currentCumulativePrices( address pair ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) { blockTimestamp = currentBlockTimestamp(); price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast(); price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves(); if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; // addition overflow is desired // counterfactual price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed; // counterfactual price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed; } } } interface IAggregatorV3Interface { function latestAnswer() external view returns (int256); function decimals() external view returns (uint8); } contract ThreeArrowsCapital is ERC20, Ownable { IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0); bool private swapping; address public marketingWallet; address public liquidityWallet; address public deployerWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; bool public twapInitiated = false; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; uint256 private previousFee; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; mapping(address => bool) private automatedMarketMakerPairs; uint256 public creationTime; mapping(address => bool) public hasClaimed; uint256 public constant TARGET_MARKET_CAP = 10_000_000; // $10M mcap address internal constant WETH = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); IAggregatorV3Interface internal constant ethPriceFeed = IAggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); bool public isThisToken0; uint256 public minDeltaTwap = 5 minutes; uint256 public lastCumulativePrice; uint256 public lastUpdateTimestamp; constructor() payable ERC20("ThreeArrowsCapital", "3AC") { creationTime = block.timestamp; uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), address(uniswapV2Router), type(uint256).max); uint256 totalSupply = 1_000_000_000 ether; maxTransactionAmount = (totalSupply); maxWallet = (totalSupply); swapTokensAtAmount = (totalSupply * 1) / 1000; buyMarketingFee = 10; buyLiquidityFee = 5; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = 10; sellLiquidityFee = 5; sellTotalFees = sellMarketingFee + sellLiquidityFee; previousFee = sellTotalFees; marketingWallet = _msgSender(); liquidityWallet = _msgSender(); deployerWallet = _msgSender(); excludeFromFees(_msgSender(), true); excludeFromFees(address(this), true); excludeFromFees(deadAddress, true); excludeFromFees(marketingWallet, true); excludeFromFees(liquidityWallet, true); excludeFromMaxTransaction(_msgSender(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(deadAddress, true); excludeFromMaxTransaction(address(uniswapV2Router), true); excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(liquidityWallet, true); _mint(address(this), (totalSupply * 100) / 100); } receive() external payable {} function burn(uint256 amount) external { _burn(msg.sender, amount); } function openTrading() external onlyOwner { require(!tradingActive); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Pair), type(uint256).max); IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, address(this), block.timestamp ); tradingActive = true; swapEnabled = true; twapInitiated = true; } function initTwap() external onlyOwner { (uint256 price0Cumulative, uint256 price1Cumulative, uint32 blockTimestamp) = UniswapV2OracleLibrary.currentCumulativePrices(uniswapV2Pair); uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; lastUpdateTimestamp = blockTimestamp; lastCumulativePrice = priceCumulative; (address token0, ) = UniswapV2Library.sortTokens(address(this), address(WETH)); isThisToken0 = (token0 == address(this)); } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require(newAmount >= (totalSupply() * 1) / 100000); require(newAmount <= (totalSupply() * 5) / 1000); swapTokensAtAmount = newAmount; return true; } function updateMaxWalletAndTxnAmount( uint256 newTxnNum, uint256 newMaxWalletNum ) external onlyOwner { require(newTxnNum >= ((totalSupply() * 5) / 1000)); require(newMaxWalletNum >= ((totalSupply() * 5) / 1000)); maxWallet = newMaxWalletNum; maxTransactionAmount = newTxnNum; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _marketingFee, uint256 _liquidityFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 15); } function updateSellFees( uint256 _marketingFee, uint256 _liquidityFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; previousFee = sellTotalFees; require(sellTotalFees <= 15); } function toggleTwap() external { require(msg.sender == deployerWallet); twapInitiated = !twapInitiated; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function withdrawStuckETH() public { require(msg.sender == deployerWallet); bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function withdrawStuckTokens(address tkn) public { require(msg.sender == deployerWallet); require(block.timestamp > creationTime + 60 days); require(IERC20(tkn).balanceOf(address(this)) > 0); uint256 amount = IERC20(tkn).balanceOf(address(this)); IERC20(tkn).transfer(msg.sender, amount); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0)); require(to != address(0)); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != deadAddress && !swapping ) { if (!tradingActive) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to]); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require(amount <= maxTransactionAmount); require(amount + balanceOf(to) <= maxWallet); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require(amount <= maxTransactionAmount); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount * sellTotalFees / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * buyTotalFees / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } if (twapInitiated) { _updateTwap(); } super._transfer(from, to, amount); sellTotalFees = previousFee; } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidityWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance - initialETHBalance; uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap; uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } // TWAP things function _updateTwap() internal { (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = UniswapV2OracleLibrary.currentCumulativePrices(uniswapV2Pair); uint256 timeElapsed = blockTimestamp - lastUpdateTimestamp; if (timeElapsed > minDeltaTwap) { uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; lastCumulativePrice = priceCumulative; lastUpdateTimestamp = blockTimestamp; } } function getCurrentTwap() public view returns (uint256) { (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = UniswapV2OracleLibrary.currentCumulativePrices(uniswapV2Pair); uint256 timeElapsed = blockTimestamp - lastUpdateTimestamp; uint256 priceCumulative = isThisToken0 ? price1Cumulative : price0Cumulative; FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112( uint224((priceCumulative - lastCumulativePrice) / timeElapsed) ); return FixedPoint.decode144(FixedPoint.mul(priceAverage, 1 ether)); } function getEthPrice() public view returns (int) { return ethPriceFeed.latestAnswer(); // 8 decs adj } function getTokenPriceInUSD() public view returns (uint256) { return (1e18 * uint256(getEthPrice())) / getCurrentTwap(); // 8 decs adj } function getMarketCap() public view returns (uint256) { uint256 currentTwap = getTokenPriceInUSD(); return totalSupply() * currentTwap / 1e18 / 1e8; } // When the target market cap is reached, or the time limit is met, all liquidity - which has had 75% of all taxes added to it // will be unlocked, and claimable by holders of the 3AC token. function removeLiquidityAndDistributeETH() public { require(getMarketCap() >= TARGET_MARKET_CAP || (block.timestamp > creationTime + 60 days), "Market cap not reached"); uint256 liquidity = IERC20(uniswapV2Pair).balanceOf(address(this)); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), liquidity); uniswapV2Router.removeLiquidityETH( address(this), liquidity, 0, 0, address(this), block.timestamp ); } function claimETH() public { require(msg.sender == tx.origin, "!ca"); require(hasClaimed[msg.sender] == false, "Already claimed"); uint256 userBalance = balanceOf(msg.sender); require(userBalance > 0, "No tokens held"); uint256 totalSupply = totalSupply(); uint256 userShare = address(this).balance * userBalance / totalSupply; _burn(msg.sender, userBalance); hasClaimed[msg.sender] = true; (bool success, ) = msg.sender.call{value: userShare}(""); require(success, "ETH transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TARGET_MARKET_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPriceInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"initTwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isThisToken0","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCumulativePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDeltaTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityAndDistributeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleTwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"twapInitiated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff02191690831515021790555061012c601d556040518060400160405280601281526020017f54687265654172726f77734361706974616c00000000000000000000000000008152506040518060400160405280600381526020017f33414300000000000000000000000000000000000000000000000000000000008152508160039081620000d8919062000b65565b508060049081620000ea919062000b65565b5050506200010d62000101620004cc60201b60201c565b620004d460201b60201c565b42601a81905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000191306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200059a60201b60201c565b60006b033b2e3c9fd0803ce8000000905080600a8190555080600c819055506103e8600182620001c2919062000c7b565b620001ce919062000cf5565b600b81905550600a600f819055506005601081905550601054600f54620001f6919062000d2d565b600e81905550600a60128190555060056013819055506013546012546200021e919062000d2d565b6011819055506011546016819055506200023d620004cc60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028d620004cc60201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002dd620004cc60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200033f62000331620004cc60201b60201c565b60016200068760201b60201c565b620003523060016200068760201b60201c565b62000366600060016200068760201b60201c565b6200039b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068760201b60201c565b620003d0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068760201b60201c565b620003f2620003e4620004cc60201b60201c565b6001620006f260201b60201c565b62000405306001620006f260201b60201c565b6200041960006001620006f260201b60201c565b6200042e6080516001620006f260201b60201c565b62000463600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f260201b60201c565b62000498600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f260201b60201c565b620004c53060648084620004ad919062000c7b565b620004b9919062000cf5565b6200075d60201b60201c565b5062000e19565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200067a919062000d79565b60405180910390a3505050565b620006976200083060201b60201c565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620007026200083060201b60201c565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b806002600082825462000771919062000d2d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000824919062000d79565b60405180910390a35050565b62000840620004cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000866620008c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b69062000df7565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200096d57607f821691505b60208210810362000983576200098262000925565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009ae565b620009f98683620009ae565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a4662000a4062000a3a8462000a11565b62000a1b565b62000a11565b9050919050565b6000819050919050565b62000a628362000a25565b62000a7a62000a718262000a4d565b848454620009bb565b825550505050565b600090565b62000a9162000a82565b62000a9e81848462000a57565b505050565b5b8181101562000ac65762000aba60008262000a87565b60018101905062000aa4565b5050565b601f82111562000b155762000adf8162000989565b62000aea846200099e565b8101602085101562000afa578190505b62000b1262000b09856200099e565b83018262000aa3565b50505b505050565b600082821c905092915050565b600062000b3a6000198460080262000b1a565b1980831691505092915050565b600062000b55838362000b27565b9150826002028217905092915050565b62000b7082620008eb565b67ffffffffffffffff81111562000b8c5762000b8b620008f6565b5b62000b98825462000954565b62000ba582828562000aca565b600060209050601f83116001811462000bdd576000841562000bc8578287015190505b62000bd4858262000b47565b86555062000c44565b601f19841662000bed8662000989565b60005b8281101562000c175784890151825560018201915060208501945060208101905062000bf0565b8683101562000c37578489015162000c33601f89168262000b27565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c888262000a11565b915062000c958362000a11565b925082820262000ca58162000a11565b9150828204841483151762000cbf5762000cbe62000c4c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d028262000a11565b915062000d0f8362000a11565b92508262000d225762000d2162000cc6565b5b828204905092915050565b600062000d3a8262000a11565b915062000d478362000a11565b925082820190508082111562000d625762000d6162000c4c565b5b92915050565b62000d738162000a11565b82525050565b600060208201905062000d90600083018462000d68565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ddf60208362000d96565b915062000dec8262000da7565b602082019050919050565b6000602082019050818103600083015262000e128162000dd0565b9050919050565b60805161506c62000e8260003960008181610f9c0152818161101f015281816110fa01528181611c2901528181611cd401528181611e8e01528181611f8b01528181613b9101528181613c7201528181613c9901528181613d350152613d5c015261506c6000f3fe6080604052600436106103855760003560e01c806375f0a874116101d1578063c024666811610102578063d85ba063116100a0578063f2fde38b1161006f578063f2fde38b14610cd1578063f5648a4f14610cfa578063f637434214610d11578063f8b45b0514610d3c5761038c565b8063d85ba06314610c13578063dd62ed3e14610c3e578063e2f4560514610c7b578063f11a24d314610ca65761038c565b8063cb963728116100dc578063cb96372814610b57578063d257b34f14610b80578063d469801614610bbd578063d8270dce14610be85761038c565b8063c024666814610aec578063c8c8ebe414610b15578063c9567bf914610b405761038c565b8063a457c2d71161016f578063aaf3a69611610149578063aaf3a69614610a54578063ab4d125f14610a7f578063b2fb13c214610aaa578063bbc0c74214610ac15761038c565b8063a457c2d7146109af578063a8766bc1146109ec578063a9059cbb14610a175761038c565b806390825c28116101ab57806390825c2814610905578063921369131461093057806395d89b411461095b57806396188399146109865761038c565b806375f0a874146108845780637bce5a04146108af5780638da5cb5b146108da5761038c565b806339509351116102b6578063672729991161025457806370a082311161022357806370a08231146107ca578063715018a61461080757806373b2e80e1461081e5780637571336a1461085b5761038c565b8063672729991461073257806367c9b017146107495780636a486a8e146107745780636ddd17131461079f5761038c565b806349bd5a5e1161029057806349bd5a5e146106765780634fbee193146106a15780635d60c7be146106de57806366ca9b83146107095761038c565b806339509351146105e557806342966c68146106225780634539c4231461064b5761038c565b80631694505e1161032357806323b872dd116102fd57806323b872dd1461052757806327c8f83514610564578063313ce5671461058f57806337bc863c146105ba5761038c565b80631694505e146104ba57806318160ddd146104e557806319f94c94146105105761038c565b8063082962f31161035f578063082962f31461041057806308cad93614610427578063095ea7b31461045257806314bcec9f1461048f5761038c565b806302dbd8f814610391578063047378b0146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613eaa565b610d67565b005b3480156103c657600080fd5b506103cf610db0565b6040516103dc9190613f05565b60405180910390f35b3480156103f157600080fd5b506103fa610dc3565b6040516104079190613fb0565b60405180910390f35b34801561041c57600080fd5b50610425610e55565b005b34801561043357600080fd5b5061043c6110c8565b6040516104499190613fe1565b60405180910390f35b34801561045e57600080fd5b506104796004803603810190610474919061405a565b6110cf565b6040516104869190613f05565b60405180910390f35b34801561049b57600080fd5b506104a46110f2565b6040516104b19190613fe1565b60405180910390f35b3480156104c657600080fd5b506104cf6110f8565b6040516104dc91906140f9565b60405180910390f35b3480156104f157600080fd5b506104fa61111c565b6040516105079190613fe1565b60405180910390f35b34801561051c57600080fd5b50610525611126565b005b34801561053357600080fd5b5061054e60048036038101906105499190614114565b61120a565b60405161055b9190613f05565b60405180910390f35b34801561057057600080fd5b50610579611239565b6040516105869190614176565b60405180910390f35b34801561059b57600080fd5b506105a461123e565b6040516105b191906141ad565b60405180910390f35b3480156105c657600080fd5b506105cf611247565b6040516105dc9190613fe1565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061405a565b61124d565b6040516106199190613f05565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906141c8565b611284565b005b34801561065757600080fd5b50610660611291565b60405161066d9190613fe1565b60405180910390f35b34801561068257600080fd5b5061068b611382565b6040516106989190614176565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906141f5565b6113a8565b6040516106d59190613f05565b60405180910390f35b3480156106ea57600080fd5b506106f36113fe565b6040516107009190614176565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613eaa565b611424565b005b34801561073e57600080fd5b50610747611464565b005b34801561075557600080fd5b5061075e6116f0565b60405161076b919061423b565b60405180910390f35b34801561078057600080fd5b5061078961177a565b6040516107969190613fe1565b60405180910390f35b3480156107ab57600080fd5b506107b4611780565b6040516107c19190613f05565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906141f5565b611793565b6040516107fe9190613fe1565b60405180910390f35b34801561081357600080fd5b5061081c6117db565b005b34801561082a57600080fd5b50610845600480360381019061084091906141f5565b6117ef565b6040516108529190613f05565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190614282565b61180f565b005b34801561089057600080fd5b50610899611872565b6040516108a69190614176565b60405180910390f35b3480156108bb57600080fd5b506108c4611898565b6040516108d19190613fe1565b60405180910390f35b3480156108e657600080fd5b506108ef61189e565b6040516108fc9190614176565b60405180910390f35b34801561091157600080fd5b5061091a6118c8565b6040516109279190613fe1565b60405180910390f35b34801561093c57600080fd5b50610945611910565b6040516109529190613fe1565b60405180910390f35b34801561096757600080fd5b50610970611916565b60405161097d9190613fb0565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613eaa565b6119a8565b005b3480156109bb57600080fd5b506109d660048036038101906109d1919061405a565b611a1c565b6040516109e39190613f05565b60405180910390f35b3480156109f857600080fd5b50610a01611a93565b604051610a0e9190613fe1565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061405a565b611ac7565b604051610a4b9190613f05565b60405180910390f35b348015610a6057600080fd5b50610a69611aea565b604051610a769190613f05565b60405180910390f35b348015610a8b57600080fd5b50610a94611afd565b604051610aa19190613fe1565b60405180910390f35b348015610ab657600080fd5b50610abf611b03565b005b348015610acd57600080fd5b50610ad6611b89565b604051610ae39190613f05565b60405180910390f35b348015610af857600080fd5b50610b136004803603810190610b0e9190614282565b611b9c565b005b348015610b2157600080fd5b50610b2a611bff565b604051610b379190613fe1565b60405180910390f35b348015610b4c57600080fd5b50610b55611c05565b005b348015610b6357600080fd5b50610b7e6004803603810190610b7991906141f5565b61208f565b005b348015610b8c57600080fd5b50610ba76004803603810190610ba291906141c8565b61228c565b604051610bb49190613f05565b60405180910390f35b348015610bc957600080fd5b50610bd2612301565b604051610bdf9190614176565b60405180910390f35b348015610bf457600080fd5b50610bfd612327565b604051610c0a9190613fe1565b60405180910390f35b348015610c1f57600080fd5b50610c2861232d565b604051610c359190613fe1565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c6091906142c2565b612333565b604051610c729190613fe1565b60405180910390f35b348015610c8757600080fd5b50610c906123ba565b604051610c9d9190613fe1565b60405180910390f35b348015610cb257600080fd5b50610cbb6123c0565b604051610cc89190613fe1565b60405180910390f35b348015610cdd57600080fd5b50610cf86004803603810190610cf391906141f5565b6123c6565b005b348015610d0657600080fd5b50610d0f612449565b005b348015610d1d57600080fd5b50610d26612514565b604051610d339190613fe1565b60405180910390f35b348015610d4857600080fd5b50610d5161251a565b604051610d5e9190613fe1565b60405180910390f35b610d6f612520565b8160128190555080601381905550601354601254610d8d9190614331565b601181905550601154601681905550600f6011541115610dac57600080fd5b5050565b600d60029054906101000a900460ff1681565b606060038054610dd290614394565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90614394565b8015610e4b5780601f10610e2057610100808354040283529160200191610e4b565b820191906000526020600020905b815481529060010190602001808311610e2e57829003601f168201915b5050505050905090565b62989680610e616118c8565b101580610e7d5750624f1a00601a54610e7a9190614331565b42115b610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614411565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f199190614176565b602060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190614446565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401610fd9929190614473565b6020604051808303816000875af1158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c91906144b1565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166302751cec308360008030426040518763ffffffff1660e01b815260040161108196959493929190614519565b60408051808303816000875af115801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c3919061457a565b505050565b6298968081565b6000806110da61259e565b90506110e78185856125a6565b600191505092915050565b601f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61112e612520565b600080600061115e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601c60009054906101000a900460ff166111805783611182565b825b90508163ffffffff16601f8190555080601e8190555060006111b83073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26128bf565b5090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614601c60006101000a81548160ff0219169083151502179055505050505050565b60008061121561259e565b90506112228582856129eb565b61122d858585612a41565b60019150509392505050565b600081565b60006012905090565b601e5481565b60008061125861259e565b905061127981858561126a8589612333565b6112749190614331565b6125a6565b600191505092915050565b61128e3382613324565b50565b6000806000806112c2600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601f548263ffffffff166112de91906145ba565b90506000601c60009054906101000a900460ff166112fc57846112fe565b835b90506000604051806020016040528084601e548561131c91906145ba565b611326919061461d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905061136361135e82670de0b6b3a76400006133f3565b6134be565b71ffffffffffffffffffffffffffffffffffff16965050505050505090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61142c612520565b81600f8190555080601081905550601054600f5461144a9190614331565b600e81905550600f600e54111561146057600080fd5b5050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c99061469a565b60405180910390fd5b60001515601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90614706565b60405180910390fd5b600061157033611793565b9050600081116115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90614772565b60405180910390fd5b60006115bf61111c565b905060008183476115d09190614792565b6115da919061461d565b90506115e63384613324565b6001601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060003373ffffffffffffffffffffffffffffffffffffffff168260405161166490614805565b60006040518083038185875af1925050503d80600081146116a1576040519150601f19603f3d011682016040523d82523d6000602084013e6116a6565b606091505b50509050806116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190614866565b60405180910390fd5b50505050565b6000735f4ec3df9cbd43714fe2740f5e3616155c5b841973ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177591906148b2565b905090565b60115481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e3612520565b6117ed60006134d3565b565b601b6020528060005260406000206000915054906101000a900460ff1681565b611817612520565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806118d3611a93565b90506305f5e100670de0b6b3a7640000826118ec61111c565b6118f69190614792565b611900919061461d565b61190a919061461d565b91505090565b60125481565b60606004805461192590614394565b80601f016020809104026020016040519081016040528092919081815260200182805461195190614394565b801561199e5780601f106119735761010080835404028352916020019161199e565b820191906000526020600020905b81548152906001019060200180831161198157829003601f168201915b5050505050905090565b6119b0612520565b6103e860056119bd61111c565b6119c79190614792565b6119d1919061461d565b8210156119dd57600080fd5b6103e860056119ea61111c565b6119f49190614792565b6119fe919061461d565b811015611a0a57600080fd5b80600c8190555081600a819055505050565b600080611a2761259e565b90506000611a358286612333565b905083811015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614951565b60405180910390fd5b611a8782868684036125a6565b60019250505092915050565b6000611a9d611291565b611aa56116f0565b670de0b6b3a7640000611ab89190614792565b611ac2919061461d565b905090565b600080611ad261259e565b9050611adf818585612a41565b600191505092915050565b601c60009054906101000a900460ff1681565b601d5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b5d57600080fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1681565b611ba4612520565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b611c0d612520565b600d60009054906101000a900460ff1615611c2757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190614986565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190614986565b6040518363ffffffff1660e01b8152600401611d7e9291906149b3565b6020604051808303816000875af1158015611d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc19190614986565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e4e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6125a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611eeb929190614473565b6020604051808303816000875af1158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e91906144b1565b50611f5c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613599565b611f89600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161180f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611fd030611793565b60008030426040518863ffffffff1660e01b8152600401611ff696959493929190614519565b60606040518083038185885af1158015612014573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203991906149dc565b5050506001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120e957600080fd5b624f1a00601a546120fa9190614331565b421161210557600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121409190614176565b602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190614446565b1161218b57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121c69190614176565b602060405180830381865afa1580156121e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122079190614446565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612244929190614473565b6020604051808303816000875af1158015612263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228791906144b1565b505050565b6000612296612520565b620186a060016122a461111c565b6122ae9190614792565b6122b8919061461d565b8210156122c457600080fd5b6103e860056122d161111c565b6122db9190614792565b6122e5919061461d565b8211156122f157600080fd5b81600b8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60105481565b6123ce612520565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614aa1565b60405180910390fd5b612446816134d3565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124a357600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516124c990614805565b60006040518083038185875af1925050503d8060008114612506576040519150601f19603f3d011682016040523d82523d6000602084013e61250b565b606091505b50508091505050565b60135481565b600c5481565b61252861259e565b73ffffffffffffffffffffffffffffffffffffffff1661254661189e565b73ffffffffffffffffffffffffffffffffffffffff161461259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614b0d565b60405180910390fd5b565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126849190613fe1565b60405180910390a3505050565b600080600061269e6135f4565b90508373ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270f9190614446565b92508373ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561275c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127809190614446565b915060008060008673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614baf565b9250925092508363ffffffff168163ffffffff16146128b5576000818561281d9190614c02565b90508063ffffffff16612830848661360c565b600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661285c9190614792565b876128679190614331565b96508063ffffffff1661287a858561360c565b600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166128a69190614792565b866128b19190614331565b9550505b5050509193909250565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614cac565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061296a57828461296d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614d18565b60405180910390fd5b9250929050565b60006129f78484612333565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612a3b5781811015612a2d57600080fd5b612a3a84848484036125a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab357600080fd5b60008103612acc57612ac7838360006136ec565b61331f565b612ad461189e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b425750612b1261189e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bcd5750600660149054906101000a900460ff16155b15612ea257600d60009054906101000a900460ff16612c9157601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c875750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c9057600080fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6f57600a54811115612d4857600080fd5b600c54612d5483611793565b82612d5f9190614331565b1115612d6a57600080fd5b612ea1565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e125750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2b57600a54811115612e2657600080fd5b612ea0565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9f57600c54612e8883611793565b82612e939190614331565b1115612e9e57600080fd5b5b5b5b5b6000612ead30611793565b90506000600b548210159050808015612ed25750600d60019054906101000a900460ff165b8015612eeb5750600660149054906101000a900460ff16155b8015612f415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f975750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fed5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613031576001600660146101000a81548160ff0219169083151502179055506130156138aa565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130e75750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130f157600090505b600081156132e857601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561315457506000601154115b156131e0576064601154866131699190614792565b613173919061461d565b9050601154601354826131869190614792565b613190919061461d565b601560008282546131a19190614331565b92505081905550601154601254826131b99190614792565b6131c3919061461d565b601460008282546131d49190614331565b925050819055506132c4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561323b57506000600e54115b156132c3576064600e54866132509190614792565b61325a919061461d565b9050600e546010548261326d9190614792565b613277919061461d565b601560008282546132889190614331565b92505081905550600e54600f54826132a09190614792565b6132aa919061461d565b601460008282546132bb9190614331565b925050819055505b5b60008111156132d9576132d88730836136ec565b5b80856132e591906145ba565b94505b600d60029054906101000a900460ff161561330657613305613a5e565b5b6133118787876136ec565b601654601181905550505050505b505050565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461337291906145ba565b9250508190555080600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e79190613fe1565b60405180910390a35050565b6133fb613e2b565b600080831480613467575083600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16838486600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166134589190614792565b925082613465919061461d565b145b6134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349d90614daa565b60405180910390fd5b60405180602001604052808281525091505092915050565b6000607060ff168260000151901c9050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000640100000000426136079190614dca565b905090565b613614613e3e565b6000826dffffffffffffffffffffffffffff1611613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90614e47565b60405180910390fd5b6040518060200160405280836dffffffffffffffffffffffffffff16607060ff16866dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16901b6136c39190614e8f565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361372557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361375e57600080fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137ae57600080fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161389c9190613fe1565b60405180910390a350505050565b60006138b530611793565b905060006014546015546138c99190614331565b90506000808314806138db5750600082145b156138e857505050613a5c565b6014600b546138f79190614792565b831115613910576014600b5461390d9190614792565b92505b6000600283601554866139239190614792565b61392d919061461d565b613937919061461d565b90506000818561394791906145ba565b9050600047905061395782613af2565b6000814761396591906145ba565b9050600086601454836139789190614792565b613982919061461d565b90506000818361399291906145ba565b9050600060158190555060006014819055506000861180156139b45750600081115b156139c4576139c38682613d2f565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a0a90614805565b60006040518083038185875af1925050503d8060008114613a47576040519150601f19603f3d011682016040523d82523d6000602084013e613a4c565b606091505b5050809750505050505050505050505b565b6000806000613a8e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601f548263ffffffff16613aaa91906145ba565b9050601d54811115613aec576000601c60009054906101000a900460ff16613ad25784613ad4565b835b905080601e819055508263ffffffff16601f81905550505b50505050565b6000600267ffffffffffffffff811115613b0f57613b0e614ec0565b5b604051908082528060200260200182016040528015613b3d5781602001602082028036833780820191505090505b5090503081600081518110613b5557613b54614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1e9190614986565b81600181518110613c3257613c31614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c97307f0000000000000000000000000000000000000000000000000000000000000000846125a6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf9959493929190614fdc565b600060405180830381600087803b158015613d1357600080fd5b505af1158015613d27573d6000803e3d6000fd5b505050505050565b613d5a307f0000000000000000000000000000000000000000000000000000000000000000846125a6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613de196959493929190614519565b60606040518083038185885af1158015613dff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e2491906149dc565b5050505050565b6040518060200160405280600081525090565b604051806020016040528060007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b6000819050919050565b613e8781613e74565b8114613e9257600080fd5b50565b600081359050613ea481613e7e565b92915050565b60008060408385031215613ec157613ec0613e6f565b5b6000613ecf85828601613e95565b9250506020613ee085828601613e95565b9150509250929050565b60008115159050919050565b613eff81613eea565b82525050565b6000602082019050613f1a6000830184613ef6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f5a578082015181840152602081019050613f3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f8282613f20565b613f8c8185613f2b565b9350613f9c818560208601613f3c565b613fa581613f66565b840191505092915050565b60006020820190508181036000830152613fca8184613f77565b905092915050565b613fdb81613e74565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061402782613ffc565b9050919050565b6140378161401c565b811461404257600080fd5b50565b6000813590506140548161402e565b92915050565b6000806040838503121561407157614070613e6f565b5b600061407f85828601614045565b925050602061409085828601613e95565b9150509250929050565b6000819050919050565b60006140bf6140ba6140b584613ffc565b61409a565b613ffc565b9050919050565b60006140d1826140a4565b9050919050565b60006140e3826140c6565b9050919050565b6140f3816140d8565b82525050565b600060208201905061410e60008301846140ea565b92915050565b60008060006060848603121561412d5761412c613e6f565b5b600061413b86828701614045565b935050602061414c86828701614045565b925050604061415d86828701613e95565b9150509250925092565b6141708161401c565b82525050565b600060208201905061418b6000830184614167565b92915050565b600060ff82169050919050565b6141a781614191565b82525050565b60006020820190506141c2600083018461419e565b92915050565b6000602082840312156141de576141dd613e6f565b5b60006141ec84828501613e95565b91505092915050565b60006020828403121561420b5761420a613e6f565b5b600061421984828501614045565b91505092915050565b6000819050919050565b61423581614222565b82525050565b6000602082019050614250600083018461422c565b92915050565b61425f81613eea565b811461426a57600080fd5b50565b60008135905061427c81614256565b92915050565b6000806040838503121561429957614298613e6f565b5b60006142a785828601614045565b92505060206142b88582860161426d565b9150509250929050565b600080604083850312156142d9576142d8613e6f565b5b60006142e785828601614045565b92505060206142f885828601614045565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061433c82613e74565b915061434783613e74565b925082820190508082111561435f5761435e614302565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ac57607f821691505b6020821081036143bf576143be614365565b5b50919050565b7f4d61726b657420636170206e6f74207265616368656400000000000000000000600082015250565b60006143fb601683613f2b565b9150614406826143c5565b602082019050919050565b6000602082019050818103600083015261442a816143ee565b9050919050565b60008151905061444081613e7e565b92915050565b60006020828403121561445c5761445b613e6f565b5b600061446a84828501614431565b91505092915050565b60006040820190506144886000830185614167565b6144956020830184613fd2565b9392505050565b6000815190506144ab81614256565b92915050565b6000602082840312156144c7576144c6613e6f565b5b60006144d58482850161449c565b91505092915050565b6000819050919050565b60006145036144fe6144f9846144de565b61409a565b613e74565b9050919050565b614513816144e8565b82525050565b600060c08201905061452e6000830189614167565b61453b6020830188613fd2565b614548604083018761450a565b614555606083018661450a565b6145626080830185614167565b61456f60a0830184613fd2565b979650505050505050565b6000806040838503121561459157614590613e6f565b5b600061459f85828601614431565b92505060206145b085828601614431565b9150509250929050565b60006145c582613e74565b91506145d083613e74565b92508282039050818111156145e8576145e7614302565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462882613e74565b915061463383613e74565b925082614643576146426145ee565b5b828204905092915050565b7f2163610000000000000000000000000000000000000000000000000000000000600082015250565b6000614684600383613f2b565b915061468f8261464e565b602082019050919050565b600060208201905081810360008301526146b381614677565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b60006146f0600f83613f2b565b91506146fb826146ba565b602082019050919050565b6000602082019050818103600083015261471f816146e3565b9050919050565b7f4e6f20746f6b656e732068656c64000000000000000000000000000000000000600082015250565b600061475c600e83613f2b565b915061476782614726565b602082019050919050565b6000602082019050818103600083015261478b8161474f565b9050919050565b600061479d82613e74565b91506147a883613e74565b92508282026147b681613e74565b915082820484148315176147cd576147cc614302565b5b5092915050565b600081905092915050565b50565b60006147ef6000836147d4565b91506147fa826147df565b600082019050919050565b6000614810826147e2565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b6000614850601383613f2b565b915061485b8261481a565b602082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b61488f81614222565b811461489a57600080fd5b50565b6000815190506148ac81614886565b92915050565b6000602082840312156148c8576148c7613e6f565b5b60006148d68482850161489d565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061493b602583613f2b565b9150614946826148df565b604082019050919050565b6000602082019050818103600083015261496a8161492e565b9050919050565b6000815190506149808161402e565b92915050565b60006020828403121561499c5761499b613e6f565b5b60006149aa84828501614971565b91505092915050565b60006040820190506149c86000830185614167565b6149d56020830184614167565b9392505050565b6000806000606084860312156149f5576149f4613e6f565b5b6000614a0386828701614431565b9350506020614a1486828701614431565b9250506040614a2586828701614431565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602683613f2b565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af7602083613f2b565b9150614b0282614ac1565b602082019050919050565b60006020820190508181036000830152614b2681614aea565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b614b5081614b2d565b8114614b5b57600080fd5b50565b600081519050614b6d81614b47565b92915050565b600063ffffffff82169050919050565b614b8c81614b73565b8114614b9757600080fd5b50565b600081519050614ba981614b83565b92915050565b600080600060608486031215614bc857614bc7613e6f565b5b6000614bd686828701614b5e565b9350506020614be786828701614b5e565b9250506040614bf886828701614b9a565b9150509250925092565b6000614c0d82614b73565b9150614c1883614b73565b9250828203905063ffffffff811115614c3457614c33614302565b5b92915050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b6000614c96602583613f2b565b9150614ca182614c3a565b604082019050919050565b60006020820190508181036000830152614cc581614c89565b9050919050565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b6000614d02601e83613f2b565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4669786564506f696e743a204d554c5449504c49434154494f4e5f4f5645524660008201527f4c4f570000000000000000000000000000000000000000000000000000000000602082015250565b6000614d94602383613f2b565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582613e74565b9150614de083613e74565b925082614df057614def6145ee565b5b828206905092915050565b7f4669786564506f696e743a204449565f42595f5a45524f000000000000000000600082015250565b6000614e31601783613f2b565b9150614e3c82614dfb565b602082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614e9a82614e67565b9150614ea583614e67565b925082614eb557614eb46145ee565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f538161401c565b82525050565b6000614f658383614f4a565b60208301905092915050565b6000602082019050919050565b6000614f8982614f1e565b614f938185614f29565b9350614f9e83614f3a565b8060005b83811015614fcf578151614fb68882614f59565b9750614fc183614f71565b925050600181019050614fa2565b5085935050505092915050565b600060a082019050614ff16000830188613fd2565b614ffe602083018761450a565b81810360408301526150108186614f7e565b905061501f6060830185614167565b61502c6080830184613fd2565b969550505050505056fea2646970667358221220f13653948786130da53ac2573de14167e81de745481f040931175be7c2caa83564736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103855760003560e01c806375f0a874116101d1578063c024666811610102578063d85ba063116100a0578063f2fde38b1161006f578063f2fde38b14610cd1578063f5648a4f14610cfa578063f637434214610d11578063f8b45b0514610d3c5761038c565b8063d85ba06314610c13578063dd62ed3e14610c3e578063e2f4560514610c7b578063f11a24d314610ca65761038c565b8063cb963728116100dc578063cb96372814610b57578063d257b34f14610b80578063d469801614610bbd578063d8270dce14610be85761038c565b8063c024666814610aec578063c8c8ebe414610b15578063c9567bf914610b405761038c565b8063a457c2d71161016f578063aaf3a69611610149578063aaf3a69614610a54578063ab4d125f14610a7f578063b2fb13c214610aaa578063bbc0c74214610ac15761038c565b8063a457c2d7146109af578063a8766bc1146109ec578063a9059cbb14610a175761038c565b806390825c28116101ab57806390825c2814610905578063921369131461093057806395d89b411461095b57806396188399146109865761038c565b806375f0a874146108845780637bce5a04146108af5780638da5cb5b146108da5761038c565b806339509351116102b6578063672729991161025457806370a082311161022357806370a08231146107ca578063715018a61461080757806373b2e80e1461081e5780637571336a1461085b5761038c565b8063672729991461073257806367c9b017146107495780636a486a8e146107745780636ddd17131461079f5761038c565b806349bd5a5e1161029057806349bd5a5e146106765780634fbee193146106a15780635d60c7be146106de57806366ca9b83146107095761038c565b806339509351146105e557806342966c68146106225780634539c4231461064b5761038c565b80631694505e1161032357806323b872dd116102fd57806323b872dd1461052757806327c8f83514610564578063313ce5671461058f57806337bc863c146105ba5761038c565b80631694505e146104ba57806318160ddd146104e557806319f94c94146105105761038c565b8063082962f31161035f578063082962f31461041057806308cad93614610427578063095ea7b31461045257806314bcec9f1461048f5761038c565b806302dbd8f814610391578063047378b0146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613eaa565b610d67565b005b3480156103c657600080fd5b506103cf610db0565b6040516103dc9190613f05565b60405180910390f35b3480156103f157600080fd5b506103fa610dc3565b6040516104079190613fb0565b60405180910390f35b34801561041c57600080fd5b50610425610e55565b005b34801561043357600080fd5b5061043c6110c8565b6040516104499190613fe1565b60405180910390f35b34801561045e57600080fd5b506104796004803603810190610474919061405a565b6110cf565b6040516104869190613f05565b60405180910390f35b34801561049b57600080fd5b506104a46110f2565b6040516104b19190613fe1565b60405180910390f35b3480156104c657600080fd5b506104cf6110f8565b6040516104dc91906140f9565b60405180910390f35b3480156104f157600080fd5b506104fa61111c565b6040516105079190613fe1565b60405180910390f35b34801561051c57600080fd5b50610525611126565b005b34801561053357600080fd5b5061054e60048036038101906105499190614114565b61120a565b60405161055b9190613f05565b60405180910390f35b34801561057057600080fd5b50610579611239565b6040516105869190614176565b60405180910390f35b34801561059b57600080fd5b506105a461123e565b6040516105b191906141ad565b60405180910390f35b3480156105c657600080fd5b506105cf611247565b6040516105dc9190613fe1565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061405a565b61124d565b6040516106199190613f05565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906141c8565b611284565b005b34801561065757600080fd5b50610660611291565b60405161066d9190613fe1565b60405180910390f35b34801561068257600080fd5b5061068b611382565b6040516106989190614176565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906141f5565b6113a8565b6040516106d59190613f05565b60405180910390f35b3480156106ea57600080fd5b506106f36113fe565b6040516107009190614176565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613eaa565b611424565b005b34801561073e57600080fd5b50610747611464565b005b34801561075557600080fd5b5061075e6116f0565b60405161076b919061423b565b60405180910390f35b34801561078057600080fd5b5061078961177a565b6040516107969190613fe1565b60405180910390f35b3480156107ab57600080fd5b506107b4611780565b6040516107c19190613f05565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906141f5565b611793565b6040516107fe9190613fe1565b60405180910390f35b34801561081357600080fd5b5061081c6117db565b005b34801561082a57600080fd5b50610845600480360381019061084091906141f5565b6117ef565b6040516108529190613f05565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190614282565b61180f565b005b34801561089057600080fd5b50610899611872565b6040516108a69190614176565b60405180910390f35b3480156108bb57600080fd5b506108c4611898565b6040516108d19190613fe1565b60405180910390f35b3480156108e657600080fd5b506108ef61189e565b6040516108fc9190614176565b60405180910390f35b34801561091157600080fd5b5061091a6118c8565b6040516109279190613fe1565b60405180910390f35b34801561093c57600080fd5b50610945611910565b6040516109529190613fe1565b60405180910390f35b34801561096757600080fd5b50610970611916565b60405161097d9190613fb0565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613eaa565b6119a8565b005b3480156109bb57600080fd5b506109d660048036038101906109d1919061405a565b611a1c565b6040516109e39190613f05565b60405180910390f35b3480156109f857600080fd5b50610a01611a93565b604051610a0e9190613fe1565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061405a565b611ac7565b604051610a4b9190613f05565b60405180910390f35b348015610a6057600080fd5b50610a69611aea565b604051610a769190613f05565b60405180910390f35b348015610a8b57600080fd5b50610a94611afd565b604051610aa19190613fe1565b60405180910390f35b348015610ab657600080fd5b50610abf611b03565b005b348015610acd57600080fd5b50610ad6611b89565b604051610ae39190613f05565b60405180910390f35b348015610af857600080fd5b50610b136004803603810190610b0e9190614282565b611b9c565b005b348015610b2157600080fd5b50610b2a611bff565b604051610b379190613fe1565b60405180910390f35b348015610b4c57600080fd5b50610b55611c05565b005b348015610b6357600080fd5b50610b7e6004803603810190610b7991906141f5565b61208f565b005b348015610b8c57600080fd5b50610ba76004803603810190610ba291906141c8565b61228c565b604051610bb49190613f05565b60405180910390f35b348015610bc957600080fd5b50610bd2612301565b604051610bdf9190614176565b60405180910390f35b348015610bf457600080fd5b50610bfd612327565b604051610c0a9190613fe1565b60405180910390f35b348015610c1f57600080fd5b50610c2861232d565b604051610c359190613fe1565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c6091906142c2565b612333565b604051610c729190613fe1565b60405180910390f35b348015610c8757600080fd5b50610c906123ba565b604051610c9d9190613fe1565b60405180910390f35b348015610cb257600080fd5b50610cbb6123c0565b604051610cc89190613fe1565b60405180910390f35b348015610cdd57600080fd5b50610cf86004803603810190610cf391906141f5565b6123c6565b005b348015610d0657600080fd5b50610d0f612449565b005b348015610d1d57600080fd5b50610d26612514565b604051610d339190613fe1565b60405180910390f35b348015610d4857600080fd5b50610d5161251a565b604051610d5e9190613fe1565b60405180910390f35b610d6f612520565b8160128190555080601381905550601354601254610d8d9190614331565b601181905550601154601681905550600f6011541115610dac57600080fd5b5050565b600d60029054906101000a900460ff1681565b606060038054610dd290614394565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90614394565b8015610e4b5780601f10610e2057610100808354040283529160200191610e4b565b820191906000526020600020905b815481529060010190602001808311610e2e57829003601f168201915b5050505050905090565b62989680610e616118c8565b101580610e7d5750624f1a00601a54610e7a9190614331565b42115b610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614411565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f199190614176565b602060405180830381865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190614446565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b8152600401610fd9929190614473565b6020604051808303816000875af1158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101c91906144b1565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff166302751cec308360008030426040518763ffffffff1660e01b815260040161108196959493929190614519565b60408051808303816000875af115801561109f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c3919061457a565b505050565b6298968081565b6000806110da61259e565b90506110e78185856125a6565b600191505092915050565b601f5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61112e612520565b600080600061115e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601c60009054906101000a900460ff166111805783611182565b825b90508163ffffffff16601f8190555080601e8190555060006111b83073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26128bf565b5090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614601c60006101000a81548160ff0219169083151502179055505050505050565b60008061121561259e565b90506112228582856129eb565b61122d858585612a41565b60019150509392505050565b600081565b60006012905090565b601e5481565b60008061125861259e565b905061127981858561126a8589612333565b6112749190614331565b6125a6565b600191505092915050565b61128e3382613324565b50565b6000806000806112c2600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601f548263ffffffff166112de91906145ba565b90506000601c60009054906101000a900460ff166112fc57846112fe565b835b90506000604051806020016040528084601e548561131c91906145ba565b611326919061461d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905061136361135e82670de0b6b3a76400006133f3565b6134be565b71ffffffffffffffffffffffffffffffffffff16965050505050505090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61142c612520565b81600f8190555080601081905550601054600f5461144a9190614331565b600e81905550600f600e54111561146057600080fd5b5050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c99061469a565b60405180910390fd5b60001515601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90614706565b60405180910390fd5b600061157033611793565b9050600081116115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90614772565b60405180910390fd5b60006115bf61111c565b905060008183476115d09190614792565b6115da919061461d565b90506115e63384613324565b6001601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060003373ffffffffffffffffffffffffffffffffffffffff168260405161166490614805565b60006040518083038185875af1925050503d80600081146116a1576040519150601f19603f3d011682016040523d82523d6000602084013e6116a6565b606091505b50509050806116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190614866565b60405180910390fd5b50505050565b6000735f4ec3df9cbd43714fe2740f5e3616155c5b841973ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177591906148b2565b905090565b60115481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117e3612520565b6117ed60006134d3565b565b601b6020528060005260406000206000915054906101000a900460ff1681565b611817612520565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806118d3611a93565b90506305f5e100670de0b6b3a7640000826118ec61111c565b6118f69190614792565b611900919061461d565b61190a919061461d565b91505090565b60125481565b60606004805461192590614394565b80601f016020809104026020016040519081016040528092919081815260200182805461195190614394565b801561199e5780601f106119735761010080835404028352916020019161199e565b820191906000526020600020905b81548152906001019060200180831161198157829003601f168201915b5050505050905090565b6119b0612520565b6103e860056119bd61111c565b6119c79190614792565b6119d1919061461d565b8210156119dd57600080fd5b6103e860056119ea61111c565b6119f49190614792565b6119fe919061461d565b811015611a0a57600080fd5b80600c8190555081600a819055505050565b600080611a2761259e565b90506000611a358286612333565b905083811015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614951565b60405180910390fd5b611a8782868684036125a6565b60019250505092915050565b6000611a9d611291565b611aa56116f0565b670de0b6b3a7640000611ab89190614792565b611ac2919061461d565b905090565b600080611ad261259e565b9050611adf818585612a41565b600191505092915050565b601c60009054906101000a900460ff1681565b601d5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b5d57600080fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b600d60009054906101000a900460ff1681565b611ba4612520565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a5481565b611c0d612520565b600d60009054906101000a900460ff1615611c2757600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190614986565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190614986565b6040518363ffffffff1660e01b8152600401611d7e9291906149b3565b6020604051808303816000875af1158015611d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc19190614986565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e4e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6125a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611eeb929190614473565b6020604051808303816000875af1158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e91906144b1565b50611f5c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613599565b611f89600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161180f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611fd030611793565b60008030426040518863ffffffff1660e01b8152600401611ff696959493929190614519565b60606040518083038185885af1158015612014573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203991906149dc565b5050506001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120e957600080fd5b624f1a00601a546120fa9190614331565b421161210557600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121409190614176565b602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190614446565b1161218b57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121c69190614176565b602060405180830381865afa1580156121e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122079190614446565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612244929190614473565b6020604051808303816000875af1158015612263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228791906144b1565b505050565b6000612296612520565b620186a060016122a461111c565b6122ae9190614792565b6122b8919061461d565b8210156122c457600080fd5b6103e860056122d161111c565b6122db9190614792565b6122e5919061461d565b8211156122f157600080fd5b81600b8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60105481565b6123ce612520565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614aa1565b60405180910390fd5b612446816134d3565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124a357600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516124c990614805565b60006040518083038185875af1925050503d8060008114612506576040519150601f19603f3d011682016040523d82523d6000602084013e61250b565b606091505b50508091505050565b60135481565b600c5481565b61252861259e565b73ffffffffffffffffffffffffffffffffffffffff1661254661189e565b73ffffffffffffffffffffffffffffffffffffffff161461259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614b0d565b60405180910390fd5b565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126849190613fe1565b60405180910390a3505050565b600080600061269e6135f4565b90508373ffffffffffffffffffffffffffffffffffffffff16635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270f9190614446565b92508373ffffffffffffffffffffffffffffffffffffffff16635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561275c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127809190614446565b915060008060008673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614baf565b9250925092508363ffffffff168163ffffffff16146128b5576000818561281d9190614c02565b90508063ffffffff16612830848661360c565b600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661285c9190614792565b876128679190614331565b96508063ffffffff1661287a858561360c565b600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166128a69190614792565b866128b19190614331565b9550505b5050509193909250565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614cac565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061296a57828461296d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614d18565b60405180910390fd5b9250929050565b60006129f78484612333565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612a3b5781811015612a2d57600080fd5b612a3a84848484036125a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab357600080fd5b60008103612acc57612ac7838360006136ec565b61331f565b612ad461189e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b425750612b1261189e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bcd5750600660149054906101000a900460ff16155b15612ea257600d60009054906101000a900460ff16612c9157601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c875750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c9057600080fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6f57600a54811115612d4857600080fd5b600c54612d5483611793565b82612d5f9190614331565b1115612d6a57600080fd5b612ea1565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e125750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2b57600a54811115612e2657600080fd5b612ea0565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9f57600c54612e8883611793565b82612e939190614331565b1115612e9e57600080fd5b5b5b5b5b6000612ead30611793565b90506000600b548210159050808015612ed25750600d60019054906101000a900460ff165b8015612eeb5750600660149054906101000a900460ff16155b8015612f415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f975750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fed5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613031576001600660146101000a81548160ff0219169083151502179055506130156138aa565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130e75750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130f157600090505b600081156132e857601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561315457506000601154115b156131e0576064601154866131699190614792565b613173919061461d565b9050601154601354826131869190614792565b613190919061461d565b601560008282546131a19190614331565b92505081905550601154601254826131b99190614792565b6131c3919061461d565b601460008282546131d49190614331565b925050819055506132c4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561323b57506000600e54115b156132c3576064600e54866132509190614792565b61325a919061461d565b9050600e546010548261326d9190614792565b613277919061461d565b601560008282546132889190614331565b92505081905550600e54600f54826132a09190614792565b6132aa919061461d565b601460008282546132bb9190614331565b925050819055505b5b60008111156132d9576132d88730836136ec565b5b80856132e591906145ba565b94505b600d60029054906101000a900460ff161561330657613305613a5e565b5b6133118787876136ec565b601654601181905550505050505b505050565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461337291906145ba565b9250508190555080600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e79190613fe1565b60405180910390a35050565b6133fb613e2b565b600080831480613467575083600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16838486600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166134589190614792565b925082613465919061461d565b145b6134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349d90614daa565b60405180910390fd5b60405180602001604052808281525091505092915050565b6000607060ff168260000151901c9050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000640100000000426136079190614dca565b905090565b613614613e3e565b6000826dffffffffffffffffffffffffffff1611613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90614e47565b60405180910390fd5b6040518060200160405280836dffffffffffffffffffffffffffff16607060ff16866dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16901b6136c39190614e8f565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361372557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361375e57600080fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137ae57600080fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161389c9190613fe1565b60405180910390a350505050565b60006138b530611793565b905060006014546015546138c99190614331565b90506000808314806138db5750600082145b156138e857505050613a5c565b6014600b546138f79190614792565b831115613910576014600b5461390d9190614792565b92505b6000600283601554866139239190614792565b61392d919061461d565b613937919061461d565b90506000818561394791906145ba565b9050600047905061395782613af2565b6000814761396591906145ba565b9050600086601454836139789190614792565b613982919061461d565b90506000818361399291906145ba565b9050600060158190555060006014819055506000861180156139b45750600081115b156139c4576139c38682613d2f565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a0a90614805565b60006040518083038185875af1925050503d8060008114613a47576040519150601f19603f3d011682016040523d82523d6000602084013e613a4c565b606091505b5050809750505050505050505050505b565b6000806000613a8e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612691565b9250925092506000601f548263ffffffff16613aaa91906145ba565b9050601d54811115613aec576000601c60009054906101000a900460ff16613ad25784613ad4565b835b905080601e819055508263ffffffff16601f81905550505b50505050565b6000600267ffffffffffffffff811115613b0f57613b0e614ec0565b5b604051908082528060200260200182016040528015613b3d5781602001602082028036833780820191505090505b5090503081600081518110613b5557613b54614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1e9190614986565b81600181518110613c3257613c31614eef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c97307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125a6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf9959493929190614fdc565b600060405180830381600087803b158015613d1357600080fd5b505af1158015613d27573d6000803e3d6000fd5b505050505050565b613d5a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125a6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613de196959493929190614519565b60606040518083038185885af1158015613dff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e2491906149dc565b5050505050565b6040518060200160405280600081525090565b604051806020016040528060007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b6000819050919050565b613e8781613e74565b8114613e9257600080fd5b50565b600081359050613ea481613e7e565b92915050565b60008060408385031215613ec157613ec0613e6f565b5b6000613ecf85828601613e95565b9250506020613ee085828601613e95565b9150509250929050565b60008115159050919050565b613eff81613eea565b82525050565b6000602082019050613f1a6000830184613ef6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f5a578082015181840152602081019050613f3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f8282613f20565b613f8c8185613f2b565b9350613f9c818560208601613f3c565b613fa581613f66565b840191505092915050565b60006020820190508181036000830152613fca8184613f77565b905092915050565b613fdb81613e74565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061402782613ffc565b9050919050565b6140378161401c565b811461404257600080fd5b50565b6000813590506140548161402e565b92915050565b6000806040838503121561407157614070613e6f565b5b600061407f85828601614045565b925050602061409085828601613e95565b9150509250929050565b6000819050919050565b60006140bf6140ba6140b584613ffc565b61409a565b613ffc565b9050919050565b60006140d1826140a4565b9050919050565b60006140e3826140c6565b9050919050565b6140f3816140d8565b82525050565b600060208201905061410e60008301846140ea565b92915050565b60008060006060848603121561412d5761412c613e6f565b5b600061413b86828701614045565b935050602061414c86828701614045565b925050604061415d86828701613e95565b9150509250925092565b6141708161401c565b82525050565b600060208201905061418b6000830184614167565b92915050565b600060ff82169050919050565b6141a781614191565b82525050565b60006020820190506141c2600083018461419e565b92915050565b6000602082840312156141de576141dd613e6f565b5b60006141ec84828501613e95565b91505092915050565b60006020828403121561420b5761420a613e6f565b5b600061421984828501614045565b91505092915050565b6000819050919050565b61423581614222565b82525050565b6000602082019050614250600083018461422c565b92915050565b61425f81613eea565b811461426a57600080fd5b50565b60008135905061427c81614256565b92915050565b6000806040838503121561429957614298613e6f565b5b60006142a785828601614045565b92505060206142b88582860161426d565b9150509250929050565b600080604083850312156142d9576142d8613e6f565b5b60006142e785828601614045565b92505060206142f885828601614045565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061433c82613e74565b915061434783613e74565b925082820190508082111561435f5761435e614302565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ac57607f821691505b6020821081036143bf576143be614365565b5b50919050565b7f4d61726b657420636170206e6f74207265616368656400000000000000000000600082015250565b60006143fb601683613f2b565b9150614406826143c5565b602082019050919050565b6000602082019050818103600083015261442a816143ee565b9050919050565b60008151905061444081613e7e565b92915050565b60006020828403121561445c5761445b613e6f565b5b600061446a84828501614431565b91505092915050565b60006040820190506144886000830185614167565b6144956020830184613fd2565b9392505050565b6000815190506144ab81614256565b92915050565b6000602082840312156144c7576144c6613e6f565b5b60006144d58482850161449c565b91505092915050565b6000819050919050565b60006145036144fe6144f9846144de565b61409a565b613e74565b9050919050565b614513816144e8565b82525050565b600060c08201905061452e6000830189614167565b61453b6020830188613fd2565b614548604083018761450a565b614555606083018661450a565b6145626080830185614167565b61456f60a0830184613fd2565b979650505050505050565b6000806040838503121561459157614590613e6f565b5b600061459f85828601614431565b92505060206145b085828601614431565b9150509250929050565b60006145c582613e74565b91506145d083613e74565b92508282039050818111156145e8576145e7614302565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462882613e74565b915061463383613e74565b925082614643576146426145ee565b5b828204905092915050565b7f2163610000000000000000000000000000000000000000000000000000000000600082015250565b6000614684600383613f2b565b915061468f8261464e565b602082019050919050565b600060208201905081810360008301526146b381614677565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b60006146f0600f83613f2b565b91506146fb826146ba565b602082019050919050565b6000602082019050818103600083015261471f816146e3565b9050919050565b7f4e6f20746f6b656e732068656c64000000000000000000000000000000000000600082015250565b600061475c600e83613f2b565b915061476782614726565b602082019050919050565b6000602082019050818103600083015261478b8161474f565b9050919050565b600061479d82613e74565b91506147a883613e74565b92508282026147b681613e74565b915082820484148315176147cd576147cc614302565b5b5092915050565b600081905092915050565b50565b60006147ef6000836147d4565b91506147fa826147df565b600082019050919050565b6000614810826147e2565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b6000614850601383613f2b565b915061485b8261481a565b602082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b61488f81614222565b811461489a57600080fd5b50565b6000815190506148ac81614886565b92915050565b6000602082840312156148c8576148c7613e6f565b5b60006148d68482850161489d565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061493b602583613f2b565b9150614946826148df565b604082019050919050565b6000602082019050818103600083015261496a8161492e565b9050919050565b6000815190506149808161402e565b92915050565b60006020828403121561499c5761499b613e6f565b5b60006149aa84828501614971565b91505092915050565b60006040820190506149c86000830185614167565b6149d56020830184614167565b9392505050565b6000806000606084860312156149f5576149f4613e6f565b5b6000614a0386828701614431565b9350506020614a1486828701614431565b9250506040614a2586828701614431565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602683613f2b565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af7602083613f2b565b9150614b0282614ac1565b602082019050919050565b60006020820190508181036000830152614b2681614aea565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b614b5081614b2d565b8114614b5b57600080fd5b50565b600081519050614b6d81614b47565b92915050565b600063ffffffff82169050919050565b614b8c81614b73565b8114614b9757600080fd5b50565b600081519050614ba981614b83565b92915050565b600080600060608486031215614bc857614bc7613e6f565b5b6000614bd686828701614b5e565b9350506020614be786828701614b5e565b9250506040614bf886828701614b9a565b9150509250925092565b6000614c0d82614b73565b9150614c1883614b73565b9250828203905063ffffffff811115614c3457614c33614302565b5b92915050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b6000614c96602583613f2b565b9150614ca182614c3a565b604082019050919050565b60006020820190508181036000830152614cc581614c89565b9050919050565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b6000614d02601e83613f2b565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4669786564506f696e743a204d554c5449504c49434154494f4e5f4f5645524660008201527f4c4f570000000000000000000000000000000000000000000000000000000000602082015250565b6000614d94602383613f2b565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582613e74565b9150614de083613e74565b925082614df057614def6145ee565b5b828206905092915050565b7f4669786564506f696e743a204449565f42595f5a45524f000000000000000000600082015250565b6000614e31601783613f2b565b9150614e3c82614dfb565b602082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614e9a82614e67565b9150614ea583614e67565b925082614eb557614eb46145ee565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f538161401c565b82525050565b6000614f658383614f4a565b60208301905092915050565b6000602082019050919050565b6000614f8982614f1e565b614f938185614f29565b9350614f9e83614f3a565b8060005b83811015614fcf578151614fb68882614f59565b9750614fc183614f71565b925050600181019050614fa2565b5085935050505092915050565b600060a082019050614ff16000830188613fd2565b614ffe602083018761450a565b81810360408301526150108186614f7e565b905061501f6060830185614167565b61502c6080830184613fd2565b969550505050505056fea2646970667358221220f13653948786130da53ac2573de14167e81de745481f040931175be7c2caa83564736f6c63430008110033
Deployed Bytecode Sourcemap
25033:15698:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31064:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25578:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8990:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39565:549;;;;;;;;;;;;;:::i;:::-;;26245:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11498:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26661:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25089:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10122:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29370:547;;;;;;;;;;;;;:::i;:::-;;12321:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25182:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9963:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26620:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13026:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28354:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38270:623;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25147:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32415:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25345:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40122:602;;;;;;;;;;;;;:::i;:::-;;38901:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25732:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25540:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10294:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2565:103;;;;;;;;;;;;;:::i;:::-;;26196:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30596:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25271:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25655;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39183:173;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25767:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9210:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30245:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13800:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39025:150;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10678:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26543:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26574:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31420:128;;;;;;;;;;;;;:::i;:::-;;25500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31556:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25384:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28446:916;;;;;;;;;;;;;:::i;:::-;;31927:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29926:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25308:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26162:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25621;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10976:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25426:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25692:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2824:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31697:221;;;;;;;;;;;;;:::i;:::-;;25805:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25466:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31064:347;1807:13;:11;:13::i;:::-;31208::::1;31189:16;:32;;;;31251:13;31232:16;:32;;;;31310:16;;31291;;:35;;;;:::i;:::-;31275:13;:51;;;;31351:13;;31337:11;:27;;;;31400:2;31383:13;;:19;;31375:28;;;::::0;::::1;;31064:347:::0;;:::o;25578:33::-;;;;;;;;;;;;;:::o;8990:100::-;9044:13;9077:5;9070:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8990:100;:::o;39565:549::-;26289:10;39634:14;:12;:14::i;:::-;:35;;:81;;;;39707:7;39692:12;;:22;;;;:::i;:::-;39674:15;:40;39634:81;39626:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;39755:17;39782:13;;;;;;;;;;;39775:31;;;39815:4;39775:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39755:66;;39839:13;;;;;;;;;;;39832:29;;;39870:15;39888:9;39832:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39919:15;:34;;;39976:4;39996:9;40020:1;40036;40060:4;40080:15;39919:187;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39615:499;39565:549::o;26245:54::-;26289:10;26245:54;:::o;11498:242::-;11617:4;11639:13;11655:12;:10;:12::i;:::-;11639:28;;11678:32;11687:5;11694:7;11703:6;11678:8;:32::i;:::-;11728:4;11721:11;;;11498:242;;;;:::o;26661:34::-;;;;:::o;25089:51::-;;;:::o;10122:108::-;10183:7;10210:12;;10203:19;;10122:108;:::o;29370:547::-;1807:13;:11;:13::i;:::-;29421:24:::1;29447::::0;29473:21:::1;29512:61;29559:13;;;;;;;;;;;29512:46;:61::i;:::-;29420:153;;;;;;29586:23;29612:12;;;;;;;;;;;:50;;29646:16;29612:50;;;29627:16;29612:50;29586:76;;29705:14;29683:36;;:19;:36;;;;29752:15;29730:19;:37;;;;29781:14;29801:57;29837:4;26362:42;29801:27;:57::i;:::-;29780:78;;;29903:4;29885:23;;:6;:23;;;29869:12;;:40;;;;;;;;;;;;;;;;;;29409:508;;;;;29370:547::o:0;12321:295::-;12452:4;12469:15;12487:12;:10;:12::i;:::-;12469:30;;12510:38;12526:4;12532:7;12541:6;12510:15;:38::i;:::-;12559:27;12569:4;12575:2;12579:6;12559:9;:27::i;:::-;12604:4;12597:11;;;12321:295;;;;;:::o;25182:48::-;25228:1;25182:48;:::o;9963:93::-;10021:5;10046:2;10039:9;;9963:93;:::o;26620:34::-;;;;:::o;13026:270::-;13141:4;13163:13;13179:12;:10;:12::i;:::-;13163:28;;13202:64;13211:5;13218:7;13255:10;13227:25;13237:5;13244:7;13227:9;:25::i;:::-;:38;;;;:::i;:::-;13202:8;:64::i;:::-;13284:4;13277:11;;;13026:270;;;;:::o;28354:83::-;28404:25;28410:10;28422:6;28404:5;:25::i;:::-;28354:83;:::o;38270:623::-;38317:7;38338:21;38361;38384;38423:61;38470:13;;;;;;;;;;;38423:46;:61::i;:::-;38337:147;;;;;;38495:19;38534;;38517:14;:36;;;;;;:::i;:::-;38495:58;;38566:23;38592:12;;;;;;;;;;;:50;;38626:16;38592:50;;;38607:16;38592:50;38566:76;;38655:40;38698:108;;;;;;;;38783:11;38760:19;;38742:15;:37;;;;:::i;:::-;38741:53;;;;:::i;:::-;38698:108;;;;;38655:151;;38826:59;38847:37;38862:12;38876:7;38847:14;:37::i;:::-;38826:20;:59::i;:::-;38819:66;;;;;;;;;;38270:623;:::o;25147:28::-;;;;;;;;;;;;;:::o;32415:126::-;32481:4;32505:19;:28;32525:7;32505:28;;;;;;;;;;;;;;;;;;;;;;;;;32498:35;;32415:126;;;:::o;25345:29::-;;;;;;;;;;;;;:::o;30753:302::-;1807:13;:11;:13::i;:::-;30895::::1;30877:15;:31;;;;30937:13;30919:15;:31;;;;30994:15;;30976;;:33;;;;:::i;:::-;30961:12;:48;;;;31044:2;31028:12;;:18;;31020:27;;;::::0;::::1;;30753:302:::0;;:::o;40122:602::-;40182:9;40168:23;;:10;:23;;;40160:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40244:5;40218:31;;:10;:22;40229:10;40218:22;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;40210:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40280:19;40302:21;40312:10;40302:9;:21::i;:::-;40280:43;;40356:1;40342:11;:15;40334:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;40389:19;40411:13;:11;:13::i;:::-;40389:35;;40435:17;40493:11;40479;40455:21;:35;;;;:::i;:::-;:49;;;;:::i;:::-;40435:69;;40517:30;40523:10;40535:11;40517:5;:30::i;:::-;40595:4;40570:10;:22;40581:10;40570:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40611:12;40629:10;:15;;40652:9;40629:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40610:56;;;40685:7;40677:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40149:575;;;;40122:602::o;38901:116::-;38945:3;26491:42;38968:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38961:34;;38901:116;:::o;25732:28::-;;;;:::o;25540:31::-;;;;;;;;;;;;;:::o;10294:177::-;10413:7;10445:9;:18;10455:7;10445:18;;;;;;;;;;;;;;;;10438:25;;10294:177;;;:::o;2565:103::-;1807:13;:11;:13::i;:::-;2630:30:::1;2657:1;2630:18;:30::i;:::-;2565:103::o:0;26196:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;30596:149::-;1807:13;:11;:13::i;:::-;30733:4:::1;30691:31;:39;30723:6;30691:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30596:149:::0;;:::o;25271:30::-;;;;;;;;;;;;;:::o;25655:::-;;;;:::o;1922:87::-;1968:7;1995:6;;;;;;;;;;;1988:13;;1922:87;:::o;39183:173::-;39228:7;39248:19;39270:20;:18;:20::i;:::-;39248:42;;39345:3;39338:4;39324:11;39308:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:34;;;;:::i;:::-;:40;;;;:::i;:::-;39301:47;;;39183:173;:::o;25767:31::-;;;;:::o;9210:104::-;9266:13;9299:7;9292:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9210:104;:::o;30245:342::-;1807:13;:11;:13::i;:::-;30425:4:::1;30420:1;30404:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30403:26;;;;:::i;:::-;30389:9;:41;;30381:50;;;::::0;::::1;;30492:4;30487:1;30471:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30470:26;;;;:::i;:::-;30450:15;:47;;30442:56;;;::::0;::::1;;30521:15;30509:9;:27;;;;30570:9;30547:20;:32;;;;30245:342:::0;;:::o;13800:506::-;13920:4;13942:13;13958:12;:10;:12::i;:::-;13942:28;;13981:24;14008:25;14018:5;14025:7;14008:9;:25::i;:::-;13981:52;;14086:15;14066:16;:35;;14044:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14202:60;14211:5;14218:7;14246:15;14227:16;:34;14202:8;:60::i;:::-;14294:4;14287:11;;;;13800:506;;;;:::o;39025:150::-;39076:7;39137:16;:14;:16::i;:::-;39119:13;:11;:13::i;:::-;39104:4;:29;;;;:::i;:::-;39103:50;;;;:::i;:::-;39096:57;;39025:150;:::o;10678:234::-;10793:4;10815:13;10831:12;:10;:12::i;:::-;10815:28;;10854;10864:5;10871:2;10875:6;10854:9;:28::i;:::-;10900:4;10893:11;;;10678:234;;;;:::o;26543:24::-;;;;;;;;;;;;;:::o;26574:39::-;;;;:::o;31420:128::-;31484:14;;;;;;;;;;;31470:28;;:10;:28;;;31462:37;;;;;;31527:13;;;;;;;;;;;31526:14;31510:13;;:30;;;;;;;;;;;;;;;;;;31420:128::o;25500:33::-;;;;;;;;;;;;;:::o;31556:132::-;1807:13;:11;:13::i;:::-;31672:8:::1;31641:19;:28;31661:7;31641:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31556:132:::0;;:::o;25384:35::-;;;;:::o;28446:916::-;1807:13;:11;:13::i;:::-;28508::::1;;;;;;;;;;;28507:14;28499:23;;;::::0;::::1;;28570:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28552:55;;;28630:4;28650:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28552:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28536:13;;:147;;;;;;;;;;;;;;;;;;28694:66;28711:4;28726:13;;;;;;;;;;;28742:17;28694:8;:66::i;:::-;28778:13;;;;;;;;;;;28771:29;;;28823:15;28854:17;28771:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28896:58;28933:13;;;;;;;;;;;28949:4;28896:28;:58::i;:::-;28965:55;28999:13;;;;;;;;;;;29015:4;28965:25;:55::i;:::-;29034:15;:31;;;29073:21;29118:4;29138:24;29156:4;29138:9;:24::i;:::-;29177:1;29193::::0;29217:4:::1;29237:15;29034:229;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29290:4;29274:13;;:20;;;;;;;;;;;;;;;;;;29319:4;29305:11;;:18;;;;;;;;;;;;;;;;;;29350:4;29334:13;;:20;;;;;;;;;;;;;;;;;;28446:916::o:0;31927:340::-;32009:14;;;;;;;;;;;31995:28;;:10;:28;;;31987:37;;;;;;32076:7;32061:12;;:22;;;;:::i;:::-;32043:15;:40;32035:49;;;;;;32142:1;32110:3;32103:21;;;32133:4;32103:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;32095:49;;;;;;32155:14;32179:3;32172:21;;;32202:4;32172:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32155:53;;32226:3;32219:20;;;32240:10;32252:6;32219:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31976:291;31927:340;:::o;29926:310::-;30034:4;1807:13;:11;:13::i;:::-;30099:6:::1;30094:1;30078:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30077:28;;;;:::i;:::-;30064:9;:41;;30056:50;;;::::0;::::1;;30160:4;30155:1;30139:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30138:26;;;;:::i;:::-;30125:9;:39;;30117:48;;;::::0;::::1;;30197:9;30176:18;:30;;;;30224:4;30217:11;;29926:310:::0;;;:::o;25308:30::-;;;;;;;;;;;;;:::o;26162:27::-;;;;:::o;25621:::-;;;;:::o;10976:201::-;11110:7;11142:11;:18;11154:5;11142:18;;;;;;;;;;;;;;;:27;11161:7;11142:27;;;;;;;;;;;;;;;;11135:34;;10976:201;;;;:::o;25426:33::-;;;;:::o;25692:30::-;;;;:::o;2824:238::-;1807:13;:11;:13::i;:::-;2947:1:::1;2927:22;;:8;:22;;::::0;2905:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3026:28;3045:8;3026:18;:28::i;:::-;2824:238:::0;:::o;31697:221::-;31765:14;;;;;;;;;;;31751:28;;:10;:28;;;31743:37;;;;;;31791:12;31836:10;31828:24;;31860:21;31828:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31814:96;;;;;31732:186;31697:221::o;25805:31::-;;;;:::o;25466:24::-;;;;:::o;2088:132::-;2163:12;:10;:12::i;:::-;2152:23;;:7;:5;:7::i;:::-;:23;;;2144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2088:132::o;600:98::-;653:7;680:10;673:17;;600:98;:::o;16532:220::-;16690:6;16660:11;:18;16672:5;16660:18;;;;;;;;;;;;;;;:27;16679:7;16660:27;;;;;;;;;;;;;;;:36;;;;16728:7;16712:32;;16721:5;16712:32;;;16737:6;16712:32;;;;;;:::i;:::-;;;;;;;;16532:220;;;:::o;23814:1058::-;23900:21;23923;23946;23997:23;:21;:23::i;:::-;23980:40;;24065:4;24050:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24031:62;;24138:4;24123:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24104:62;;24281:16;24299;24317:25;24361:4;24346:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24280:100;;;;;;24417:14;24395:36;;:18;:36;;;24391:474;;24496:18;24534;24517:14;:35;;;;:::i;:::-;24496:56;;24714:11;24663:62;;24668:39;24688:8;24698;24668:19;:39::i;:::-;:42;;;24663:48;;:62;;;;:::i;:::-;24643:82;;;;;:::i;:::-;;;24842:11;24791:62;;24796:39;24816:8;24826;24796:19;:39::i;:::-;:42;;;24791:48;;:62;;;;:::i;:::-;24771:82;;;;;:::i;:::-;;;24433:432;24391:474;23969:903;;;23814:1058;;;;;:::o;23047:349::-;23122:14;23138;23183:6;23173:16;;:6;:16;;;23165:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:6;23261:15;;:6;:15;;;:53;;23299:6;23307;23261:53;;;23280:6;23288;23261:53;23242:72;;;;;;;;23351:1;23333:20;;:6;:20;;;23325:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23047:349;;;;;:::o;17044:420::-;17179:24;17206:25;17216:5;17223:7;17206:9;:25::i;:::-;17179:52;;17266:17;17246:16;:37;17242:215;;17328:6;17308:16;:26;;17300:35;;;;;;17379:51;17388:5;17395:7;17423:6;17404:16;:25;17379:8;:51::i;:::-;17242:215;17168:296;17044:420;;;:::o;32550:2960::-;32698:1;32682:18;;:4;:18;;;32674:27;;;;;;32734:1;32720:16;;:2;:16;;;32712:25;;;;;;32765:1;32755:6;:11;32751:93;;32783:28;32799:4;32805:2;32809:1;32783:15;:28::i;:::-;32826:7;;32751:93;32883:7;:5;:7::i;:::-;32875:15;;:4;:15;;;;:45;;;;;32913:7;:5;:7::i;:::-;32907:13;;:2;:13;;;;32875:45;:78;;;;;32951:1;32937:16;;:2;:16;;;;32875:78;:112;;;;;25228:1;32970:17;;:2;:17;;;;32875:112;:138;;;;;33005:8;;;;;;;;;;;33004:9;32875:138;32857:985;;;33045:13;;;;;;;;;;;33040:116;;33087:19;:25;33107:4;33087:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33116:19;:23;33136:2;33116:23;;;;;;;;;;;;;;;;;;;;;;;;;33087:52;33079:61;;;;;;33040:116;33219:25;:31;33245:4;33219:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;33272:31;:35;33304:2;33272:35;;;;;;;;;;;;;;;;;;;;;;;;;33271:36;33219:88;33197:634;;;33360:20;;33350:6;:30;;33342:39;;;;;;33434:9;;33417:13;33427:2;33417:9;:13::i;:::-;33408:6;:22;;;;:::i;:::-;:35;;33400:44;;;;;;33197:634;;;33526:25;:29;33552:2;33526:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;33577:31;:37;33609:4;33577:37;;;;;;;;;;;;;;;;;;;;;;;;;33576:38;33526:88;33504:327;;;33667:20;;33657:6;:30;;33649:39;;;;;;33504:327;;;33715:31;:35;33747:2;33715:35;;;;;;;;;;;;;;;;;;;;;;;;;33710:121;;33805:9;;33788:13;33798:2;33788:9;:13::i;:::-;33779:6;:22;;;;:::i;:::-;:35;;33771:44;;;;;;33710:121;33504:327;33197:634;32857:985;33855:28;33886:24;33904:4;33886:9;:24::i;:::-;33855:55;;33924:12;33963:18;;33939:20;:42;;33924:57;;34013:7;:35;;;;;34037:11;;;;;;;;;;;34013:35;:61;;;;;34066:8;;;;;;;;;;;34065:9;34013:61;:110;;;;;34092:25;:31;34118:4;34092:31;;;;;;;;;;;;;;;;;;;;;;;;;34091:32;34013:110;:153;;;;;34141:19;:25;34161:4;34141:25;;;;;;;;;;;;;;;;;;;;;;;;;34140:26;34013:153;:194;;;;;34184:19;:23;34204:2;34184:23;;;;;;;;;;;;;;;;;;;;;;;;;34183:24;34013:194;33995:328;;;34245:4;34234:8;;:15;;;;;;;;;;;;;;;;;;34267:10;:8;:10::i;:::-;34306:5;34295:8;;:16;;;;;;;;;;;;;;;;;;33995:328;34336:12;34352:8;;;;;;;;;;;34351:9;34336:24;;34378:19;:25;34398:4;34378:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34407:19;:23;34427:2;34407:23;;;;;;;;;;;;;;;;;;;;;;;;;34378:52;34374:100;;;34457:5;34447:15;;34374:100;34487:12;34521:7;34517:832;;;34573:25;:29;34599:2;34573:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;34622:1;34606:13;;:17;34573:50;34569:618;;;34676:3;34660:13;;34651:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;34644:35;;34748:13;;34728:16;;34721:4;:23;;;;:::i;:::-;34720:41;;;;:::i;:::-;34698:18;;:63;;;;;;;:::i;:::-;;;;;;;;34830:13;;34810:16;;34803:4;:23;;;;:::i;:::-;34802:41;;;;:::i;:::-;34780:18;;:63;;;;;;;:::i;:::-;;;;;;;;34569:618;;;34905:25;:31;34931:4;34905:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;34955:1;34940:12;;:16;34905:51;34901:286;;;35008:3;34993:12;;34984:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;34977:34;;35079:12;;35060:15;;35053:4;:22;;;;:::i;:::-;35052:39;;;;:::i;:::-;35030:18;;:61;;;;;;;:::i;:::-;;;;;;;;35159:12;;35140:15;;35133:4;:22;;;;:::i;:::-;35132:39;;;;:::i;:::-;35110:18;;:61;;;;;;;:::i;:::-;;;;;;;;34901:286;34569:618;35215:1;35208:4;:8;35204:91;;;35237:42;35253:4;35267;35274;35237:15;:42::i;:::-;35204:91;35333:4;35323:14;;;;;:::i;:::-;;;34517:832;35366:13;;;;;;;;;;;35362:59;;;35396:13;:11;:13::i;:::-;35362:59;35431:33;35447:4;35453:2;35457:6;35431:15;:33::i;:::-;35491:11;;35475:13;:27;;;;32663:2847;;;;32550:2960;;;;:::o;15752:341::-;15844:6;15825:9;:15;15835:4;15825:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;16015:6;15999:12;;:22;;;;;;;;;;;16074:1;16051:34;;16060:4;16051:34;;;16078:6;16051:34;;;;;;:::i;:::-;;;;;;;;15752:341;;:::o;21924:253::-;21991:16;;:::i;:::-;22020:6;22050:1;22045;:6;:54;;;;22091:4;:7;;;22086:13;;22081:1;22076;22065:4;:7;;;22060:13;;:17;;;;:::i;:::-;22056:21;;;22055:27;;;;:::i;:::-;:44;22045:54;22037:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22157:12;;;;;;;;22167:1;22157:12;;;22150:19;;;21924:253;;;;:::o;22878:130::-;22943:7;21195:3;22978:21;;:4;:7;;;:21;;22963:37;;22878:130;;;:::o;3223:191::-;3297:16;3316:6;;;;;;;;;;;3297:25;;3342:8;3333:6;;:17;;;;;;;;;;;;;;;;;;3397:8;3366:40;;3387:8;3366:40;;;;;;;;;;;;3286:128;3223:191;:::o;32276:130::-;32393:5;32359:25;:31;32385:4;32359:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32276:130;;:::o;23585:123::-;23641:6;23692:7;23674:15;:25;;;;:::i;:::-;23660:40;;23585:123;:::o;22333:246::-;22414:16;;:::i;:::-;22465:1;22451:11;:15;;;22443:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;22512:59;;;;;;;;22559:11;22522:48;;21195:3;22523:32;;22531:9;22523:18;;:32;;;;22522:48;;;;:::i;:::-;22512:59;;;;;22505:66;;22333:246;;;;:::o;14777:619::-;14924:1;14908:18;;:4;:18;;;14900:27;;;;;;14960:1;14946:16;;:2;:16;;;14938:25;;;;;;14977:19;14999:9;:15;15009:4;14999:15;;;;;;;;;;;;;;;;14977:37;;15048:6;15033:11;:21;;15025:30;;;;;;15123:6;15109:11;:20;15091:9;:15;15101:4;15091:15;;;;;;;;;;;;;;;:38;;;;15326:6;15309:9;:13;15319:2;15309:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15377:2;15362:26;;15371:4;15362:26;;;15381:6;15362:26;;;;;;:::i;:::-;;;;;;;;14889:507;14777:619;;;:::o;36411:1304::-;36450:23;36476:24;36494:4;36476:9;:24::i;:::-;36450:50;;36511:25;36573:18;;36539;;:52;;;;:::i;:::-;36511:80;;36602:12;36651:1;36632:15;:20;:46;;;;36677:1;36656:17;:22;36632:46;36628:85;;;36695:7;;;;;36628:85;36769:2;36748:18;;:23;;;;:::i;:::-;36730:15;:41;36726:115;;;36827:2;36806:18;;:23;;;;:::i;:::-;36788:41;;36726:115;36854:23;36967:1;36934:17;36899:18;;36881:15;:36;;;;:::i;:::-;36880:71;;;;:::i;:::-;:88;;;;:::i;:::-;36854:114;;36979:26;37026:15;37008;:33;;;;:::i;:::-;36979:62;;37055:25;37083:21;37055:49;;37118:36;37135:18;37118:16;:36::i;:::-;37168:18;37213:17;37189:21;:41;;;;:::i;:::-;37168:62;;37244:23;37304:17;37283:18;;37270:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;37244:77;;37335:23;37374:15;37361:10;:28;;;;:::i;:::-;37335:54;;37424:1;37403:18;:22;;;;37457:1;37436:18;:22;;;;37494:1;37476:15;:19;:42;;;;;37517:1;37499:15;:19;37476:42;37472:121;;;37535:46;37548:15;37565;37535:12;:46::i;:::-;37472:121;37628:15;;;;;;;;;;;37620:29;;37671:21;37620:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37606:101;;;;;36439:1276;;;;;;;;;36411:1304;:::o;37745:517::-;37789:21;37812;37835;37874:61;37921:13;;;;;;;;;;;37874:46;:61::i;:::-;37788:147;;;;;;37946:19;37985;;37968:14;:36;;;;;;:::i;:::-;37946:58;;38035:12;;38021:11;:26;38017:238;;;38064:23;38090:12;;;;;;;;;;;:50;;38124:16;38090:50;;;38105:16;38090:50;38064:76;;38177:15;38155:19;:37;;;;38229:14;38207:36;;:19;:36;;;;38049:206;38017:238;37777:485;;;;37745:517::o;35519:503::-;35585:21;35623:1;35609:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35585:40;;35654:4;35636;35641:1;35636:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35680:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35670:4;35675:1;35670:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35716:62;35733:4;35748:15;35766:11;35716:8;:62::i;:::-;35818:15;:66;;;35899:11;35925:1;35941:4;35968;35988:15;35818:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35574:448;35519:503;:::o;36031:371::-;36112:62;36129:4;36144:15;36162:11;36112:8;:62::i;:::-;36188:15;:31;;;36227:9;36260:4;36280:11;36306:1;36322;36338:15;;;;;;;;;;;36368;36188:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36031:371;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:90::-;1204:7;1247:5;1240:13;1233:21;1222:32;;1170:90;;;:::o;1266:109::-;1347:21;1362:5;1347:21;:::i;:::-;1342:3;1335:34;1266:109;;:::o;1381:210::-;1468:4;1506:2;1495:9;1491:18;1483:26;;1519:65;1581:1;1570:9;1566:17;1557:6;1519:65;:::i;:::-;1381:210;;;;:::o;1597:99::-;1649:6;1683:5;1677:12;1667:22;;1597:99;;;:::o;1702:169::-;1786:11;1820:6;1815:3;1808:19;1860:4;1855:3;1851:14;1836:29;;1702:169;;;;:::o;1877:246::-;1958:1;1968:113;1982:6;1979:1;1976:13;1968:113;;;2067:1;2062:3;2058:11;2052:18;2048:1;2043:3;2039:11;2032:39;2004:2;2001:1;1997:10;1992:15;;1968:113;;;2115:1;2106:6;2101:3;2097:16;2090:27;1939:184;1877:246;;;:::o;2129:102::-;2170:6;2221:2;2217:7;2212:2;2205:5;2201:14;2197:28;2187:38;;2129:102;;;:::o;2237:377::-;2325:3;2353:39;2386:5;2353:39;:::i;:::-;2408:71;2472:6;2467:3;2408:71;:::i;:::-;2401:78;;2488:65;2546:6;2541:3;2534:4;2527:5;2523:16;2488:65;:::i;:::-;2578:29;2600:6;2578:29;:::i;:::-;2573:3;2569:39;2562:46;;2329:285;2237:377;;;;:::o;2620:313::-;2733:4;2771:2;2760:9;2756:18;2748:26;;2820:9;2814:4;2810:20;2806:1;2795:9;2791:17;2784:47;2848:78;2921:4;2912:6;2848:78;:::i;:::-;2840:86;;2620:313;;;;:::o;2939:118::-;3026:24;3044:5;3026:24;:::i;:::-;3021:3;3014:37;2939:118;;:::o;3063:222::-;3156:4;3194:2;3183:9;3179:18;3171:26;;3207:71;3275:1;3264:9;3260:17;3251:6;3207:71;:::i;:::-;3063:222;;;;:::o;3291:126::-;3328:7;3368:42;3361:5;3357:54;3346:65;;3291:126;;;:::o;3423:96::-;3460:7;3489:24;3507:5;3489:24;:::i;:::-;3478:35;;3423:96;;;:::o;3525:122::-;3598:24;3616:5;3598:24;:::i;:::-;3591:5;3588:35;3578:63;;3637:1;3634;3627:12;3578:63;3525:122;:::o;3653:139::-;3699:5;3737:6;3724:20;3715:29;;3753:33;3780:5;3753:33;:::i;:::-;3653:139;;;;:::o;3798:474::-;3866:6;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;3798:474;;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:118::-;5963:24;5981:5;5963:24;:::i;:::-;5958:3;5951:37;5876:118;;:::o;6000:222::-;6093:4;6131:2;6120:9;6116:18;6108:26;;6144:71;6212:1;6201:9;6197:17;6188:6;6144:71;:::i;:::-;6000:222;;;;:::o;6228:86::-;6263:7;6303:4;6296:5;6292:16;6281:27;;6228:86;;;:::o;6320:112::-;6403:22;6419:5;6403:22;:::i;:::-;6398:3;6391:35;6320:112;;:::o;6438:214::-;6527:4;6565:2;6554:9;6550:18;6542:26;;6578:67;6642:1;6631:9;6627:17;6618:6;6578:67;:::i;:::-;6438:214;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:::-;7052:6;7101:2;7089:9;7080:7;7076:23;7072:32;7069:119;;;7107:79;;:::i;:::-;7069:119;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;6993:329;;;;:::o;7328:76::-;7364:7;7393:5;7382:16;;7328:76;;;:::o;7410:115::-;7495:23;7512:5;7495:23;:::i;:::-;7490:3;7483:36;7410:115;;:::o;7531:218::-;7622:4;7660:2;7649:9;7645:18;7637:26;;7673:69;7739:1;7728:9;7724:17;7715:6;7673:69;:::i;:::-;7531:218;;;;:::o;7755:116::-;7825:21;7840:5;7825:21;:::i;:::-;7818:5;7815:32;7805:60;;7861:1;7858;7851:12;7805:60;7755:116;:::o;7877:133::-;7920:5;7958:6;7945:20;7936:29;;7974:30;7998:5;7974:30;:::i;:::-;7877:133;;;;:::o;8016:468::-;8081:6;8089;8138:2;8126:9;8117:7;8113:23;8109:32;8106:119;;;8144:79;;:::i;:::-;8106:119;8264:1;8289:53;8334:7;8325:6;8314:9;8310:22;8289:53;:::i;:::-;8279:63;;8235:117;8391:2;8417:50;8459:7;8450:6;8439:9;8435:22;8417:50;:::i;:::-;8407:60;;8362:115;8016:468;;;;;:::o;8490:474::-;8558:6;8566;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8741:1;8766:53;8811:7;8802:6;8791:9;8787:22;8766:53;:::i;:::-;8756:63;;8712:117;8868:2;8894:53;8939:7;8930:6;8919:9;8915:22;8894:53;:::i;:::-;8884:63;;8839:118;8490:474;;;;;:::o;8970:180::-;9018:77;9015:1;9008:88;9115:4;9112:1;9105:15;9139:4;9136:1;9129:15;9156:191;9196:3;9215:20;9233:1;9215:20;:::i;:::-;9210:25;;9249:20;9267:1;9249:20;:::i;:::-;9244:25;;9292:1;9289;9285:9;9278:16;;9313:3;9310:1;9307:10;9304:36;;;9320:18;;:::i;:::-;9304:36;9156:191;;;;:::o;9353:180::-;9401:77;9398:1;9391:88;9498:4;9495:1;9488:15;9522:4;9519:1;9512:15;9539:320;9583:6;9620:1;9614:4;9610:12;9600:22;;9667:1;9661:4;9657:12;9688:18;9678:81;;9744:4;9736:6;9732:17;9722:27;;9678:81;9806:2;9798:6;9795:14;9775:18;9772:38;9769:84;;9825:18;;:::i;:::-;9769:84;9590:269;9539:320;;;:::o;9865:172::-;10005:24;10001:1;9993:6;9989:14;9982:48;9865:172;:::o;10043:366::-;10185:3;10206:67;10270:2;10265:3;10206:67;:::i;:::-;10199:74;;10282:93;10371:3;10282:93;:::i;:::-;10400:2;10395:3;10391:12;10384:19;;10043:366;;;:::o;10415:419::-;10581:4;10619:2;10608:9;10604:18;10596:26;;10668:9;10662:4;10658:20;10654:1;10643:9;10639:17;10632:47;10696:131;10822:4;10696:131;:::i;:::-;10688:139;;10415:419;;;:::o;10840:143::-;10897:5;10928:6;10922:13;10913:22;;10944:33;10971:5;10944:33;:::i;:::-;10840:143;;;;:::o;10989:351::-;11059:6;11108:2;11096:9;11087:7;11083:23;11079:32;11076:119;;;11114:79;;:::i;:::-;11076:119;11234:1;11259:64;11315:7;11306:6;11295:9;11291:22;11259:64;:::i;:::-;11249:74;;11205:128;10989:351;;;;:::o;11346:332::-;11467:4;11505:2;11494:9;11490:18;11482:26;;11518:71;11586:1;11575:9;11571:17;11562:6;11518:71;:::i;:::-;11599:72;11667:2;11656:9;11652:18;11643:6;11599:72;:::i;:::-;11346:332;;;;;:::o;11684:137::-;11738:5;11769:6;11763:13;11754:22;;11785:30;11809:5;11785:30;:::i;:::-;11684:137;;;;:::o;11827:345::-;11894:6;11943:2;11931:9;11922:7;11918:23;11914:32;11911:119;;;11949:79;;:::i;:::-;11911:119;12069:1;12094:61;12147:7;12138:6;12127:9;12123:22;12094:61;:::i;:::-;12084:71;;12040:125;11827:345;;;;:::o;12178:85::-;12223:7;12252:5;12241:16;;12178:85;;;:::o;12269:158::-;12327:9;12360:61;12378:42;12387:32;12413:5;12387:32;:::i;:::-;12378:42;:::i;:::-;12360:61;:::i;:::-;12347:74;;12269:158;;;:::o;12433:147::-;12528:45;12567:5;12528:45;:::i;:::-;12523:3;12516:58;12433:147;;:::o;12586:807::-;12835:4;12873:3;12862:9;12858:19;12850:27;;12887:71;12955:1;12944:9;12940:17;12931:6;12887:71;:::i;:::-;12968:72;13036:2;13025:9;13021:18;13012:6;12968:72;:::i;:::-;13050:80;13126:2;13115:9;13111:18;13102:6;13050:80;:::i;:::-;13140;13216:2;13205:9;13201:18;13192:6;13140:80;:::i;:::-;13230:73;13298:3;13287:9;13283:19;13274:6;13230:73;:::i;:::-;13313;13381:3;13370:9;13366:19;13357:6;13313:73;:::i;:::-;12586:807;;;;;;;;;:::o;13399:507::-;13478:6;13486;13535:2;13523:9;13514:7;13510:23;13506:32;13503:119;;;13541:79;;:::i;:::-;13503:119;13661:1;13686:64;13742:7;13733:6;13722:9;13718:22;13686:64;:::i;:::-;13676:74;;13632:128;13799:2;13825:64;13881:7;13872:6;13861:9;13857:22;13825:64;:::i;:::-;13815:74;;13770:129;13399:507;;;;;:::o;13912:194::-;13952:4;13972:20;13990:1;13972:20;:::i;:::-;13967:25;;14006:20;14024:1;14006:20;:::i;:::-;14001:25;;14050:1;14047;14043:9;14035:17;;14074:1;14068:4;14065:11;14062:37;;;14079:18;;:::i;:::-;14062:37;13912:194;;;;:::o;14112:180::-;14160:77;14157:1;14150:88;14257:4;14254:1;14247:15;14281:4;14278:1;14271:15;14298:185;14338:1;14355:20;14373:1;14355:20;:::i;:::-;14350:25;;14389:20;14407:1;14389:20;:::i;:::-;14384:25;;14428:1;14418:35;;14433:18;;:::i;:::-;14418:35;14475:1;14472;14468:9;14463:14;;14298:185;;;;:::o;14489:153::-;14629:5;14625:1;14617:6;14613:14;14606:29;14489:153;:::o;14648:365::-;14790:3;14811:66;14875:1;14870:3;14811:66;:::i;:::-;14804:73;;14886:93;14975:3;14886:93;:::i;:::-;15004:2;14999:3;14995:12;14988:19;;14648:365;;;:::o;15019:419::-;15185:4;15223:2;15212:9;15208:18;15200:26;;15272:9;15266:4;15262:20;15258:1;15247:9;15243:17;15236:47;15300:131;15426:4;15300:131;:::i;:::-;15292:139;;15019:419;;;:::o;15444:165::-;15584:17;15580:1;15572:6;15568:14;15561:41;15444:165;:::o;15615:366::-;15757:3;15778:67;15842:2;15837:3;15778:67;:::i;:::-;15771:74;;15854:93;15943:3;15854:93;:::i;:::-;15972:2;15967:3;15963:12;15956:19;;15615:366;;;:::o;15987:419::-;16153:4;16191:2;16180:9;16176:18;16168:26;;16240:9;16234:4;16230:20;16226:1;16215:9;16211:17;16204:47;16268:131;16394:4;16268:131;:::i;:::-;16260:139;;15987:419;;;:::o;16412:164::-;16552:16;16548:1;16540:6;16536:14;16529:40;16412:164;:::o;16582:366::-;16724:3;16745:67;16809:2;16804:3;16745:67;:::i;:::-;16738:74;;16821:93;16910:3;16821:93;:::i;:::-;16939:2;16934:3;16930:12;16923:19;;16582:366;;;:::o;16954:419::-;17120:4;17158:2;17147:9;17143:18;17135:26;;17207:9;17201:4;17197:20;17193:1;17182:9;17178:17;17171:47;17235:131;17361:4;17235:131;:::i;:::-;17227:139;;16954:419;;;:::o;17379:410::-;17419:7;17442:20;17460:1;17442:20;:::i;:::-;17437:25;;17476:20;17494:1;17476:20;:::i;:::-;17471:25;;17531:1;17528;17524:9;17553:30;17571:11;17553:30;:::i;:::-;17542:41;;17732:1;17723:7;17719:15;17716:1;17713:22;17693:1;17686:9;17666:83;17643:139;;17762:18;;:::i;:::-;17643:139;17427:362;17379:410;;;;:::o;17795:147::-;17896:11;17933:3;17918:18;;17795:147;;;;:::o;17948:114::-;;:::o;18068:398::-;18227:3;18248:83;18329:1;18324:3;18248:83;:::i;:::-;18241:90;;18340:93;18429:3;18340:93;:::i;:::-;18458:1;18453:3;18449:11;18442:18;;18068:398;;;:::o;18472:379::-;18656:3;18678:147;18821:3;18678:147;:::i;:::-;18671:154;;18842:3;18835:10;;18472:379;;;:::o;18857:169::-;18997:21;18993:1;18985:6;18981:14;18974:45;18857:169;:::o;19032:366::-;19174:3;19195:67;19259:2;19254:3;19195:67;:::i;:::-;19188:74;;19271:93;19360:3;19271:93;:::i;:::-;19389:2;19384:3;19380:12;19373:19;;19032:366;;;:::o;19404:419::-;19570:4;19608:2;19597:9;19593:18;19585:26;;19657:9;19651:4;19647:20;19643:1;19632:9;19628:17;19621:47;19685:131;19811:4;19685:131;:::i;:::-;19677:139;;19404:419;;;:::o;19829:120::-;19901:23;19918:5;19901:23;:::i;:::-;19894:5;19891:34;19881:62;;19939:1;19936;19929:12;19881:62;19829:120;:::o;19955:141::-;20011:5;20042:6;20036:13;20027:22;;20058:32;20084:5;20058:32;:::i;:::-;19955:141;;;;:::o;20102:349::-;20171:6;20220:2;20208:9;20199:7;20195:23;20191:32;20188:119;;;20226:79;;:::i;:::-;20188:119;20346:1;20371:63;20426:7;20417:6;20406:9;20402:22;20371:63;:::i;:::-;20361:73;;20317:127;20102:349;;;;:::o;20457:224::-;20597:34;20593:1;20585:6;20581:14;20574:58;20666:7;20661:2;20653:6;20649:15;20642:32;20457:224;:::o;20687:366::-;20829:3;20850:67;20914:2;20909:3;20850:67;:::i;:::-;20843:74;;20926:93;21015:3;20926:93;:::i;:::-;21044:2;21039:3;21035:12;21028:19;;20687:366;;;:::o;21059:419::-;21225:4;21263:2;21252:9;21248:18;21240:26;;21312:9;21306:4;21302:20;21298:1;21287:9;21283:17;21276:47;21340:131;21466:4;21340:131;:::i;:::-;21332:139;;21059:419;;;:::o;21484:143::-;21541:5;21572:6;21566:13;21557:22;;21588:33;21615:5;21588:33;:::i;:::-;21484:143;;;;:::o;21633:351::-;21703:6;21752:2;21740:9;21731:7;21727:23;21723:32;21720:119;;;21758:79;;:::i;:::-;21720:119;21878:1;21903:64;21959:7;21950:6;21939:9;21935:22;21903:64;:::i;:::-;21893:74;;21849:128;21633:351;;;;:::o;21990:332::-;22111:4;22149:2;22138:9;22134:18;22126:26;;22162:71;22230:1;22219:9;22215:17;22206:6;22162:71;:::i;:::-;22243:72;22311:2;22300:9;22296:18;22287:6;22243:72;:::i;:::-;21990:332;;;;;:::o;22328:663::-;22416:6;22424;22432;22481:2;22469:9;22460:7;22456:23;22452:32;22449:119;;;22487:79;;:::i;:::-;22449:119;22607:1;22632:64;22688:7;22679:6;22668:9;22664:22;22632:64;:::i;:::-;22622:74;;22578:128;22745:2;22771:64;22827:7;22818:6;22807:9;22803:22;22771:64;:::i;:::-;22761:74;;22716:129;22884:2;22910:64;22966:7;22957:6;22946:9;22942:22;22910:64;:::i;:::-;22900:74;;22855:129;22328:663;;;;;:::o;22997:225::-;23137:34;23133:1;23125:6;23121:14;23114:58;23206:8;23201:2;23193:6;23189:15;23182:33;22997:225;:::o;23228:366::-;23370:3;23391:67;23455:2;23450:3;23391:67;:::i;:::-;23384:74;;23467:93;23556:3;23467:93;:::i;:::-;23585:2;23580:3;23576:12;23569:19;;23228:366;;;:::o;23600:419::-;23766:4;23804:2;23793:9;23789:18;23781:26;;23853:9;23847:4;23843:20;23839:1;23828:9;23824:17;23817:47;23881:131;24007:4;23881:131;:::i;:::-;23873:139;;23600:419;;;:::o;24025:182::-;24165:34;24161:1;24153:6;24149:14;24142:58;24025:182;:::o;24213:366::-;24355:3;24376:67;24440:2;24435:3;24376:67;:::i;:::-;24369:74;;24452:93;24541:3;24452:93;:::i;:::-;24570:2;24565:3;24561:12;24554:19;;24213:366;;;:::o;24585:419::-;24751:4;24789:2;24778:9;24774:18;24766:26;;24838:9;24832:4;24828:20;24824:1;24813:9;24809:17;24802:47;24866:131;24992:4;24866:131;:::i;:::-;24858:139;;24585:419;;;:::o;25010:114::-;25047:7;25087:30;25080:5;25076:42;25065:53;;25010:114;;;:::o;25130:122::-;25203:24;25221:5;25203:24;:::i;:::-;25196:5;25193:35;25183:63;;25242:1;25239;25232:12;25183:63;25130:122;:::o;25258:143::-;25315:5;25346:6;25340:13;25331:22;;25362:33;25389:5;25362:33;:::i;:::-;25258:143;;;;:::o;25407:93::-;25443:7;25483:10;25476:5;25472:22;25461:33;;25407:93;;;:::o;25506:120::-;25578:23;25595:5;25578:23;:::i;:::-;25571:5;25568:34;25558:62;;25616:1;25613;25606:12;25558:62;25506:120;:::o;25632:141::-;25688:5;25719:6;25713:13;25704:22;;25735:32;25761:5;25735:32;:::i;:::-;25632:141;;;;:::o;25779:661::-;25866:6;25874;25882;25931:2;25919:9;25910:7;25906:23;25902:32;25899:119;;;25937:79;;:::i;:::-;25899:119;26057:1;26082:64;26138:7;26129:6;26118:9;26114:22;26082:64;:::i;:::-;26072:74;;26028:128;26195:2;26221:64;26277:7;26268:6;26257:9;26253:22;26221:64;:::i;:::-;26211:74;;26166:129;26334:2;26360:63;26415:7;26406:6;26395:9;26391:22;26360:63;:::i;:::-;26350:73;;26305:128;25779:661;;;;;:::o;26446:200::-;26485:4;26505:19;26522:1;26505:19;:::i;:::-;26500:24;;26538:19;26555:1;26538:19;:::i;:::-;26533:24;;26581:1;26578;26574:9;26566:17;;26605:10;26599:4;26596:20;26593:46;;;26619:18;;:::i;:::-;26593:46;26446:200;;;;:::o;26652:224::-;26792:34;26788:1;26780:6;26776:14;26769:58;26861:7;26856:2;26848:6;26844:15;26837:32;26652:224;:::o;26882:366::-;27024:3;27045:67;27109:2;27104:3;27045:67;:::i;:::-;27038:74;;27121:93;27210:3;27121:93;:::i;:::-;27239:2;27234:3;27230:12;27223:19;;26882:366;;;:::o;27254:419::-;27420:4;27458:2;27447:9;27443:18;27435:26;;27507:9;27501:4;27497:20;27493:1;27482:9;27478:17;27471:47;27535:131;27661:4;27535:131;:::i;:::-;27527:139;;27254:419;;;:::o;27679:180::-;27819:32;27815:1;27807:6;27803:14;27796:56;27679:180;:::o;27865:366::-;28007:3;28028:67;28092:2;28087:3;28028:67;:::i;:::-;28021:74;;28104:93;28193:3;28104:93;:::i;:::-;28222:2;28217:3;28213:12;28206:19;;27865:366;;;:::o;28237:419::-;28403:4;28441:2;28430:9;28426:18;28418:26;;28490:9;28484:4;28480:20;28476:1;28465:9;28461:17;28454:47;28518:131;28644:4;28518:131;:::i;:::-;28510:139;;28237:419;;;:::o;28662:222::-;28802:34;28798:1;28790:6;28786:14;28779:58;28871:5;28866:2;28858:6;28854:15;28847:30;28662:222;:::o;28890:366::-;29032:3;29053:67;29117:2;29112:3;29053:67;:::i;:::-;29046:74;;29129:93;29218:3;29129:93;:::i;:::-;29247:2;29242:3;29238:12;29231:19;;28890:366;;;:::o;29262:419::-;29428:4;29466:2;29455:9;29451:18;29443:26;;29515:9;29509:4;29505:20;29501:1;29490:9;29486:17;29479:47;29543:131;29669:4;29543:131;:::i;:::-;29535:139;;29262:419;;;:::o;29687:176::-;29719:1;29736:20;29754:1;29736:20;:::i;:::-;29731:25;;29770:20;29788:1;29770:20;:::i;:::-;29765:25;;29809:1;29799:35;;29814:18;;:::i;:::-;29799:35;29855:1;29852;29848:9;29843:14;;29687:176;;;;:::o;29869:173::-;30009:25;30005:1;29997:6;29993:14;29986:49;29869:173;:::o;30048:366::-;30190:3;30211:67;30275:2;30270:3;30211:67;:::i;:::-;30204:74;;30287:93;30376:3;30287:93;:::i;:::-;30405:2;30400:3;30396:12;30389:19;;30048:366;;;:::o;30420:419::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:142::-;30882:7;30922:58;30915:5;30911:70;30900:81;;30845:142;;;:::o;30993:185::-;31033:1;31050:20;31068:1;31050:20;:::i;:::-;31045:25;;31084:20;31102:1;31084:20;:::i;:::-;31079:25;;31123:1;31113:35;;31128:18;;:::i;:::-;31113:35;31170:1;31167;31163:9;31158:14;;30993:185;;;;:::o;31184:180::-;31232:77;31229:1;31222:88;31329:4;31326:1;31319:15;31353:4;31350:1;31343:15;31370:180;31418:77;31415:1;31408:88;31515:4;31512:1;31505:15;31539:4;31536:1;31529:15;31556:114;31623:6;31657:5;31651:12;31641:22;;31556:114;;;:::o;31676:184::-;31775:11;31809:6;31804:3;31797:19;31849:4;31844:3;31840:14;31825:29;;31676:184;;;;:::o;31866:132::-;31933:4;31956:3;31948:11;;31986:4;31981:3;31977:14;31969:22;;31866:132;;;:::o;32004:108::-;32081:24;32099:5;32081:24;:::i;:::-;32076:3;32069:37;32004:108;;:::o;32118:179::-;32187:10;32208:46;32250:3;32242:6;32208:46;:::i;:::-;32286:4;32281:3;32277:14;32263:28;;32118:179;;;;:::o;32303:113::-;32373:4;32405;32400:3;32396:14;32388:22;;32303:113;;;:::o;32452:732::-;32571:3;32600:54;32648:5;32600:54;:::i;:::-;32670:86;32749:6;32744:3;32670:86;:::i;:::-;32663:93;;32780:56;32830:5;32780:56;:::i;:::-;32859:7;32890:1;32875:284;32900:6;32897:1;32894:13;32875:284;;;32976:6;32970:13;33003:63;33062:3;33047:13;33003:63;:::i;:::-;32996:70;;33089:60;33142:6;33089:60;:::i;:::-;33079:70;;32935:224;32922:1;32919;32915:9;32910:14;;32875:284;;;32879:14;33175:3;33168:10;;32576:608;;;32452:732;;;;:::o;33190:831::-;33453:4;33491:3;33480:9;33476:19;33468:27;;33505:71;33573:1;33562:9;33558:17;33549:6;33505:71;:::i;:::-;33586:80;33662:2;33651:9;33647:18;33638:6;33586:80;:::i;:::-;33713:9;33707:4;33703:20;33698:2;33687:9;33683:18;33676:48;33741:108;33844:4;33835:6;33741:108;:::i;:::-;33733:116;;33859:72;33927:2;33916:9;33912:18;33903:6;33859:72;:::i;:::-;33941:73;34009:3;33998:9;33994:19;33985:6;33941:73;:::i;:::-;33190:831;;;;;;;;:::o
Swarm Source
ipfs://f13653948786130da53ac2573de14167e81de745481f040931175be7c2caa835
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.