More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Sell Tax | 20268058 | 121 days ago | IN | 0 ETH | 0.00015864 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00027614 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00037061 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00037061 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00037061 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00037061 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00037061 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00084295 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00084295 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00084295 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00084295 | ||||
Approve | 20268051 | 121 days ago | IN | 0 ETH | 0.00084295 | ||||
Enable Trading | 20268049 | 121 days ago | IN | 0 ETH | 0.0001972 | ||||
Approve | 20268023 | 121 days ago | IN | 0 ETH | 0.00017159 | ||||
0x60c06040 | 20268011 | 121 days ago | IN | 0 ETH | 0.02464143 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
20268064 | 121 days ago | 0 ETH | |||||
20268064 | 121 days ago | 0 ETH | |||||
20268064 | 121 days ago | 0 ETH | |||||
20268064 | 121 days ago | 0 ETH | |||||
20268064 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH | |||||
20268050 | 121 days ago | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ETHPriceToken
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-07-09 */ /* ETH Price Token This is a Social Experiment on the Blockchain The Token displays the current ETHEREUM (ETH) price as its token Name and Symbol indefinetly By calculating the current ETH price based on the ETH/USDC pool, this token serves as the only decentralized price tracker for ETH, perfectly suited within a token format. NO TG, NO WEBSITE, NO TWITTER, NO DEV JUST A Price Tracker */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.26; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; 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; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { 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 swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract ETHPriceToken is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = false; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public tokensForDev; address private USDC; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); bytes16 private constant HEX_DIGITS = "0123456789abcdef"; constructor( address _usdcAddress, address _routerAddress ) ERC20(unicode"", unicode"") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( _routerAddress ); USDC = _usdcAddress; address weth = _uniswapV2Router.WETH(); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), weth); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 20; uint256 _sellDevFee = 20; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 20_000_000 * 1e18; maxWallet = 20_000_000 * 1e18; // swapTokensAtAmount = (totalSupply * 5) / 10000; buyDevFee = _buyDevFee; buyTotalFees = buyDevFee; sellDevFee = _sellDevFee; sellTotalFees = sellDevFee; marketingWallet = address(msg.sender); // set as marketing wallet devWallet = address(msg.sender); // set as dev wallet excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function formatNumberWithCommas( string memory number ) internal pure returns (string memory) { // This function assumes `number` is a valid representation of a positive integer bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Calculate the length of the new string uint commas = (len - 1) / 3; bytes memory formatted = new bytes(len + commas); uint j = 1; // Counter for the new string for (uint i = 0; i < len; ++i) { // Copy the character from the original number formatted[len + commas - j] = numberBytes[len - i - 1]; // Insert a comma every three characters, except at the end if (i % 3 == 2 && i != len - 1) { j++; // Skip the position for the comma formatted[len + commas - j] = bytes1(","); j++; // Increment for the next number character } else { j++; // Increment for the next number character } } return string(formatted); } function formatNumberWithCommasAndDecimals( string memory number ) internal pure returns (string memory) { bytes memory numberBytes = bytes(number); uint len = numberBytes.length; // Separate the last two digits string memory decimals = new string(2); bytes memory decimalsBytes = bytes(decimals); // Boundary check: Ensure there's enough length for the decimal part if (len > 2) { decimalsBytes[0] = numberBytes[len - 2]; decimalsBytes[1] = numberBytes[len - 1]; // Create a new string for the whole number part without the last two digits string memory wholeNumberPart = new string(len - 2); bytes memory wholeNumberBytes = bytes(wholeNumberPart); for (uint i = 0; i < len - 2; i++) { wholeNumberBytes[i] = numberBytes[i]; } // Format the whole number part with commas wholeNumberPart = formatNumberWithCommas(string(wholeNumberBytes)); // Concatenate the whole number part with the decimal part return string(abi.encodePacked(wholeNumberPart, ".", decimals)); } else { // If the length is less or equal to 2, we don't have a whole number part // We assume the number is already in the format "0.xx" or "x.xx" return string(abi.encodePacked("0.", number)); } } function symbol() public view override returns (string memory) { uint256 usdcDecimals = IERC20Metadata(USDC).decimals(); address wethAddress = uniswapV2Router.WETH(); address ethLpPair = IUniswapV2Factory(uniswapV2Router.factory()) .getPair(USDC, wethAddress); (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(ethLpPair) .getReserves(); (uint256 reserveETH, uint256 reserveUSDC) = wethAddress < USDC ? (reserve0, reserve1) : (reserve1, reserve0); uint256 ethPrice = reserveUSDC.div(10 ** (usdcDecimals - 2)).div( reserveETH.div(1e18) ); string memory startString = "X: $"; return string.concat( startString, formatNumberWithCommasAndDecimals(toString(ethPrice)) ); } function name() public view override returns (string memory) { return symbol(); } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount( uint256 newAmount ) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10 ** 18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10 ** 18); } function excludeFromMaxTransaction( address updAds, bool isEx ) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyTax(uint256 _devFee) external onlyOwner { buyDevFee = _devFee; buyTotalFees = buyDevFee; require(buyTotalFees <= 99, "Must keep fees at 99% or less"); } function updateSellTax(uint256 _devFee) external onlyOwner { sellDevFee = _devFee; sellTotalFees = sellDevFee; require(sellTotalFees <= 99, "Must keep fees at 99% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet( address newMarketingWallet ) external onlyOwner { marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if ( transferDelayEnabled && to != owner() && to != address(uniswapV2Router) && !automatedMarketMakerPairs[to] ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } 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 any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForDev += fees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForDev += fees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); tokensForDev = 0; (success, ) = address(devWallet).call{value: address(this).balance}(""); } function manualSwapBack(uint256 amount) external onlyOwner { swapTokensForEth(amount); address(devWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526019600b555f600c5f6101000a81548160ff021916908315150217905550610e10600d55610708600f55600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff0219169083151502179055505f601160026101000a81548160ff021916908315150217905550600160135f6101000a81548160ff0219169083151502179055503480156100a1575f80fd5b50604051616afe380380616afe83398181016040528101906100c39190610a5f565b60405180602001604052805f81525060405180602001604052805f81525081600390816100f09190610cd7565b5080600490816101009190610cd7565b50505061011f6101146104f660201b60201c565b6104fd60201b60201c565b5f81905082601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d19190610da6565b90506101e48260016105c060201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610261573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102859190610da6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b81526004016102bf929190610de0565b6020604051808303815f875af11580156102db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ff9190610da6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061034560a05160016105c060201b60201c565b61035860a05160016106a060201b60201c565b5f601490505f601490505f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a819055506127106005826103a69190610e34565b6103b09190610ea2565b60098190555082601781905550601754601481905550816019819055506019546018819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061047461046761073e60201b60201c565b600161076660201b60201c565b61048530600161076660201b60201c565b61049861dead600161076660201b60201c565b6104b66104a961073e60201b60201c565b60016105c060201b60201c565b6104c73060016105c060201b60201c565b6104da61dead60016105c060201b60201c565b6104ea338261089460201b60201c565b50505050505050611040565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6105ce6104f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166105f261073e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063f90610f2c565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107746104f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661079861073e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e590610f2c565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108889190610f64565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f990610fc7565b60405180910390fd5b6109135f83836109f760201b60201c565b8060025f8282546109249190610fe5565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109769190610fe5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109da9190611027565b60405180910390a36109f35f83836109fc60201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a2e82610a05565b9050919050565b610a3e81610a24565b8114610a48575f80fd5b50565b5f81519050610a5981610a35565b92915050565b5f8060408385031215610a7557610a74610a01565b5b5f610a8285828601610a4b565b9250506020610a9385828601610a4b565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b1857607f821691505b602082108103610b2b57610b2a610ad4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b52565b610b978683610b52565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610bdb610bd6610bd184610baf565b610bb8565b610baf565b9050919050565b5f819050919050565b610bf483610bc1565b610c08610c0082610be2565b848454610b5e565b825550505050565b5f90565b610c1c610c10565b610c27818484610beb565b505050565b5b81811015610c4a57610c3f5f82610c14565b600181019050610c2d565b5050565b601f821115610c8f57610c6081610b31565b610c6984610b43565b81016020851015610c78578190505b610c8c610c8485610b43565b830182610c2c565b50505b505050565b5f82821c905092915050565b5f610caf5f1984600802610c94565b1980831691505092915050565b5f610cc78383610ca0565b9150826002028217905092915050565b610ce082610a9d565b67ffffffffffffffff811115610cf957610cf8610aa7565b5b610d038254610b01565b610d0e828285610c4e565b5f60209050601f831160018114610d3f575f8415610d2d578287015190505b610d378582610cbc565b865550610d9e565b601f198416610d4d86610b31565b5f5b82811015610d7457848901518255600182019150602085019450602081019050610d4f565b86831015610d915784890151610d8d601f891682610ca0565b8355505b6001600288020188555050505b505050505050565b5f60208284031215610dbb57610dba610a01565b5b5f610dc884828501610a4b565b91505092915050565b610dda81610a24565b82525050565b5f604082019050610df35f830185610dd1565b610e006020830184610dd1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3e82610baf565b9150610e4983610baf565b9250828202610e5781610baf565b91508282048414831517610e6e57610e6d610e07565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610eac82610baf565b9150610eb783610baf565b925082610ec757610ec6610e75565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f16602083610ed2565b9150610f2182610ee2565b602082019050919050565b5f6020820190508181035f830152610f4381610f0a565b9050919050565b5f8115159050919050565b610f5e81610f4a565b82525050565b5f602082019050610f775f830184610f55565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610fb1601f83610ed2565b9150610fbc82610f7d565b602082019050919050565b5f6020820190508181035f830152610fde81610fa5565b9050919050565b5f610fef82610baf565b9150610ffa83610baf565b925082820190508082111561101257611011610e07565b5b92915050565b61102181610baf565b82525050565b5f60208201905061103a5f830184611018565b92915050565b60805160a051615a6c6110925f395f81816113520152611dd101525f8181610eb7015281816119d101528181611a6101528181612c71015281816139d801528181613ab70152613ade0152615a6c5ff3fe608060405260043610610384575f3560e01c80638a8c523c116101d0578063b62496f511610101578063d257b34f1161009f578063e884f2601161006e578063e884f26014610cf1578063f11a24d314610d1b578063f2fde38b14610d45578063f8b45b0514610d6d5761038b565b8063d257b34f14610c25578063d85ba06314610c61578063dd62ed3e14610c8b578063e2f4560514610cc75761038b565b8063c0246668116100db578063c024666814610b81578063c18bc19514610ba9578063c876d0b914610bd1578063c8c8ebe414610bfb5761038b565b8063b62496f514610af3578063bbc0c74214610b2f578063bffda98214610b595761038b565b80639ec22c0e1161016e578063a457c2d711610148578063a457c2d714610a29578063a4c82a0014610a65578063a9059cbb14610a8f578063aacebbe314610acb5761038b565b80639ec22c0e146109ab5780639fccce32146109d5578063a0d82dc5146109ff5761038b565b8063924de9b7116101aa578063924de9b71461090757806395d89b411461092f5780639a7a23d6146109595780639c3b4fdc146109815761038b565b80638a8c523c1461089d5780638da5cb5b146108b35780638ea5220f146108dd5761038b565b8063313ce567116102b55780636ddd171311610253578063751039fc11610222578063751039fc146107f75780637571336a1461082157806375f0a874146108495780637bce5a04146108735761038b565b80636ddd17131461075357806370a082311461077d578063715018a6146107b9578063730c1888146107cf5761038b565b806349bd5a5e1161028f57806349bd5a5e146106995780634a62bb65146106c35780634fbee193146106ed5780636a486a8e146107295761038b565b8063313ce5671461060b5780633950935114610635578063436d3340146106715761038b565b8063184c16c51161032257806323b872dd116102fc57806323b872dd1461055157806327c8f8351461058d5780632c3e486c146105b75780632e82f1a0146105e15761038b565b8063184c16c5146104d5578063199ffc72146104ff578063203e727e146105295761038b565b806312185a391161035e57806312185a39146104315780631694505e1461045957806318160ddd146104835780631816467f146104ad5761038b565b806306fdde031461038f578063095ea7b3146103b957806310d5de53146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103a3610d97565b6040516103b091906142c8565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190614379565b610da6565b6040516103ec91906143d1565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906143ea565b610dc3565b60405161042891906143d1565b60405180910390f35b34801561043c575f80fd5b5061045760048036038101906104529190614415565b610de0565b005b348015610464575f80fd5b5061046d610eb5565b60405161047a919061449b565b60405180910390f35b34801561048e575f80fd5b50610497610ed9565b6040516104a491906144c3565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce91906143ea565b610ee2565b005b3480156104e0575f80fd5b506104e9610fa1565b6040516104f691906144c3565b60405180910390f35b34801561050a575f80fd5b50610513610fa7565b60405161052091906144c3565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190614415565b610fad565b005b34801561055c575f80fd5b50610577600480360381019061057291906144dc565b6110bc565b60405161058491906143d1565b60405180910390f35b348015610598575f80fd5b506105a16111ae565b6040516105ae919061453b565b60405180910390f35b3480156105c2575f80fd5b506105cb6111b4565b6040516105d891906144c3565b60405180910390f35b3480156105ec575f80fd5b506105f56111ba565b60405161060291906143d1565b60405180910390f35b348015610616575f80fd5b5061061f6111cc565b60405161062c919061456f565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190614379565b6111d4565b60405161066891906143d1565b60405180910390f35b34801561067c575f80fd5b5061069760048036038101906106929190614415565b61127b565b005b3480156106a4575f80fd5b506106ad611350565b6040516106ba919061453b565b60405180910390f35b3480156106ce575f80fd5b506106d7611374565b6040516106e491906143d1565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e91906143ea565b611386565b60405161072091906143d1565b60405180910390f35b348015610734575f80fd5b5061073d6113d8565b60405161074a91906144c3565b60405180910390f35b34801561075e575f80fd5b506107676113de565b60405161077491906143d1565b60405180910390f35b348015610788575f80fd5b506107a3600480360381019061079e91906143ea565b6113f1565b6040516107b091906144c3565b60405180910390f35b3480156107c4575f80fd5b506107cd611436565b005b3480156107da575f80fd5b506107f560048036038101906107f091906145b2565b6114bd565b005b348015610802575f80fd5b5061080b6115fb565b60405161081891906143d1565b60405180910390f35b34801561082c575f80fd5b5061084760048036038101906108429190614602565b611698565b005b348015610854575f80fd5b5061085d61176c565b60405161086a919061453b565b60405180910390f35b34801561087e575f80fd5b50610887611791565b60405161089491906144c3565b60405180910390f35b3480156108a8575f80fd5b506108b1611797565b005b3480156108be575f80fd5b506108c7611852565b6040516108d4919061453b565b60405180910390f35b3480156108e8575f80fd5b506108f161187a565b6040516108fe919061453b565b60405180910390f35b348015610912575f80fd5b5061092d60048036038101906109289190614640565b61189f565b005b34801561093a575f80fd5b50610943611938565b60405161095091906142c8565b60405180910390f35b348015610964575f80fd5b5061097f600480360381019061097a9190614602565b611d53565b005b34801561098c575f80fd5b50610995611e6b565b6040516109a291906144c3565b60405180910390f35b3480156109b6575f80fd5b506109bf611e71565b6040516109cc91906144c3565b60405180910390f35b3480156109e0575f80fd5b506109e9611e77565b6040516109f691906144c3565b60405180910390f35b348015610a0a575f80fd5b50610a13611e7d565b604051610a2091906144c3565b60405180910390f35b348015610a34575f80fd5b50610a4f6004803603810190610a4a9190614379565b611e83565b604051610a5c91906143d1565b60405180910390f35b348015610a70575f80fd5b50610a79611f69565b604051610a8691906144c3565b60405180910390f35b348015610a9a575f80fd5b50610ab56004803603810190610ab09190614379565b611f6f565b604051610ac291906143d1565b60405180910390f35b348015610ad6575f80fd5b50610af16004803603810190610aec91906143ea565b611f8c565b005b348015610afe575f80fd5b50610b196004803603810190610b1491906143ea565b61204b565b604051610b2691906143d1565b60405180910390f35b348015610b3a575f80fd5b50610b43612068565b604051610b5091906143d1565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190614415565b61207b565b005b348015610b8c575f80fd5b50610ba76004803603810190610ba29190614602565b61218a565b005b348015610bb4575f80fd5b50610bcf6004803603810190610bca9190614415565b6122ac565b005b348015610bdc575f80fd5b50610be56123bb565b604051610bf291906143d1565b60405180910390f35b348015610c06575f80fd5b50610c0f6123cd565b604051610c1c91906144c3565b60405180910390f35b348015610c30575f80fd5b50610c4b6004803603810190610c469190614415565b6123d3565b604051610c5891906143d1565b60405180910390f35b348015610c6c575f80fd5b50610c75612527565b604051610c8291906144c3565b60405180910390f35b348015610c96575f80fd5b50610cb16004803603810190610cac919061466b565b61252d565b604051610cbe91906144c3565b60405180910390f35b348015610cd2575f80fd5b50610cdb6125af565b604051610ce891906144c3565b60405180910390f35b348015610cfc575f80fd5b50610d056125b5565b604051610d1291906143d1565b60405180910390f35b348015610d26575f80fd5b50610d2f612652565b604051610d3c91906144c3565b60405180910390f35b348015610d50575f80fd5b50610d6b6004803603810190610d6691906143ea565b612658565b005b348015610d78575f80fd5b50610d8161274e565b604051610d8e91906144c3565b60405180910390f35b6060610da1611938565b905090565b5f610db9610db2612754565b848461275b565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b610de8612754565b73ffffffffffffffffffffffffffffffffffffffff16610e06611852565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e53906146f3565b60405180910390fd5b8060198190555060195460188190555060636018541115610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea99061475b565b60405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610eea612754565b73ffffffffffffffffffffffffffffffffffffffff16610f08611852565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f55906146f3565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610fb5612754565b73ffffffffffffffffffffffffffffffffffffffff16610fd3611852565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906146f3565b60405180910390fd5b670de0b6b3a76400006103e8600161103f610ed9565b61104991906147a6565b6110539190614814565b61105d9190614814565b81101561109f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611096906148b4565b60405180910390fd5b670de0b6b3a7640000816110b391906147a6565b60088190555050565b5f6110c884848461291e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61110f612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590614942565b60405180910390fd5b6111a28561119a612754565b85840361275b565b60019150509392505050565b61dead81565b600d5481565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6112716111e0612754565b848460015f6111ed612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461126c9190614960565b61275b565b6001905092915050565b611283612754565b73ffffffffffffffffffffffffffffffffffffffff166112a1611852565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906146f3565b60405180910390fd5b806017819055506017546014819055506063601454111561134d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113449061475b565b60405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143e612754565b73ffffffffffffffffffffffffffffffffffffffff1661145c611852565b73ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a9906146f3565b60405180910390fd5b6114bb5f613472565b565b6114c5612754565b73ffffffffffffffffffffffffffffffffffffffff166114e3611852565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906146f3565b60405180910390fd5b61025883101561157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590614a03565b60405180910390fd5b6103e8821115801561159057505f8210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614a91565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b5f611604612754565b73ffffffffffffffffffffffffffffffffffffffff16611622611852565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906146f3565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6116a0612754565b73ffffffffffffffffffffffffffffffffffffffff166116be611852565b73ffffffffffffffffffffffffffffffffffffffff1614611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906146f3565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61179f612754565b73ffffffffffffffffffffffffffffffffffffffff166117bd611852565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906146f3565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118a7612754565b73ffffffffffffffffffffffffffffffffffffffff166118c5611852565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906146f3565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60605f601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c99190614ad9565b60ff1690505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614b18565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aec9190614b18565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611b47929190614b43565b602060405180830381865afa158015611b62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b869190614b18565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611bd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf79190614be6565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f80601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c79578284611c7c565b83835b915091505f611cd8611c9f670de0b6b3a76400008561353590919063ffffffff16565b611cca60028b611caf9190614c36565b600a611cbb9190614d98565b8561353590919063ffffffff16565b61353590919063ffffffff16565b90505f6040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611d25611d208461354a565b613614565b604051602001611d36929190614e1c565b604051602081830303815290604052995050505050505050505090565b611d5b612754565b73ffffffffffffffffffffffffffffffffffffffff16611d79611852565b73ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906146f3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614eaf565b60405180910390fd5b611e67828261389d565b5050565b60175481565b60105481565b601a5481565b60195481565b5f8060015f611e90612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614f3d565b60405180910390fd5b611f5e611f55612754565b8585840361275b565b600191505092915050565b600e5481565b5f611f82611f7b612754565b848461291e565b6001905092915050565b611f94612754565b73ffffffffffffffffffffffffffffffffffffffff16611fb2611852565b73ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff906146f3565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612083612754565b73ffffffffffffffffffffffffffffffffffffffff166120a1611852565b73ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee906146f3565b60405180910390fd5b6121008161393b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161214590614f88565b5f6040518083038185875af1925050503d805f811461217f576040519150601f19603f3d011682016040523d82523d5f602084013e612184565b606091505b50505050565b612192612754565b73ffffffffffffffffffffffffffffffffffffffff166121b0611852565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146f3565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122a091906143d1565b60405180910390a25050565b6122b4612754565b73ffffffffffffffffffffffffffffffffffffffff166122d2611852565b73ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906146f3565b60405180910390fd5b670de0b6b3a76400006103e8600561233e610ed9565b61234891906147a6565b6123529190614814565b61235c9190614814565b81101561239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061500c565b60405180910390fd5b670de0b6b3a7640000816123b291906147a6565b600a8190555050565b60135f9054906101000a900460ff1681565b60085481565b5f6123dc612754565b73ffffffffffffffffffffffffffffffffffffffff166123fa611852565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612447906146f3565b60405180910390fd5b620186a0600161245e610ed9565b61246891906147a6565b6124729190614814565b8210156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab9061509a565b60405180910390fd5b6103e860056124c1610ed9565b6124cb91906147a6565b6124d59190614814565b821115612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90615128565b60405180910390fd5b8160098190555060019050919050565b60145481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6125be612754565b73ffffffffffffffffffffffffffffffffffffffff166125dc611852565b73ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612629906146f3565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b60165481565b612660612754565b73ffffffffffffffffffffffffffffffffffffffff1661267e611852565b73ffffffffffffffffffffffffffffffffffffffff16146126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906146f3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906151b6565b60405180910390fd5b61274b81613472565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090615244565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e906152d2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161291191906144c3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390615360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f1906153ee565b60405180910390fd5b5f8103612a1157612a0c83835f613b6e565b61346d565b60115f9054906101000a900460ff16156130b557612a2d611852565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a9b5750612a6b611852565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ad357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b0d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b265750600560149054906101000a900460ff16155b156130b457601160019054906101000a900460ff16612c1a57601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bda5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1090615456565b60405180910390fd5b5b60135f9054906101000a900460ff168015612c685750612c38611852565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cc057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d135750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dda574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e9061550a565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e775750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f1e57600854811115612ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb890615598565b60405180910390fd5b600a54612ecd836113f1565b82612ed89190614960565b1115612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615600565b60405180910390fd5b6130b3565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fbb5750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561300a57600854811115613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc9061568e565b60405180910390fd5b6130b2565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166130b157600a54613064836113f1565b8261306f9190614960565b11156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a790615600565b60405180910390fd5b5b5b5b5b5b5f6130bf306113f1565b90505f60095482101590508080156130e35750601160029054906101000a900460ff165b80156130fc5750600560149054906101000a900460ff16155b801561314f5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131a25750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131f55750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613238576001600560146101000a81548160ff02191690831515021790555061321d613de3565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132e75750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132f0575f90505b5f811561345d57601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561334e57505f601854115b1561339a5761337b606461336d60185488613edd90919063ffffffff16565b61353590919063ffffffff16565b905080601a5f82825461338e9190614960565b9250508190555061343a565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133f157505f601454115b156134395761341e606461341060145488613edd90919063ffffffff16565b61353590919063ffffffff16565b905080601a5f8282546134319190614960565b925050819055505b5b5f81111561344e5761344d873083613b6e565b5b808561345a9190614c36565b94505b613468878787613b6e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836135429190614814565b905092915050565b60605f600161355884613ef2565b0190505f8167ffffffffffffffff811115613576576135756156ac565b5b6040519080825280601f01601f1916602001820160405280156135a85781602001600182028036833780820191505090505b5090505f82602001820190505b600115613609578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816135fe576135fd6147e7565b5b0494505f85036135b5575b819350505050919050565b60605f8290505f815190505f600267ffffffffffffffff81111561363b5761363a6156ac565b5b6040519080825280601f01601f19166020018201604052801561366d5781602001600182028036833780820191505090505b5090505f8190506002831115613871578360028461368b9190614c36565b8151811061369c5761369b6156d9565b5b602001015160f81c60f81b815f815181106136ba576136b96156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350836001846136f69190614c36565b81518110613707576137066156d9565b5b602001015160f81c60f81b81600181518110613726576137256156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6002846137629190614c36565b67ffffffffffffffff81111561377b5761377a6156ac565b5b6040519080825280601f01601f1916602001820160405280156137ad5781602001600182028036833780820191505090505b5090505f8190505f5b6002866137c39190614c36565b811015613836578681815181106137dd576137dc6156d9565b5b602001015160f81c60f81b8282815181106137fb576137fa6156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806001019150506137b6565b5061384081614043565b91508184604051602001613855929190615750565b6040516020818303038152906040529650505050505050613898565b8560405160200161388291906157c8565b6040516020818303038152906040529450505050505b919050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff811115613957576139566156ac565b5b6040519080825280602002602001820160405280156139855781602001602082028036833780820191505090505b50905030815f8151811061399c5761399b6156d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a639190614b18565b81600181518110613a7757613a766156d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613adc307f00000000000000000000000000000000000000000000000000000000000000008461275b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b3d9594939291906158d9565b5f604051808303815f87803b158015613b54575f80fd5b505af1158015613b66573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd390615360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c41906153ee565b60405180910390fd5b613c5583838361424e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ccf906159a1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613d669190614960565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dca91906144c3565b60405180910390a3613ddd848484614253565b50505050565b5f613ded306113f1565b90505f601a5490505f80831480613e0357505f82145b15613e1057505050613edb565b6014600954613e1f91906147a6565b831115613e38576014600954613e3591906147a6565b92505b5f839050613e458161393b565b5f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e9190614f88565b5f6040518083038185875af1925050503d805f8114613ecb576040519150601f19603f3d011682016040523d82523d5f602084013e613ed0565b606091505b505080925050505050505b565b5f8183613eea91906147a6565b905092915050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613f4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613f4457613f436147e7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f8b576d04ee2d6d415b85acef81000000008381613f8157613f806147e7565b5b0492506020810190505b662386f26fc100008310613fba57662386f26fc100008381613fb057613faf6147e7565b5b0492506010810190505b6305f5e1008310613fe3576305f5e1008381613fd957613fd86147e7565b5b0492506008810190505b6127108310614008576127108381613ffe57613ffd6147e7565b5b0492506004810190505b6064831061402b5760648381614021576140206147e7565b5b0492506002810190505b600a831061403a576001810190505b80915050919050565b60605f8290505f815190505f600360018361405e9190614c36565b6140689190614814565b90505f81836140779190614960565b67ffffffffffffffff8111156140905761408f6156ac565b5b6040519080825280601f01601f1916602001820160405280156140c25781602001600182028036833780820191505090505b5090505f600190505f5b848110156142405785600182876140e39190614c36565b6140ed9190614c36565b815181106140fe576140fd6156d9565b5b602001015160f81c60f81b838386886141179190614960565b6141219190614c36565b81518110614132576141316156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600260038261416f91906159bf565b14801561418857506001856141849190614c36565b8114155b15614226578180614198906159ef565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886141ca9190614960565b6141d49190614c36565b815181106141e5576141e46156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350818061421e906159ef565b925050614235565b8180614231906159ef565b9250505b8060010190506140cc565b508195505050505050919050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61429a82614258565b6142a48185614262565b93506142b4818560208601614272565b6142bd81614280565b840191505092915050565b5f6020820190508181035f8301526142e08184614290565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614315826142ec565b9050919050565b6143258161430b565b811461432f575f80fd5b50565b5f813590506143408161431c565b92915050565b5f819050919050565b61435881614346565b8114614362575f80fd5b50565b5f813590506143738161434f565b92915050565b5f806040838503121561438f5761438e6142e8565b5b5f61439c85828601614332565b92505060206143ad85828601614365565b9150509250929050565b5f8115159050919050565b6143cb816143b7565b82525050565b5f6020820190506143e45f8301846143c2565b92915050565b5f602082840312156143ff576143fe6142e8565b5b5f61440c84828501614332565b91505092915050565b5f6020828403121561442a576144296142e8565b5b5f61443784828501614365565b91505092915050565b5f819050919050565b5f61446361445e614459846142ec565b614440565b6142ec565b9050919050565b5f61447482614449565b9050919050565b5f6144858261446a565b9050919050565b6144958161447b565b82525050565b5f6020820190506144ae5f83018461448c565b92915050565b6144bd81614346565b82525050565b5f6020820190506144d65f8301846144b4565b92915050565b5f805f606084860312156144f3576144f26142e8565b5b5f61450086828701614332565b935050602061451186828701614332565b925050604061452286828701614365565b9150509250925092565b6145358161430b565b82525050565b5f60208201905061454e5f83018461452c565b92915050565b5f60ff82169050919050565b61456981614554565b82525050565b5f6020820190506145825f830184614560565b92915050565b614591816143b7565b811461459b575f80fd5b50565b5f813590506145ac81614588565b92915050565b5f805f606084860312156145c9576145c86142e8565b5b5f6145d686828701614365565b93505060206145e786828701614365565b92505060406145f88682870161459e565b9150509250925092565b5f8060408385031215614618576146176142e8565b5b5f61462585828601614332565b92505060206146368582860161459e565b9150509250929050565b5f60208284031215614655576146546142e8565b5b5f6146628482850161459e565b91505092915050565b5f8060408385031215614681576146806142e8565b5b5f61468e85828601614332565b925050602061469f85828601614332565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6146dd602083614262565b91506146e8826146a9565b602082019050919050565b5f6020820190508181035f83015261470a816146d1565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f614745601d83614262565b915061475082614711565b602082019050919050565b5f6020820190508181035f83015261477281614739565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147b082614346565b91506147bb83614346565b92508282026147c981614346565b915082820484148315176147e0576147df614779565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61481e82614346565b915061482983614346565b925082614839576148386147e7565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61489e602f83614262565b91506148a982614844565b604082019050919050565b5f6020820190508181035f8301526148cb81614892565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61492c602883614262565b9150614937826148d2565b604082019050919050565b5f6020820190508181035f83015261495981614920565b9050919050565b5f61496a82614346565b915061497583614346565b925082820190508082111561498d5761498c614779565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f6149ed603383614262565b91506149f882614993565b604082019050919050565b5f6020820190508181035f830152614a1a816149e1565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f614a7b603083614262565b9150614a8682614a21565b604082019050919050565b5f6020820190508181035f830152614aa881614a6f565b9050919050565b614ab881614554565b8114614ac2575f80fd5b50565b5f81519050614ad381614aaf565b92915050565b5f60208284031215614aee57614aed6142e8565b5b5f614afb84828501614ac5565b91505092915050565b5f81519050614b128161431c565b92915050565b5f60208284031215614b2d57614b2c6142e8565b5b5f614b3a84828501614b04565b91505092915050565b5f604082019050614b565f83018561452c565b614b63602083018461452c565b9392505050565b5f6dffffffffffffffffffffffffffff82169050919050565b614b8c81614b6a565b8114614b96575f80fd5b50565b5f81519050614ba781614b83565b92915050565b5f63ffffffff82169050919050565b614bc581614bad565b8114614bcf575f80fd5b50565b5f81519050614be081614bbc565b92915050565b5f805f60608486031215614bfd57614bfc6142e8565b5b5f614c0a86828701614b99565b9350506020614c1b86828701614b99565b9250506040614c2c86828701614bd2565b9150509250925092565b5f614c4082614346565b9150614c4b83614346565b9250828203905081811115614c6357614c62614779565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115614cbe57808604811115614c9a57614c99614779565b5b6001851615614ca95780820291505b8081029050614cb785614c69565b9450614c7e565b94509492505050565b5f82614cd65760019050614d91565b81614ce3575f9050614d91565b8160018114614cf95760028114614d0357614d32565b6001915050614d91565b60ff841115614d1557614d14614779565b5b8360020a915084821115614d2c57614d2b614779565b5b50614d91565b5060208310610133831016604e8410600b8410161715614d675782820a905083811115614d6257614d61614779565b5b614d91565b614d748484846001614c75565b92509050818404811115614d8b57614d8a614779565b5b81810290505b9392505050565b5f614da282614346565b9150614dad83614346565b9250614dda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614cc7565b905092915050565b5f81905092915050565b5f614df682614258565b614e008185614de2565b9350614e10818560208601614272565b80840191505092915050565b5f614e278285614dec565b9150614e338284614dec565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614e99603983614262565b9150614ea482614e3f565b604082019050919050565b5f6020820190508181035f830152614ec681614e8d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614f27602583614262565b9150614f3282614ecd565b604082019050919050565b5f6020820190508181035f830152614f5481614f1b565b9050919050565b5f81905092915050565b50565b5f614f735f83614f5b565b9150614f7e82614f65565b5f82019050919050565b5f614f9282614f68565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614ff6602483614262565b915061500182614f9c565b604082019050919050565b5f6020820190508181035f83015261502381614fea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615084603583614262565b915061508f8261502a565b604082019050919050565b5f6020820190508181035f8301526150b181615078565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f615112603483614262565b915061511d826150b8565b604082019050919050565b5f6020820190508181035f83015261513f81615106565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151a0602683614262565b91506151ab82615146565b604082019050919050565b5f6020820190508181035f8301526151cd81615194565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61522e602483614262565b9150615239826151d4565b604082019050919050565b5f6020820190508181035f83015261525b81615222565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152bc602283614262565b91506152c782615262565b604082019050919050565b5f6020820190508181035f8301526152e9816152b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61534a602583614262565b9150615355826152f0565b604082019050919050565b5f6020820190508181035f8301526153778161533e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153d8602383614262565b91506153e38261537e565b604082019050919050565b5f6020820190508181035f830152615405816153cc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615440601683614262565b915061544b8261540c565b602082019050919050565b5f6020820190508181035f83015261546d81615434565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6154f4604983614262565b91506154ff82615474565b606082019050919050565b5f6020820190508181035f830152615521816154e8565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615582603583614262565b915061558d82615528565b604082019050919050565b5f6020820190508181035f8301526155af81615576565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6155ea601383614262565b91506155f5826155b6565b602082019050919050565b5f6020820190508181035f830152615617816155de565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615678603683614262565b91506156838261561e565b604082019050919050565b5f6020820190508181035f8301526156a58161566c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61573a600183614de2565b915061574582615706565b600182019050919050565b5f61575b8285614dec565b91506157668261572e565b91506157728284614dec565b91508190509392505050565b7f302e0000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157b2600283614de2565b91506157bd8261577e565b600282019050919050565b5f6157d2826157a6565b91506157de8284614dec565b915081905092915050565b5f819050919050565b5f61580c615807615802846157e9565b614440565b614346565b9050919050565b61581c816157f2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6158548161430b565b82525050565b5f615865838361584b565b60208301905092915050565b5f602082019050919050565b5f61588782615822565b615891818561582c565b935061589c8361583c565b805f5b838110156158cc5781516158b3888261585a565b97506158be83615871565b92505060018101905061589f565b5085935050505092915050565b5f60a0820190506158ec5f8301886144b4565b6158f96020830187615813565b818103604083015261590b818661587d565b905061591a606083018561452c565b61592760808301846144b4565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61598b602683614262565b915061599682615931565b604082019050919050565b5f6020820190508181035f8301526159b88161597f565b9050919050565b5f6159c982614346565b91506159d483614346565b9250826159e4576159e36147e7565b5b828206905092915050565b5f6159f982614346565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a2b57615a2a614779565b5b60018201905091905056fea26469706673582212205847d85d01320d0d8f012fbfd52c05d77765edab6e09190a15203519d2f48b5764736f6c634300081a0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x608060405260043610610384575f3560e01c80638a8c523c116101d0578063b62496f511610101578063d257b34f1161009f578063e884f2601161006e578063e884f26014610cf1578063f11a24d314610d1b578063f2fde38b14610d45578063f8b45b0514610d6d5761038b565b8063d257b34f14610c25578063d85ba06314610c61578063dd62ed3e14610c8b578063e2f4560514610cc75761038b565b8063c0246668116100db578063c024666814610b81578063c18bc19514610ba9578063c876d0b914610bd1578063c8c8ebe414610bfb5761038b565b8063b62496f514610af3578063bbc0c74214610b2f578063bffda98214610b595761038b565b80639ec22c0e1161016e578063a457c2d711610148578063a457c2d714610a29578063a4c82a0014610a65578063a9059cbb14610a8f578063aacebbe314610acb5761038b565b80639ec22c0e146109ab5780639fccce32146109d5578063a0d82dc5146109ff5761038b565b8063924de9b7116101aa578063924de9b71461090757806395d89b411461092f5780639a7a23d6146109595780639c3b4fdc146109815761038b565b80638a8c523c1461089d5780638da5cb5b146108b35780638ea5220f146108dd5761038b565b8063313ce567116102b55780636ddd171311610253578063751039fc11610222578063751039fc146107f75780637571336a1461082157806375f0a874146108495780637bce5a04146108735761038b565b80636ddd17131461075357806370a082311461077d578063715018a6146107b9578063730c1888146107cf5761038b565b806349bd5a5e1161028f57806349bd5a5e146106995780634a62bb65146106c35780634fbee193146106ed5780636a486a8e146107295761038b565b8063313ce5671461060b5780633950935114610635578063436d3340146106715761038b565b8063184c16c51161032257806323b872dd116102fc57806323b872dd1461055157806327c8f8351461058d5780632c3e486c146105b75780632e82f1a0146105e15761038b565b8063184c16c5146104d5578063199ffc72146104ff578063203e727e146105295761038b565b806312185a391161035e57806312185a39146104315780631694505e1461045957806318160ddd146104835780631816467f146104ad5761038b565b806306fdde031461038f578063095ea7b3146103b957806310d5de53146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103a3610d97565b6040516103b091906142c8565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190614379565b610da6565b6040516103ec91906143d1565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906143ea565b610dc3565b60405161042891906143d1565b60405180910390f35b34801561043c575f80fd5b5061045760048036038101906104529190614415565b610de0565b005b348015610464575f80fd5b5061046d610eb5565b60405161047a919061449b565b60405180910390f35b34801561048e575f80fd5b50610497610ed9565b6040516104a491906144c3565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce91906143ea565b610ee2565b005b3480156104e0575f80fd5b506104e9610fa1565b6040516104f691906144c3565b60405180910390f35b34801561050a575f80fd5b50610513610fa7565b60405161052091906144c3565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190614415565b610fad565b005b34801561055c575f80fd5b50610577600480360381019061057291906144dc565b6110bc565b60405161058491906143d1565b60405180910390f35b348015610598575f80fd5b506105a16111ae565b6040516105ae919061453b565b60405180910390f35b3480156105c2575f80fd5b506105cb6111b4565b6040516105d891906144c3565b60405180910390f35b3480156105ec575f80fd5b506105f56111ba565b60405161060291906143d1565b60405180910390f35b348015610616575f80fd5b5061061f6111cc565b60405161062c919061456f565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190614379565b6111d4565b60405161066891906143d1565b60405180910390f35b34801561067c575f80fd5b5061069760048036038101906106929190614415565b61127b565b005b3480156106a4575f80fd5b506106ad611350565b6040516106ba919061453b565b60405180910390f35b3480156106ce575f80fd5b506106d7611374565b6040516106e491906143d1565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e91906143ea565b611386565b60405161072091906143d1565b60405180910390f35b348015610734575f80fd5b5061073d6113d8565b60405161074a91906144c3565b60405180910390f35b34801561075e575f80fd5b506107676113de565b60405161077491906143d1565b60405180910390f35b348015610788575f80fd5b506107a3600480360381019061079e91906143ea565b6113f1565b6040516107b091906144c3565b60405180910390f35b3480156107c4575f80fd5b506107cd611436565b005b3480156107da575f80fd5b506107f560048036038101906107f091906145b2565b6114bd565b005b348015610802575f80fd5b5061080b6115fb565b60405161081891906143d1565b60405180910390f35b34801561082c575f80fd5b5061084760048036038101906108429190614602565b611698565b005b348015610854575f80fd5b5061085d61176c565b60405161086a919061453b565b60405180910390f35b34801561087e575f80fd5b50610887611791565b60405161089491906144c3565b60405180910390f35b3480156108a8575f80fd5b506108b1611797565b005b3480156108be575f80fd5b506108c7611852565b6040516108d4919061453b565b60405180910390f35b3480156108e8575f80fd5b506108f161187a565b6040516108fe919061453b565b60405180910390f35b348015610912575f80fd5b5061092d60048036038101906109289190614640565b61189f565b005b34801561093a575f80fd5b50610943611938565b60405161095091906142c8565b60405180910390f35b348015610964575f80fd5b5061097f600480360381019061097a9190614602565b611d53565b005b34801561098c575f80fd5b50610995611e6b565b6040516109a291906144c3565b60405180910390f35b3480156109b6575f80fd5b506109bf611e71565b6040516109cc91906144c3565b60405180910390f35b3480156109e0575f80fd5b506109e9611e77565b6040516109f691906144c3565b60405180910390f35b348015610a0a575f80fd5b50610a13611e7d565b604051610a2091906144c3565b60405180910390f35b348015610a34575f80fd5b50610a4f6004803603810190610a4a9190614379565b611e83565b604051610a5c91906143d1565b60405180910390f35b348015610a70575f80fd5b50610a79611f69565b604051610a8691906144c3565b60405180910390f35b348015610a9a575f80fd5b50610ab56004803603810190610ab09190614379565b611f6f565b604051610ac291906143d1565b60405180910390f35b348015610ad6575f80fd5b50610af16004803603810190610aec91906143ea565b611f8c565b005b348015610afe575f80fd5b50610b196004803603810190610b1491906143ea565b61204b565b604051610b2691906143d1565b60405180910390f35b348015610b3a575f80fd5b50610b43612068565b604051610b5091906143d1565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190614415565b61207b565b005b348015610b8c575f80fd5b50610ba76004803603810190610ba29190614602565b61218a565b005b348015610bb4575f80fd5b50610bcf6004803603810190610bca9190614415565b6122ac565b005b348015610bdc575f80fd5b50610be56123bb565b604051610bf291906143d1565b60405180910390f35b348015610c06575f80fd5b50610c0f6123cd565b604051610c1c91906144c3565b60405180910390f35b348015610c30575f80fd5b50610c4b6004803603810190610c469190614415565b6123d3565b604051610c5891906143d1565b60405180910390f35b348015610c6c575f80fd5b50610c75612527565b604051610c8291906144c3565b60405180910390f35b348015610c96575f80fd5b50610cb16004803603810190610cac919061466b565b61252d565b604051610cbe91906144c3565b60405180910390f35b348015610cd2575f80fd5b50610cdb6125af565b604051610ce891906144c3565b60405180910390f35b348015610cfc575f80fd5b50610d056125b5565b604051610d1291906143d1565b60405180910390f35b348015610d26575f80fd5b50610d2f612652565b604051610d3c91906144c3565b60405180910390f35b348015610d50575f80fd5b50610d6b6004803603810190610d6691906143ea565b612658565b005b348015610d78575f80fd5b50610d8161274e565b604051610d8e91906144c3565b60405180910390f35b6060610da1611938565b905090565b5f610db9610db2612754565b848461275b565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b610de8612754565b73ffffffffffffffffffffffffffffffffffffffff16610e06611852565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e53906146f3565b60405180910390fd5b8060198190555060195460188190555060636018541115610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea99061475b565b60405180910390fd5b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610eea612754565b73ffffffffffffffffffffffffffffffffffffffff16610f08611852565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f55906146f3565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b610fb5612754565b73ffffffffffffffffffffffffffffffffffffffff16610fd3611852565b73ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611020906146f3565b60405180910390fd5b670de0b6b3a76400006103e8600161103f610ed9565b61104991906147a6565b6110539190614814565b61105d9190614814565b81101561109f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611096906148b4565b60405180910390fd5b670de0b6b3a7640000816110b391906147a6565b60088190555050565b5f6110c884848461291e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61110f612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590614942565b60405180910390fd5b6111a28561119a612754565b85840361275b565b60019150509392505050565b61dead81565b600d5481565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6112716111e0612754565b848460015f6111ed612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461126c9190614960565b61275b565b6001905092915050565b611283612754565b73ffffffffffffffffffffffffffffffffffffffff166112a1611852565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906146f3565b60405180910390fd5b806017819055506017546014819055506063601454111561134d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113449061475b565b60405180910390fd5b50565b7f0000000000000000000000006603d4b092666ae4b512e9e3a11643279eecad9581565b60115f9054906101000a900460ff1681565b5f601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143e612754565b73ffffffffffffffffffffffffffffffffffffffff1661145c611852565b73ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a9906146f3565b60405180910390fd5b6114bb5f613472565b565b6114c5612754565b73ffffffffffffffffffffffffffffffffffffffff166114e3611852565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906146f3565b60405180910390fd5b61025883101561157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590614a03565b60405180910390fd5b6103e8821115801561159057505f8210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614a91565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b5f611604612754565b73ffffffffffffffffffffffffffffffffffffffff16611622611852565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906146f3565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6116a0612754565b73ffffffffffffffffffffffffffffffffffffffff166116be611852565b73ffffffffffffffffffffffffffffffffffffffff1614611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906146f3565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61179f612754565b73ffffffffffffffffffffffffffffffffffffffff166117bd611852565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906146f3565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118a7612754565b73ffffffffffffffffffffffffffffffffffffffff166118c5611852565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611912906146f3565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60605f601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c99190614ad9565b60ff1690505f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614b18565b90505f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aec9190614b18565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611b47929190614b43565b602060405180830381865afa158015611b62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b869190614b18565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611bd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf79190614be6565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f80601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610611c79578284611c7c565b83835b915091505f611cd8611c9f670de0b6b3a76400008561353590919063ffffffff16565b611cca60028b611caf9190614c36565b600a611cbb9190614d98565b8561353590919063ffffffff16565b61353590919063ffffffff16565b90505f6040518060400160405280600481526020017f583a202400000000000000000000000000000000000000000000000000000000815250905080611d25611d208461354a565b613614565b604051602001611d36929190614e1c565b604051602081830303815290604052995050505050505050505090565b611d5b612754565b73ffffffffffffffffffffffffffffffffffffffff16611d79611852565b73ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906146f3565b60405180910390fd5b7f0000000000000000000000006603d4b092666ae4b512e9e3a11643279eecad9573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614eaf565b60405180910390fd5b611e67828261389d565b5050565b60175481565b60105481565b601a5481565b60195481565b5f8060015f611e90612754565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614f3d565b60405180910390fd5b611f5e611f55612754565b8585840361275b565b600191505092915050565b600e5481565b5f611f82611f7b612754565b848461291e565b6001905092915050565b611f94612754565b73ffffffffffffffffffffffffffffffffffffffff16611fb2611852565b73ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff906146f3565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b612083612754565b73ffffffffffffffffffffffffffffffffffffffff166120a1611852565b73ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee906146f3565b60405180910390fd5b6121008161393b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161214590614f88565b5f6040518083038185875af1925050503d805f811461217f576040519150601f19603f3d011682016040523d82523d5f602084013e612184565b606091505b50505050565b612192612754565b73ffffffffffffffffffffffffffffffffffffffff166121b0611852565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146f3565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122a091906143d1565b60405180910390a25050565b6122b4612754565b73ffffffffffffffffffffffffffffffffffffffff166122d2611852565b73ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f906146f3565b60405180910390fd5b670de0b6b3a76400006103e8600561233e610ed9565b61234891906147a6565b6123529190614814565b61235c9190614814565b81101561239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061500c565b60405180910390fd5b670de0b6b3a7640000816123b291906147a6565b600a8190555050565b60135f9054906101000a900460ff1681565b60085481565b5f6123dc612754565b73ffffffffffffffffffffffffffffffffffffffff166123fa611852565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612447906146f3565b60405180910390fd5b620186a0600161245e610ed9565b61246891906147a6565b6124729190614814565b8210156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab9061509a565b60405180910390fd5b6103e860056124c1610ed9565b6124cb91906147a6565b6124d59190614814565b821115612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90615128565b60405180910390fd5b8160098190555060019050919050565b60145481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6125be612754565b73ffffffffffffffffffffffffffffffffffffffff166125dc611852565b73ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612629906146f3565b60405180910390fd5b5f60135f6101000a81548160ff0219169083151502179055506001905090565b60165481565b612660612754565b73ffffffffffffffffffffffffffffffffffffffff1661267e611852565b73ffffffffffffffffffffffffffffffffffffffff16146126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906146f3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906151b6565b60405180910390fd5b61274b81613472565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090615244565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e906152d2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161291191906144c3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390615360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f1906153ee565b60405180910390fd5b5f8103612a1157612a0c83835f613b6e565b61346d565b60115f9054906101000a900460ff16156130b557612a2d611852565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a9b5750612a6b611852565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ad357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b0d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b265750600560149054906101000a900460ff16155b156130b457601160019054906101000a900460ff16612c1a57601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bda5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1090615456565b60405180910390fd5b5b60135f9054906101000a900460ff168015612c685750612c38611852565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cc057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d135750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dda574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e9061550a565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e775750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f1e57600854811115612ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb890615598565b60405180910390fd5b600a54612ecd836113f1565b82612ed89190614960565b1115612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090615600565b60405180910390fd5b6130b3565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fbb5750601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561300a57600854811115613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc9061568e565b60405180910390fd5b6130b2565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166130b157600a54613064836113f1565b8261306f9190614960565b11156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a790615600565b60405180910390fd5b5b5b5b5b5b5f6130bf306113f1565b90505f60095482101590508080156130e35750601160029054906101000a900460ff165b80156130fc5750600560149054906101000a900460ff16155b801561314f5750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131a25750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131f55750601c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613238576001600560146101000a81548160ff02191690831515021790555061321d613de3565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132e75750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132f0575f90505b5f811561345d57601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561334e57505f601854115b1561339a5761337b606461336d60185488613edd90919063ffffffff16565b61353590919063ffffffff16565b905080601a5f82825461338e9190614960565b9250508190555061343a565b601e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133f157505f601454115b156134395761341e606461341060145488613edd90919063ffffffff16565b61353590919063ffffffff16565b905080601a5f8282546134319190614960565b925050819055505b5b5f81111561344e5761344d873083613b6e565b5b808561345a9190614c36565b94505b613468878787613b6e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836135429190614814565b905092915050565b60605f600161355884613ef2565b0190505f8167ffffffffffffffff811115613576576135756156ac565b5b6040519080825280601f01601f1916602001820160405280156135a85781602001600182028036833780820191505090505b5090505f82602001820190505b600115613609578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816135fe576135fd6147e7565b5b0494505f85036135b5575b819350505050919050565b60605f8290505f815190505f600267ffffffffffffffff81111561363b5761363a6156ac565b5b6040519080825280601f01601f19166020018201604052801561366d5781602001600182028036833780820191505090505b5090505f8190506002831115613871578360028461368b9190614c36565b8151811061369c5761369b6156d9565b5b602001015160f81c60f81b815f815181106136ba576136b96156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350836001846136f69190614c36565b81518110613707576137066156d9565b5b602001015160f81c60f81b81600181518110613726576137256156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6002846137629190614c36565b67ffffffffffffffff81111561377b5761377a6156ac565b5b6040519080825280601f01601f1916602001820160405280156137ad5781602001600182028036833780820191505090505b5090505f8190505f5b6002866137c39190614c36565b811015613836578681815181106137dd576137dc6156d9565b5b602001015160f81c60f81b8282815181106137fb576137fa6156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806001019150506137b6565b5061384081614043565b91508184604051602001613855929190615750565b6040516020818303038152906040529650505050505050613898565b8560405160200161388291906157c8565b6040516020818303038152906040529450505050505b919050565b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff811115613957576139566156ac565b5b6040519080825280602002602001820160405280156139855781602001602082028036833780820191505090505b50905030815f8151811061399c5761399b6156d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a639190614b18565b81600181518110613a7757613a766156d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613adc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461275b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b3d9594939291906158d9565b5f604051808303815f87803b158015613b54575f80fd5b505af1158015613b66573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd390615360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c41906153ee565b60405180910390fd5b613c5583838361424e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ccf906159a1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613d669190614960565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dca91906144c3565b60405180910390a3613ddd848484614253565b50505050565b5f613ded306113f1565b90505f601a5490505f80831480613e0357505f82145b15613e1057505050613edb565b6014600954613e1f91906147a6565b831115613e38576014600954613e3591906147a6565b92505b5f839050613e458161393b565b5f601a8190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e9190614f88565b5f6040518083038185875af1925050503d805f8114613ecb576040519150601f19603f3d011682016040523d82523d5f602084013e613ed0565b606091505b505080925050505050505b565b5f8183613eea91906147a6565b905092915050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613f4e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613f4457613f436147e7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f8b576d04ee2d6d415b85acef81000000008381613f8157613f806147e7565b5b0492506020810190505b662386f26fc100008310613fba57662386f26fc100008381613fb057613faf6147e7565b5b0492506010810190505b6305f5e1008310613fe3576305f5e1008381613fd957613fd86147e7565b5b0492506008810190505b6127108310614008576127108381613ffe57613ffd6147e7565b5b0492506004810190505b6064831061402b5760648381614021576140206147e7565b5b0492506002810190505b600a831061403a576001810190505b80915050919050565b60605f8290505f815190505f600360018361405e9190614c36565b6140689190614814565b90505f81836140779190614960565b67ffffffffffffffff8111156140905761408f6156ac565b5b6040519080825280601f01601f1916602001820160405280156140c25781602001600182028036833780820191505090505b5090505f600190505f5b848110156142405785600182876140e39190614c36565b6140ed9190614c36565b815181106140fe576140fd6156d9565b5b602001015160f81c60f81b838386886141179190614960565b6141219190614c36565b81518110614132576141316156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600260038261416f91906159bf565b14801561418857506001856141849190614c36565b8114155b15614226578180614198906159ef565b9250507f2c00000000000000000000000000000000000000000000000000000000000000838386886141ca9190614960565b6141d49190614c36565b815181106141e5576141e46156d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350818061421e906159ef565b925050614235565b8180614231906159ef565b9250505b8060010190506140cc565b508195505050505050919050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61429a82614258565b6142a48185614262565b93506142b4818560208601614272565b6142bd81614280565b840191505092915050565b5f6020820190508181035f8301526142e08184614290565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614315826142ec565b9050919050565b6143258161430b565b811461432f575f80fd5b50565b5f813590506143408161431c565b92915050565b5f819050919050565b61435881614346565b8114614362575f80fd5b50565b5f813590506143738161434f565b92915050565b5f806040838503121561438f5761438e6142e8565b5b5f61439c85828601614332565b92505060206143ad85828601614365565b9150509250929050565b5f8115159050919050565b6143cb816143b7565b82525050565b5f6020820190506143e45f8301846143c2565b92915050565b5f602082840312156143ff576143fe6142e8565b5b5f61440c84828501614332565b91505092915050565b5f6020828403121561442a576144296142e8565b5b5f61443784828501614365565b91505092915050565b5f819050919050565b5f61446361445e614459846142ec565b614440565b6142ec565b9050919050565b5f61447482614449565b9050919050565b5f6144858261446a565b9050919050565b6144958161447b565b82525050565b5f6020820190506144ae5f83018461448c565b92915050565b6144bd81614346565b82525050565b5f6020820190506144d65f8301846144b4565b92915050565b5f805f606084860312156144f3576144f26142e8565b5b5f61450086828701614332565b935050602061451186828701614332565b925050604061452286828701614365565b9150509250925092565b6145358161430b565b82525050565b5f60208201905061454e5f83018461452c565b92915050565b5f60ff82169050919050565b61456981614554565b82525050565b5f6020820190506145825f830184614560565b92915050565b614591816143b7565b811461459b575f80fd5b50565b5f813590506145ac81614588565b92915050565b5f805f606084860312156145c9576145c86142e8565b5b5f6145d686828701614365565b93505060206145e786828701614365565b92505060406145f88682870161459e565b9150509250925092565b5f8060408385031215614618576146176142e8565b5b5f61462585828601614332565b92505060206146368582860161459e565b9150509250929050565b5f60208284031215614655576146546142e8565b5b5f6146628482850161459e565b91505092915050565b5f8060408385031215614681576146806142e8565b5b5f61468e85828601614332565b925050602061469f85828601614332565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6146dd602083614262565b91506146e8826146a9565b602082019050919050565b5f6020820190508181035f83015261470a816146d1565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f614745601d83614262565b915061475082614711565b602082019050919050565b5f6020820190508181035f83015261477281614739565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147b082614346565b91506147bb83614346565b92508282026147c981614346565b915082820484148315176147e0576147df614779565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61481e82614346565b915061482983614346565b925082614839576148386147e7565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61489e602f83614262565b91506148a982614844565b604082019050919050565b5f6020820190508181035f8301526148cb81614892565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61492c602883614262565b9150614937826148d2565b604082019050919050565b5f6020820190508181035f83015261495981614920565b9050919050565b5f61496a82614346565b915061497583614346565b925082820190508082111561498d5761498c614779565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f6149ed603383614262565b91506149f882614993565b604082019050919050565b5f6020820190508181035f830152614a1a816149e1565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f614a7b603083614262565b9150614a8682614a21565b604082019050919050565b5f6020820190508181035f830152614aa881614a6f565b9050919050565b614ab881614554565b8114614ac2575f80fd5b50565b5f81519050614ad381614aaf565b92915050565b5f60208284031215614aee57614aed6142e8565b5b5f614afb84828501614ac5565b91505092915050565b5f81519050614b128161431c565b92915050565b5f60208284031215614b2d57614b2c6142e8565b5b5f614b3a84828501614b04565b91505092915050565b5f604082019050614b565f83018561452c565b614b63602083018461452c565b9392505050565b5f6dffffffffffffffffffffffffffff82169050919050565b614b8c81614b6a565b8114614b96575f80fd5b50565b5f81519050614ba781614b83565b92915050565b5f63ffffffff82169050919050565b614bc581614bad565b8114614bcf575f80fd5b50565b5f81519050614be081614bbc565b92915050565b5f805f60608486031215614bfd57614bfc6142e8565b5b5f614c0a86828701614b99565b9350506020614c1b86828701614b99565b9250506040614c2c86828701614bd2565b9150509250925092565b5f614c4082614346565b9150614c4b83614346565b9250828203905081811115614c6357614c62614779565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115614cbe57808604811115614c9a57614c99614779565b5b6001851615614ca95780820291505b8081029050614cb785614c69565b9450614c7e565b94509492505050565b5f82614cd65760019050614d91565b81614ce3575f9050614d91565b8160018114614cf95760028114614d0357614d32565b6001915050614d91565b60ff841115614d1557614d14614779565b5b8360020a915084821115614d2c57614d2b614779565b5b50614d91565b5060208310610133831016604e8410600b8410161715614d675782820a905083811115614d6257614d61614779565b5b614d91565b614d748484846001614c75565b92509050818404811115614d8b57614d8a614779565b5b81810290505b9392505050565b5f614da282614346565b9150614dad83614346565b9250614dda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614cc7565b905092915050565b5f81905092915050565b5f614df682614258565b614e008185614de2565b9350614e10818560208601614272565b80840191505092915050565b5f614e278285614dec565b9150614e338284614dec565b91508190509392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614e99603983614262565b9150614ea482614e3f565b604082019050919050565b5f6020820190508181035f830152614ec681614e8d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614f27602583614262565b9150614f3282614ecd565b604082019050919050565b5f6020820190508181035f830152614f5481614f1b565b9050919050565b5f81905092915050565b50565b5f614f735f83614f5b565b9150614f7e82614f65565b5f82019050919050565b5f614f9282614f68565b9150819050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614ff6602483614262565b915061500182614f9c565b604082019050919050565b5f6020820190508181035f83015261502381614fea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615084603583614262565b915061508f8261502a565b604082019050919050565b5f6020820190508181035f8301526150b181615078565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f615112603483614262565b915061511d826150b8565b604082019050919050565b5f6020820190508181035f83015261513f81615106565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151a0602683614262565b91506151ab82615146565b604082019050919050565b5f6020820190508181035f8301526151cd81615194565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61522e602483614262565b9150615239826151d4565b604082019050919050565b5f6020820190508181035f83015261525b81615222565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152bc602283614262565b91506152c782615262565b604082019050919050565b5f6020820190508181035f8301526152e9816152b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61534a602583614262565b9150615355826152f0565b604082019050919050565b5f6020820190508181035f8301526153778161533e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153d8602383614262565b91506153e38261537e565b604082019050919050565b5f6020820190508181035f830152615405816153cc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615440601683614262565b915061544b8261540c565b602082019050919050565b5f6020820190508181035f83015261546d81615434565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6154f4604983614262565b91506154ff82615474565b606082019050919050565b5f6020820190508181035f830152615521816154e8565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f615582603583614262565b915061558d82615528565b604082019050919050565b5f6020820190508181035f8301526155af81615576565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6155ea601383614262565b91506155f5826155b6565b602082019050919050565b5f6020820190508181035f830152615617816155de565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615678603683614262565b91506156838261561e565b604082019050919050565b5f6020820190508181035f8301526156a58161566c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61573a600183614de2565b915061574582615706565b600182019050919050565b5f61575b8285614dec565b91506157668261572e565b91506157728284614dec565b91508190509392505050565b7f302e0000000000000000000000000000000000000000000000000000000000005f82015250565b5f6157b2600283614de2565b91506157bd8261577e565b600282019050919050565b5f6157d2826157a6565b91506157de8284614dec565b915081905092915050565b5f819050919050565b5f61580c615807615802846157e9565b614440565b614346565b9050919050565b61581c816157f2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6158548161430b565b82525050565b5f615865838361584b565b60208301905092915050565b5f602082019050919050565b5f61588782615822565b615891818561582c565b935061589c8361583c565b805f5b838110156158cc5781516158b3888261585a565b97506158be83615871565b92505060018101905061589f565b5085935050505092915050565b5f60a0820190506158ec5f8301886144b4565b6158f96020830187615813565b818103604083015261590b818661587d565b905061591a606083018561452c565b61592760808301846144b4565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61598b602683614262565b915061599682615931565b604082019050919050565b5f6020820190508181035f8301526159b88161597f565b9050919050565b5f6159c982614346565b91506159d483614346565b9250826159e4576159e36147e7565b5b828206905092915050565b5f6159f982614346565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a2b57615a2a614779565b5b60018201905091905056fea26469706673582212205847d85d01320d0d8f012fbfd52c05d77765edab6e09190a15203519d2f48b5764736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
19846:19037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28946:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4708:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21354:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31312:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19929:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4049:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32384:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20495:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20309:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30178:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4910:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20032:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20405:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20365:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3948:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5447:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31102:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19987:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20593:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32495:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21080:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20673:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4165:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1254:103;;;;;;;;;;;;;:::i;:::-;;38325:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29302:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30729:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20124:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20973;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29095:155;;;;;;;;;;;;;:::i;:::-;;1031:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20161:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30994:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28042:896;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31717:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21047:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20549:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21149:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21115:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5745:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20457:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4316:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32227:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21575:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20633:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38145:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31527:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30463:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20891:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20194:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29689:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20939:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4524:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20236:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29484:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21010:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1365:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20276:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28946:95;28992:13;29025:8;:6;:8::i;:::-;29018:15;;28946:95;:::o;4708:194::-;4816:4;4833:39;4842:12;:10;:12::i;:::-;4856:7;4865:6;4833:8;:39::i;:::-;4890:4;4883:11;;4708:194;;;;:::o;21354:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;31312:207::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31395:7:::1;31382:10;:20;;;;31429:10;;31413:13;:26;;;;31475:2;31458:13;;:19;;31450:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31312:207:::0;:::o;19929:51::-;;;:::o;4049:108::-;4110:7;4137:12;;4130:19;;4049:108;:::o;32384:103::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32470:9:::1;32458;;:21;;;;;;;;;;;;;;;;;;32384:103:::0;:::o;20495:47::-;;;;:::o;20309:36::-;;;;:::o;30178:277::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30315:4:::1;30307;30302:1;30286:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30285:26;;;;:::i;:::-;30284:35;;;;:::i;:::-;30274:6;:45;;30252:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30438:8;30428:6;:19;;;;:::i;:::-;30405:20;:42;;;;30178:277:::0;:::o;4910:529::-;5050:4;5067:36;5077:6;5085:9;5096:6;5067:9;:36::i;:::-;5116:24;5143:11;:19;5155:6;5143:19;;;;;;;;;;;;;;;:33;5163:12;:10;:12::i;:::-;5143:33;;;;;;;;;;;;;;;;5116:60;;5229:6;5209:16;:26;;5187:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;5339:57;5348:6;5356:12;:10;:12::i;:::-;5389:6;5370:16;:25;5339:8;:57::i;:::-;5427:4;5420:11;;;4910:529;;;;;:::o;20032:53::-;20078:6;20032:53;:::o;20405:45::-;;;;:::o;20365:33::-;;;;;;;;;;;;;:::o;3948:93::-;4006:5;4031:2;4024:9;;3948:93;:::o;5447:290::-;5560:4;5577:130;5600:12;:10;:12::i;:::-;5627:7;5686:10;5649:11;:25;5661:12;:10;:12::i;:::-;5649:25;;;;;;;;;;;;;;;:34;5675:7;5649:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5577:8;:130::i;:::-;5725:4;5718:11;;5447:290;;;;:::o;31102:202::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31183:7:::1;31171:9;:19;;;;31216:9;;31201:12;:24;;;;31260:2;31244:12;;:18;;31236:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31102:202:::0;:::o;19987:38::-;;;:::o;20593:33::-;;;;;;;;;;;;;:::o;32495:126::-;32561:4;32585:19;:28;32605:7;32585:28;;;;;;;;;;;;;;;;;;;;;;;;;32578:35;;32495:126;;;:::o;21080:28::-;;;;:::o;20673:31::-;;;;;;;;;;;;;:::o;4165:143::-;4255:7;4282:9;:18;4292:7;4282:18;;;;;;;;;;;;;;;;4275:25;;4165:143;;;:::o;1254:103::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1319:30:::1;1346:1;1319:18;:30::i;:::-;1254:103::o:0;38325:555::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38527:3:::1;38504:19;:26;;38482:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;38654:4;38642:8;:16;;:33;;;;;38674:1;38662:8;:13;;38642:33;38620:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38780:19;38762:15;:37;;;;38829:8;38810:16;:27;;;;38864:8;38848:13;;:24;;;;;;;;;;;;;;;;;;38325:555:::0;;;:::o;29302:121::-;29354:4;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29388:5:::1;29371:14;;:22;;;;;;;;;;;;;;;;;;29411:4;29404:11;;29302:121:::0;:::o;30729:169::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30886:4:::1;30844:31;:39;30876:6;30844:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30729:169:::0;;:::o;20124:30::-;;;;;;;;;;;;;:::o;20973:::-;;;;:::o;29095:155::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29166:4:::1;29150:13;;:20;;;;;;;;;;;;;;;;;;29195:4;29181:11;;:18;;;;;;;;;;;;;;;;;;29227:15;29210:14;:32;;;;29095:155::o:0;1031:87::-;1077:7;1104:6;;;;;;;;;;;1097:13;;1031:87;:::o;20161:24::-;;;;;;;;;;;;;:::o;30994:100::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31079:7:::1;31065:11;;:21;;;;;;;;;;;;;;;;;;30994:100:::0;:::o;28042:896::-;28090:13;28116:20;28154:4;;;;;;;;;;;28139:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28116:54;;;;28183:19;28205:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28183:44;;28238:17;28276:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28258:66;;;28325:4;;;;;;;;;;;28331:11;28258:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28238:105;;28357:16;28375;28412:9;28397:51;;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28356:94;;;;;;;;;28464:18;28484:19;28521:4;;;;;;;;;;;28507:18;;:11;:18;;;:90;;28578:8;28588;28507:90;;;28542:8;28552;28507:90;28463:134;;;;28610:16;28629:91;28689:20;28704:4;28689:10;:14;;:20;;;;:::i;:::-;28629:41;28667:1;28652:12;:16;;;;:::i;:::-;28645:2;:24;;;;:::i;:::-;28629:11;:15;;:41;;;;:::i;:::-;:45;;:91;;;;:::i;:::-;28610:110;;28733:25;:34;;;;;;;;;;;;;;;;;;;28832:11;28862:53;28896:18;28905:8;28896;:18::i;:::-;28862:33;:53::i;:::-;28800:130;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28780:150;;;;;;;;;;;28042:896;:::o;31717:306::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31863:13:::1;31855:21;;:4;:21;;::::0;31833:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31974:41;32003:4;32009:5;31974:28;:41::i;:::-;31717:306:::0;;:::o;21047:24::-;;;;:::o;20549:35::-;;;;:::o;21149:27::-;;;;:::o;21115:25::-;;;;:::o;5745:475::-;5863:4;5880:24;5907:11;:25;5919:12;:10;:12::i;:::-;5907:25;;;;;;;;;;;;;;;:34;5933:7;5907:34;;;;;;;;;;;;;;;;5880:61;;5994:15;5974:16;:35;;5952:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;6110:67;6119:12;:10;:12::i;:::-;6133:7;6161:15;6142:16;:34;6110:8;:67::i;:::-;6208:4;6201:11;;;5745:475;;;;:::o;20457:29::-;;;;:::o;4316:200::-;4427:4;4444:42;4454:12;:10;:12::i;:::-;4468:9;4479:6;4444:9;:42::i;:::-;4504:4;4497:11;;4316:200;;;;:::o;32227:149::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32350:18:::1;32332:15;;:36;;;;;;;;;;;;;;;;;;32227:149:::0;:::o;21575:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20633:33::-;;;;;;;;;;;;;:::o;38145:172::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38215:24:::1;38232:6;38215:16;:24::i;:::-;38260:9;;;;;;;;;;;38252:23;;38283:21;38252:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38145:172:::0;:::o;31527:182::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31643:8:::1;31612:19;:28;31632:7;31612:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31683:7;31667:34;;;31692:8;31667:34;;;;;;:::i;:::-;;;;;;;;31527:182:::0;;:::o;30463:258::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30603:4:::1;30595;30590:1;30574:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30573:26;;;;:::i;:::-;30572:35;;;;:::i;:::-;30562:6;:45;;30540:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:8;30694:6;:19;;;;:::i;:::-;30682:9;:31;;;;30463:258:::0;:::o;20891:39::-;;;;;;;;;;;;;:::o;20194:35::-;;;;:::o;29689:481::-;29786:4;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:6:::1;29855:1;29839:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29838:28;;;;:::i;:::-;29825:9;:41;;29803:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30015:4;30010:1;29994:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29993:26;;;;:::i;:::-;29980:9;:39;;29958:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30131:9;30110:18;:30;;;;30158:4;30151:11;;29689:481:::0;;;:::o;20939:27::-;;;;:::o;4524:176::-;4638:7;4665:11;:18;4677:5;4665:18;;;;;;;;;;;;;;;:27;4684:7;4665:27;;;;;;;;;;;;;;;;4658:34;;4524:176;;;;:::o;20236:33::-;;;;:::o;29484:135::-;29544:4;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29584:5:::1;29561:20;;:28;;;;;;;;;;;;;;;;;;29607:4;29600:11;;29484:135:::0;:::o;21010:30::-;;;;:::o;1365:238::-;1177:12;:10;:12::i;:::-;1166:23;;:7;:5;:7::i;:::-;:23;;;1158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1488:1:::1;1468:22;;:8;:22;;::::0;1446:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1567:28;1586:8;1567:18;:28::i;:::-;1365:238:::0;:::o;20276:24::-;;;;:::o;552:98::-;605:7;632:10;625:17;;552:98;:::o;8012:380::-;8165:1;8148:19;;:5;:19;;;8140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8246:1;8227:21;;:7;:21;;;8219:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8330:6;8300:11;:18;8312:5;8300:18;;;;;;;;;;;;;;;:27;8319:7;8300:27;;;;;;;;;;;;;;;:36;;;;8368:7;8352:32;;8361:5;8352:32;;;8377:6;8352:32;;;;;;:::i;:::-;;;;;;;;8012:380;;;:::o;32679:4239::-;32827:1;32811:18;;:4;:18;;;32803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32904:1;32890:16;;:2;:16;;;32882:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32973:1;32963:6;:11;32959:93;;32991:28;33007:4;33013:2;33017:1;32991:15;:28::i;:::-;33034:7;;32959:93;33068:14;;;;;;;;;;;33064:2393;;;33129:7;:5;:7::i;:::-;33121:15;;:4;:15;;;;:49;;;;;33163:7;:5;:7::i;:::-;33157:13;;:2;:13;;;;33121:49;:86;;;;;33205:1;33191:16;;:2;:16;;;;33121:86;:128;;;;;33242:6;33228:21;;:2;:21;;;;33121:128;:158;;;;;33271:8;;;;;;;;;;;33270:9;33121:158;33099:2347;;;33319:13;;;;;;;;;;;33314:223;;33391:19;:25;33411:4;33391:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33420:19;:23;33440:2;33420:23;;;;;;;;;;;;;;;;;;;;;;;;;33391:52;33357:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33314:223;33715:20;;;;;;;;;;;:58;;;;;33766:7;:5;:7::i;:::-;33760:13;;:2;:13;;;;33715:58;:113;;;;;33812:15;33798:30;;:2;:30;;;;33715:113;:168;;;;;33854:25;:29;33880:2;33854:29;;;;;;;;;;;;;;;;;;;;;;;;;33853:30;33715:168;33689:547;;;34002:12;33960:28;:39;33989:9;33960:39;;;;;;;;;;;;;;;;:54;33926:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:12;34162:28;:39;34191:9;34162:39;;;;;;;;;;;;;;;:54;;;;33689:547;34310:25;:31;34336:4;34310:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34367:31;:35;34399:2;34367:35;;;;;;;;;;;;;;;;;;;;;;;;;34366:36;34310:92;34284:1147;;;34489:20;;34479:6;:30;;34445:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34697:9;;34680:13;34690:2;34680:9;:13::i;:::-;34671:6;:22;;;;:::i;:::-;:35;;34637:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34284:1147;;;34875:25;:29;34901:2;34875:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34930:31;:37;34962:4;34930:37;;;;;;;;;;;;;;;;;;;;;;;;;34929:38;34875:92;34849:582;;;35054:20;;35044:6;:30;;35010:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34849:582;;;35211:31;:35;35243:2;35211:35;;;;;;;;;;;;;;;;;;;;;;;;;35206:225;;35331:9;;35314:13;35324:2;35314:9;:13::i;:::-;35305:6;:22;;;;:::i;:::-;:35;;35271:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35206:225;34849:582;34284:1147;33099:2347;33064:2393;35469:28;35500:24;35518:4;35500:9;:24::i;:::-;35469:55;;35537:12;35576:18;;35552:20;:42;;35537:57;;35625:7;:35;;;;;35649:11;;;;;;;;;;;35625:35;:61;;;;;35678:8;;;;;;;;;;;35677:9;35625:61;:110;;;;;35704:25;:31;35730:4;35704:31;;;;;;;;;;;;;;;;;;;;;;;;;35703:32;35625:110;:153;;;;;35753:19;:25;35773:4;35753:25;;;;;;;;;;;;;;;;;;;;;;;;;35752:26;35625:153;:194;;;;;35796:19;:23;35816:2;35796:23;;;;;;;;;;;;;;;;;;;;;;;;;35795:24;35625:194;35607:326;;;35857:4;35846:8;;:15;;;;;;;;;;;;;;;;;;35878:10;:8;:10::i;:::-;35916:5;35905:8;;:16;;;;;;;;;;;;;;;;;;35607:326;35945:12;35961:8;;;;;;;;;;;35960:9;35945:24;;36071:19;:25;36091:4;36071:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36100:19;:23;36120:2;36100:23;;;;;;;;;;;;;;;;;;;;;;;;;36071:52;36067:100;;;36150:5;36140:15;;36067:100;36179:12;36284:7;36280:585;;;36336:25;:29;36362:2;36336:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36385:1;36369:13;;:17;36336:50;36332:384;;;36414:34;36444:3;36414:25;36425:13;;36414:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36407:41;;36483:4;36467:12;;:20;;;;;;;:::i;:::-;;;;;;;;36332:384;;;36549:25;:31;36575:4;36549:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36599:1;36584:12;;:16;36549:51;36545:171;;;36628:33;36657:3;36628:24;36639:12;;36628:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36621:40;;36696:4;36680:12;;:20;;;;;;;:::i;:::-;;;;;;;;36545:171;36332:384;36743:1;36736:4;:8;36732:91;;;36765:42;36781:4;36795;36802;36765:15;:42::i;:::-;36732:91;36849:4;36839:14;;;;;:::i;:::-;;;36280:585;36877:33;36893:4;36899:2;36903:6;36877:15;:33::i;:::-;32792:4126;;;;32679:4239;;;;:::o;1611:191::-;1685:16;1704:6;;;;;;;;;;;1685:25;;1730:8;1721:6;;:17;;;;;;;;;;;;;;;;;;1785:8;1754:40;;1775:8;1754:40;;;;;;;;;;;;1674:128;1611:191;:::o;12277:98::-;12335:7;12366:1;12362;:5;;;;:::i;:::-;12355:12;;12277:98;;;;:::o;23752:713::-;23808:13;23859:14;23891:1;23876:12;23882:5;23876;:12::i;:::-;:16;23859:33;;23907:20;23941:6;23930:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23907:41;;23963:11;24092:6;24088:2;24084:15;24076:6;24072:28;24065:35;;24129:290;24136:4;24129:290;;;24161:5;;;;;;;;24303:10;24298:2;24291:5;24287:14;24282:32;24277:3;24269:46;24361:2;24352:11;;;;;;:::i;:::-;;;;;24395:1;24386:5;:10;24129:290;24382:21;24129:290;24440:6;24433:13;;;;;23752:713;;;:::o;26561:1473::-;26665:13;26691:24;26724:6;26691:40;;26742:8;26753:11;:18;26742:29;;26825:22;26861:1;26850:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26825:38;;26874:26;26909:8;26874:44;;27019:1;27013:3;:7;27009:1018;;;27056:11;27074:1;27068:3;:7;;;;:::i;:::-;27056:20;;;;;;;;:::i;:::-;;;;;;;;;;27037:13;27051:1;27037:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;27110:11;27128:1;27122:3;:7;;;;:::i;:::-;27110:20;;;;;;;;:::i;:::-;;;;;;;;;;27091:13;27105:1;27091:16;;;;;;;;:::i;:::-;;;;;:39;;;;;;;;;;;27237:29;27286:1;27280:3;:7;;;;:::i;:::-;27269:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27237:51;;27303:29;27341:15;27303:54;;27379:6;27374:106;27401:1;27395:3;:7;;;;:::i;:::-;27391:1;:11;27374:106;;;27450:11;27462:1;27450:14;;;;;;;;:::i;:::-;;;;;;;;;;27428:16;27445:1;27428:19;;;;;;;;:::i;:::-;;;;;:36;;;;;;;;;;;27404:3;;;;;;;27374:106;;;;27571:48;27601:16;27571:22;:48::i;:::-;27553:66;;27739:15;27761:8;27722:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27708:63;;;;;;;;;;27009:1018;28007:6;27984:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;27970:45;;;;;;26561:1473;;;;:::o;32031:188::-;32148:5;32114:25;:31;32140:4;32114:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32205:5;32171:40;;32199:4;32171:40;;;;;;;;;;;;32031:188;;:::o;36926:589::-;37052:21;37090:1;37076:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37052:40;;37121:4;37103;37108:1;37103:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37147:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37137:4;37142:1;37137:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37182:62;37199:4;37214:15;37232:11;37182:8;:62::i;:::-;37283:15;:66;;;37364:11;37390:1;37434:4;37461;37481:15;37283:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36981:534;36926:589;:::o;6228:770::-;6386:1;6368:20;;:6;:20;;;6360:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6470:1;6449:23;;:9;:23;;;6441:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6525:47;6546:6;6554:9;6565:6;6525:20;:47::i;:::-;6585:21;6609:9;:17;6619:6;6609:17;;;;;;;;;;;;;;;;6585:41;;6676:6;6659:13;:23;;6637:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6820:6;6804:13;:22;6784:9;:17;6794:6;6784:17;;;;;;;;;;;;;;;:42;;;;6872:6;6848:9;:20;6858:9;6848:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6913:9;6896:35;;6905:6;6896:35;;;6924:6;6896:35;;;;;;:::i;:::-;;;;;;;;6944:46;6964:6;6972:9;6983:6;6944:19;:46::i;:::-;6349:649;6228:770;;;:::o;37523:614::-;37562:23;37588:24;37606:4;37588:9;:24::i;:::-;37562:50;;37623:25;37651:12;;37623:40;;37674:12;37722:1;37703:15;:20;:46;;;;37748:1;37727:17;:22;37703:46;37699:85;;;37766:7;;;;;37699:85;37839:2;37818:18;;:23;;;;:::i;:::-;37800:15;:41;37796:115;;;37897:2;37876:18;;:23;;;;:::i;:::-;37858:41;;37796:115;37923:26;37952:15;37923:44;;37980:36;37997:18;37980:16;:36::i;:::-;38044:1;38029:12;:16;;;;38080:9;;;;;;;;;;;38072:23;;38103:21;38072:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38058:71;;;;;37551:586;;;;37523:614;:::o;11878:98::-;11936:7;11967:1;11963;:5;;;;:::i;:::-;11956:12;;11878:98;;;;:::o;24473:948::-;24526:7;24546:14;24563:1;24546:18;;24613:8;24604:5;:17;24600:106;;24651:8;24642:17;;;;;;:::i;:::-;;;;;24688:2;24678:12;;;;24600:106;24733:8;24724:5;:17;24720:106;;24771:8;24762:17;;;;;;:::i;:::-;;;;;24808:2;24798:12;;;;24720:106;24853:8;24844:5;:17;24840:106;;24891:8;24882:17;;;;;;:::i;:::-;;;;;24928:2;24918:12;;;;24840:106;24973:7;24964:5;:16;24960:103;;25010:7;25001:16;;;;;;:::i;:::-;;;;;25046:1;25036:11;;;;24960:103;25090:7;25081:5;:16;25077:103;;25127:7;25118:16;;;;;;:::i;:::-;;;;;25163:1;25153:11;;;;25077:103;25207:7;25198:5;:16;25194:103;;25244:7;25235:16;;;;;;:::i;:::-;;;;;25280:1;25270:11;;;;25194:103;25324:7;25315:5;:16;25311:68;;25362:1;25352:11;;;;25311:68;25407:6;25400:13;;;24473:948;;;:::o;25429:1124::-;25522:13;25639:24;25672:6;25639:40;;25690:8;25701:11;:18;25690:29;;25783:11;25809:1;25804;25798:3;:7;;;;:::i;:::-;25797:13;;;;:::i;:::-;25783:27;;25821:22;25862:6;25856:3;:12;;;;:::i;:::-;25846:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25821:48;;25882:6;25891:1;25882:10;;25938:6;25933:576;25954:3;25950:1;:7;25933:576;;;26069:11;26091:1;26087;26081:3;:7;;;;:::i;:::-;:11;;;;:::i;:::-;26069:24;;;;;;;;:::i;:::-;;;;;;;;;;26039:9;26064:1;26055:6;26049:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;26039:27;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;26194:1;26189;26185;:5;;;;:::i;:::-;:10;:26;;;;;26210:1;26204:3;:7;;;;:::i;:::-;26199:1;:12;;26185:26;26181:317;;;26232:3;;;;;:::i;:::-;;;;26319:11;26289:9;26314:1;26305:6;26299:3;:12;;;;:::i;:::-;:16;;;;:::i;:::-;26289:27;;;;;;;;:::i;:::-;;;;;:41;;;;;;;;;;;26349:3;;;;;:::i;:::-;;;;26181:317;;;26436:3;;;;;:::i;:::-;;;;26181:317;25959:3;;;;;25933:576;;;;26535:9;26521:24;;;;;;;25429:1124;;;:::o;8400:125::-;;;;:::o;8533:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:::-;3733:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:119;;;3788:79;;:::i;:::-;3750:119;3908:1;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3879:117;3674:329;;;;:::o;4009:60::-;4037:3;4058:5;4051:12;;4009:60;;;:::o;4075:142::-;4125:9;4158:53;4176:34;4185:24;4203:5;4185:24;:::i;:::-;4176:34;:::i;:::-;4158:53;:::i;:::-;4145:66;;4075:142;;;:::o;4223:126::-;4273:9;4306:37;4337:5;4306:37;:::i;:::-;4293:50;;4223:126;;;:::o;4355:153::-;4432:9;4465:37;4496:5;4465:37;:::i;:::-;4452:50;;4355:153;;;:::o;4514:185::-;4628:64;4686:5;4628:64;:::i;:::-;4623:3;4616:77;4514:185;;:::o;4705:276::-;4825:4;4863:2;4852:9;4848:18;4840:26;;4876:98;4971:1;4960:9;4956:17;4947:6;4876:98;:::i;:::-;4705:276;;;;:::o;4987:118::-;5074:24;5092:5;5074:24;:::i;:::-;5069:3;5062:37;4987:118;;:::o;5111:222::-;5204:4;5242:2;5231:9;5227:18;5219:26;;5255:71;5323:1;5312:9;5308:17;5299:6;5255:71;:::i;:::-;5111:222;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:118::-;6051:24;6069:5;6051:24;:::i;:::-;6046:3;6039:37;5964:118;;:::o;6088:222::-;6181:4;6219:2;6208:9;6204:18;6196:26;;6232:71;6300:1;6289:9;6285:17;6276:6;6232:71;:::i;:::-;6088:222;;;;:::o;6316:86::-;6351:7;6391:4;6384:5;6380:16;6369:27;;6316:86;;;:::o;6408:112::-;6491:22;6507:5;6491:22;:::i;:::-;6486:3;6479:35;6408:112;;:::o;6526:214::-;6615:4;6653:2;6642:9;6638:18;6630:26;;6666:67;6730:1;6719:9;6715:17;6706:6;6666:67;:::i;:::-;6526:214;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:613::-;7081:6;7089;7097;7146:2;7134:9;7125:7;7121:23;7117:32;7114:119;;;7152:79;;:::i;:::-;7114:119;7272:1;7297:53;7342:7;7333:6;7322:9;7318:22;7297:53;:::i;:::-;7287:63;;7243:117;7399:2;7425:53;7470:7;7461:6;7450:9;7446:22;7425:53;:::i;:::-;7415:63;;7370:118;7527:2;7553:50;7595:7;7586:6;7575:9;7571:22;7553:50;:::i;:::-;7543:60;;7498:115;7007:613;;;;;:::o;7626:468::-;7691:6;7699;7748:2;7736:9;7727:7;7723:23;7719:32;7716:119;;;7754:79;;:::i;:::-;7716:119;7874:1;7899:53;7944:7;7935:6;7924:9;7920:22;7899:53;:::i;:::-;7889:63;;7845:117;8001:2;8027:50;8069:7;8060:6;8049:9;8045:22;8027:50;:::i;:::-;8017:60;;7972:115;7626:468;;;;;:::o;8100:323::-;8156:6;8205:2;8193:9;8184:7;8180:23;8176:32;8173:119;;;8211:79;;:::i;:::-;8173:119;8331:1;8356:50;8398:7;8389:6;8378:9;8374:22;8356:50;:::i;:::-;8346:60;;8302:114;8100:323;;;;:::o;8429:474::-;8497:6;8505;8554:2;8542:9;8533:7;8529:23;8525:32;8522:119;;;8560:79;;:::i;:::-;8522:119;8680:1;8705:53;8750:7;8741:6;8730:9;8726:22;8705:53;:::i;:::-;8695:63;;8651:117;8807:2;8833:53;8878:7;8869:6;8858:9;8854:22;8833:53;:::i;:::-;8823:63;;8778:118;8429:474;;;;;:::o;8909:182::-;9049:34;9045:1;9037:6;9033:14;9026:58;8909:182;:::o;9097:366::-;9239:3;9260:67;9324:2;9319:3;9260:67;:::i;:::-;9253:74;;9336:93;9425:3;9336:93;:::i;:::-;9454:2;9449:3;9445:12;9438:19;;9097:366;;;:::o;9469:419::-;9635:4;9673:2;9662:9;9658:18;9650:26;;9722:9;9716:4;9712:20;9708:1;9697:9;9693:17;9686:47;9750:131;9876:4;9750:131;:::i;:::-;9742:139;;9469:419;;;:::o;9894:179::-;10034:31;10030:1;10022:6;10018:14;10011:55;9894:179;:::o;10079:366::-;10221:3;10242:67;10306:2;10301:3;10242:67;:::i;:::-;10235:74;;10318:93;10407:3;10318:93;:::i;:::-;10436:2;10431:3;10427:12;10420:19;;10079:366;;;:::o;10451:419::-;10617:4;10655:2;10644:9;10640:18;10632:26;;10704:9;10698:4;10694:20;10690:1;10679:9;10675:17;10668:47;10732:131;10858:4;10732:131;:::i;:::-;10724:139;;10451:419;;;:::o;10876:180::-;10924:77;10921:1;10914:88;11021:4;11018:1;11011:15;11045:4;11042:1;11035:15;11062:410;11102:7;11125:20;11143:1;11125:20;:::i;:::-;11120:25;;11159:20;11177:1;11159:20;:::i;:::-;11154:25;;11214:1;11211;11207:9;11236:30;11254:11;11236:30;:::i;:::-;11225:41;;11415:1;11406:7;11402:15;11399:1;11396:22;11376:1;11369:9;11349:83;11326:139;;11445:18;;:::i;:::-;11326:139;11110:362;11062:410;;;;:::o;11478:180::-;11526:77;11523:1;11516:88;11623:4;11620:1;11613:15;11647:4;11644:1;11637:15;11664:185;11704:1;11721:20;11739:1;11721:20;:::i;:::-;11716:25;;11755:20;11773:1;11755:20;:::i;:::-;11750:25;;11794:1;11784:35;;11799:18;;:::i;:::-;11784:35;11841:1;11838;11834:9;11829:14;;11664:185;;;;:::o;11855:234::-;11995:34;11991:1;11983:6;11979:14;11972:58;12064:17;12059:2;12051:6;12047:15;12040:42;11855:234;:::o;12095:366::-;12237:3;12258:67;12322:2;12317:3;12258:67;:::i;:::-;12251:74;;12334:93;12423:3;12334:93;:::i;:::-;12452:2;12447:3;12443:12;12436:19;;12095:366;;;:::o;12467:419::-;12633:4;12671:2;12660:9;12656:18;12648:26;;12720:9;12714:4;12710:20;12706:1;12695:9;12691:17;12684:47;12748:131;12874:4;12748:131;:::i;:::-;12740:139;;12467:419;;;:::o;12892:227::-;13032:34;13028:1;13020:6;13016:14;13009:58;13101:10;13096:2;13088:6;13084:15;13077:35;12892:227;:::o;13125:366::-;13267:3;13288:67;13352:2;13347:3;13288:67;:::i;:::-;13281:74;;13364:93;13453:3;13364:93;:::i;:::-;13482:2;13477:3;13473:12;13466:19;;13125:366;;;:::o;13497:419::-;13663:4;13701:2;13690:9;13686:18;13678:26;;13750:9;13744:4;13740:20;13736:1;13725:9;13721:17;13714:47;13778:131;13904:4;13778:131;:::i;:::-;13770:139;;13497:419;;;:::o;13922:191::-;13962:3;13981:20;13999:1;13981:20;:::i;:::-;13976:25;;14015:20;14033:1;14015:20;:::i;:::-;14010:25;;14058:1;14055;14051:9;14044:16;;14079:3;14076:1;14073:10;14070:36;;;14086:18;;:::i;:::-;14070:36;13922:191;;;;:::o;14119:238::-;14259:34;14255:1;14247:6;14243:14;14236:58;14328:21;14323:2;14315:6;14311:15;14304:46;14119:238;:::o;14363:366::-;14505:3;14526:67;14590:2;14585:3;14526:67;:::i;:::-;14519:74;;14602:93;14691:3;14602:93;:::i;:::-;14720:2;14715:3;14711:12;14704:19;;14363:366;;;:::o;14735:419::-;14901:4;14939:2;14928:9;14924:18;14916:26;;14988:9;14982:4;14978:20;14974:1;14963:9;14959:17;14952:47;15016:131;15142:4;15016:131;:::i;:::-;15008:139;;14735:419;;;:::o;15160:235::-;15300:34;15296:1;15288:6;15284:14;15277:58;15369:18;15364:2;15356:6;15352:15;15345:43;15160:235;:::o;15401:366::-;15543:3;15564:67;15628:2;15623:3;15564:67;:::i;:::-;15557:74;;15640:93;15729:3;15640:93;:::i;:::-;15758:2;15753:3;15749:12;15742:19;;15401:366;;;:::o;15773:419::-;15939:4;15977:2;15966:9;15962:18;15954:26;;16026:9;16020:4;16016:20;16012:1;16001:9;15997:17;15990:47;16054:131;16180:4;16054:131;:::i;:::-;16046:139;;15773:419;;;:::o;16198:118::-;16269:22;16285:5;16269:22;:::i;:::-;16262:5;16259:33;16249:61;;16306:1;16303;16296:12;16249:61;16198:118;:::o;16322:139::-;16377:5;16408:6;16402:13;16393:22;;16424:31;16449:5;16424:31;:::i;:::-;16322:139;;;;:::o;16467:347::-;16535:6;16584:2;16572:9;16563:7;16559:23;16555:32;16552:119;;;16590:79;;:::i;:::-;16552:119;16710:1;16735:62;16789:7;16780:6;16769:9;16765:22;16735:62;:::i;:::-;16725:72;;16681:126;16467:347;;;;:::o;16820:143::-;16877:5;16908:6;16902:13;16893:22;;16924:33;16951:5;16924:33;:::i;:::-;16820:143;;;;:::o;16969:351::-;17039:6;17088:2;17076:9;17067:7;17063:23;17059:32;17056:119;;;17094:79;;:::i;:::-;17056:119;17214:1;17239:64;17295:7;17286:6;17275:9;17271:22;17239:64;:::i;:::-;17229:74;;17185:128;16969:351;;;;:::o;17326:332::-;17447:4;17485:2;17474:9;17470:18;17462:26;;17498:71;17566:1;17555:9;17551:17;17542:6;17498:71;:::i;:::-;17579:72;17647:2;17636:9;17632:18;17623:6;17579:72;:::i;:::-;17326:332;;;;;:::o;17664:114::-;17701:7;17741:30;17734:5;17730:42;17719:53;;17664:114;;;:::o;17784:122::-;17857:24;17875:5;17857:24;:::i;:::-;17850:5;17847:35;17837:63;;17896:1;17893;17886:12;17837:63;17784:122;:::o;17912:143::-;17969:5;18000:6;17994:13;17985:22;;18016:33;18043:5;18016:33;:::i;:::-;17912:143;;;;:::o;18061:93::-;18097:7;18137:10;18130:5;18126:22;18115:33;;18061:93;;;:::o;18160:120::-;18232:23;18249:5;18232:23;:::i;:::-;18225:5;18222:34;18212:62;;18270:1;18267;18260:12;18212:62;18160:120;:::o;18286:141::-;18342:5;18373:6;18367:13;18358:22;;18389:32;18415:5;18389:32;:::i;:::-;18286:141;;;;:::o;18433:661::-;18520:6;18528;18536;18585:2;18573:9;18564:7;18560:23;18556:32;18553:119;;;18591:79;;:::i;:::-;18553:119;18711:1;18736:64;18792:7;18783:6;18772:9;18768:22;18736:64;:::i;:::-;18726:74;;18682:128;18849:2;18875:64;18931:7;18922:6;18911:9;18907:22;18875:64;:::i;:::-;18865:74;;18820:129;18988:2;19014:63;19069:7;19060:6;19049:9;19045:22;19014:63;:::i;:::-;19004:73;;18959:128;18433:661;;;;;:::o;19100:194::-;19140:4;19160:20;19178:1;19160:20;:::i;:::-;19155:25;;19194:20;19212:1;19194:20;:::i;:::-;19189:25;;19238:1;19235;19231:9;19223:17;;19262:1;19256:4;19253:11;19250:37;;;19267:18;;:::i;:::-;19250:37;19100:194;;;;:::o;19300:102::-;19342:8;19389:5;19386:1;19382:13;19361:34;;19300:102;;;:::o;19408:848::-;19469:5;19476:4;19500:6;19491:15;;19524:5;19515:14;;19538:712;19559:1;19549:8;19546:15;19538:712;;;19654:4;19649:3;19645:14;19639:4;19636:24;19633:50;;;19663:18;;:::i;:::-;19633:50;19713:1;19703:8;19699:16;19696:451;;;20128:4;20121:5;20117:16;20108:25;;19696:451;20178:4;20172;20168:15;20160:23;;20208:32;20231:8;20208:32;:::i;:::-;20196:44;;19538:712;;;19408:848;;;;;;;:::o;20262:1073::-;20316:5;20507:8;20497:40;;20528:1;20519:10;;20530:5;;20497:40;20556:4;20546:36;;20573:1;20564:10;;20575:5;;20546:36;20642:4;20690:1;20685:27;;;;20726:1;20721:191;;;;20635:277;;20685:27;20703:1;20694:10;;20705:5;;;20721:191;20766:3;20756:8;20753:17;20750:43;;;20773:18;;:::i;:::-;20750:43;20822:8;20819:1;20815:16;20806:25;;20857:3;20850:5;20847:14;20844:40;;;20864:18;;:::i;:::-;20844:40;20897:5;;;20635:277;;21021:2;21011:8;21008:16;21002:3;20996:4;20993:13;20989:36;20971:2;20961:8;20958:16;20953:2;20947:4;20944:12;20940:35;20924:111;20921:246;;;21077:8;21071:4;21067:19;21058:28;;21112:3;21105:5;21102:14;21099:40;;;21119:18;;:::i;:::-;21099:40;21152:5;;20921:246;21192:42;21230:3;21220:8;21214:4;21211:1;21192:42;:::i;:::-;21177:57;;;;21266:4;21261:3;21257:14;21250:5;21247:25;21244:51;;;21275:18;;:::i;:::-;21244:51;21324:4;21317:5;21313:16;21304:25;;20262:1073;;;;;;:::o;21341:285::-;21401:5;21425:23;21443:4;21425:23;:::i;:::-;21417:31;;21469:27;21487:8;21469:27;:::i;:::-;21457:39;;21515:104;21552:66;21542:8;21536:4;21515:104;:::i;:::-;21506:113;;21341:285;;;;:::o;21632:148::-;21734:11;21771:3;21756:18;;21632:148;;;;:::o;21786:390::-;21892:3;21920:39;21953:5;21920:39;:::i;:::-;21975:89;22057:6;22052:3;21975:89;:::i;:::-;21968:96;;22073:65;22131:6;22126:3;22119:4;22112:5;22108:16;22073:65;:::i;:::-;22163:6;22158:3;22154:16;22147:23;;21896:280;21786:390;;;;:::o;22182:435::-;22362:3;22384:95;22475:3;22466:6;22384:95;:::i;:::-;22377:102;;22496:95;22587:3;22578:6;22496:95;:::i;:::-;22489:102;;22608:3;22601:10;;22182:435;;;;;:::o;22623:244::-;22763:34;22759:1;22751:6;22747:14;22740:58;22832:27;22827:2;22819:6;22815:15;22808:52;22623:244;:::o;22873:366::-;23015:3;23036:67;23100:2;23095:3;23036:67;:::i;:::-;23029:74;;23112:93;23201:3;23112:93;:::i;:::-;23230:2;23225:3;23221:12;23214:19;;22873:366;;;:::o;23245:419::-;23411:4;23449:2;23438:9;23434:18;23426:26;;23498:9;23492:4;23488:20;23484:1;23473:9;23469:17;23462:47;23526:131;23652:4;23526:131;:::i;:::-;23518:139;;23245:419;;;:::o;23670:224::-;23810:34;23806:1;23798:6;23794:14;23787:58;23879:7;23874:2;23866:6;23862:15;23855:32;23670:224;:::o;23900:366::-;24042:3;24063:67;24127:2;24122:3;24063:67;:::i;:::-;24056:74;;24139:93;24228:3;24139:93;:::i;:::-;24257:2;24252:3;24248:12;24241:19;;23900:366;;;:::o;24272:419::-;24438:4;24476:2;24465:9;24461:18;24453:26;;24525:9;24519:4;24515:20;24511:1;24500:9;24496:17;24489:47;24553:131;24679:4;24553:131;:::i;:::-;24545:139;;24272:419;;;:::o;24697:147::-;24798:11;24835:3;24820:18;;24697:147;;;;:::o;24850:114::-;;:::o;24970:398::-;25129:3;25150:83;25231:1;25226:3;25150:83;:::i;:::-;25143:90;;25242:93;25331:3;25242:93;:::i;:::-;25360:1;25355:3;25351:11;25344:18;;24970:398;;;:::o;25374:379::-;25558:3;25580:147;25723:3;25580:147;:::i;:::-;25573:154;;25744:3;25737:10;;25374:379;;;:::o;25759:223::-;25899:34;25895:1;25887:6;25883:14;25876:58;25968:6;25963:2;25955:6;25951:15;25944:31;25759:223;:::o;25988:366::-;26130:3;26151:67;26215:2;26210:3;26151:67;:::i;:::-;26144:74;;26227:93;26316:3;26227:93;:::i;:::-;26345:2;26340:3;26336:12;26329:19;;25988:366;;;:::o;26360:419::-;26526:4;26564:2;26553:9;26549:18;26541:26;;26613:9;26607:4;26603:20;26599:1;26588:9;26584:17;26577:47;26641:131;26767:4;26641:131;:::i;:::-;26633:139;;26360:419;;;:::o;26785:240::-;26925:34;26921:1;26913:6;26909:14;26902:58;26994:23;26989:2;26981:6;26977:15;26970:48;26785:240;:::o;27031:366::-;27173:3;27194:67;27258:2;27253:3;27194:67;:::i;:::-;27187:74;;27270:93;27359:3;27270:93;:::i;:::-;27388:2;27383:3;27379:12;27372:19;;27031:366;;;:::o;27403:419::-;27569:4;27607:2;27596:9;27592:18;27584:26;;27656:9;27650:4;27646:20;27642:1;27631:9;27627:17;27620:47;27684:131;27810:4;27684:131;:::i;:::-;27676:139;;27403:419;;;:::o;27828:239::-;27968:34;27964:1;27956:6;27952:14;27945:58;28037:22;28032:2;28024:6;28020:15;28013:47;27828:239;:::o;28073:366::-;28215:3;28236:67;28300:2;28295:3;28236:67;:::i;:::-;28229:74;;28312:93;28401:3;28312:93;:::i;:::-;28430:2;28425:3;28421:12;28414:19;;28073:366;;;:::o;28445:419::-;28611:4;28649:2;28638:9;28634:18;28626:26;;28698:9;28692:4;28688:20;28684:1;28673:9;28669:17;28662:47;28726:131;28852:4;28726:131;:::i;:::-;28718:139;;28445:419;;;:::o;28870:225::-;29010:34;29006:1;28998:6;28994:14;28987:58;29079:8;29074:2;29066:6;29062:15;29055:33;28870:225;:::o;29101:366::-;29243:3;29264:67;29328:2;29323:3;29264:67;:::i;:::-;29257:74;;29340:93;29429:3;29340:93;:::i;:::-;29458:2;29453:3;29449:12;29442:19;;29101:366;;;:::o;29473:419::-;29639:4;29677:2;29666:9;29662:18;29654:26;;29726:9;29720:4;29716:20;29712:1;29701:9;29697:17;29690:47;29754:131;29880:4;29754:131;:::i;:::-;29746:139;;29473:419;;;:::o;29898:223::-;30038:34;30034:1;30026:6;30022:14;30015:58;30107:6;30102:2;30094:6;30090:15;30083:31;29898:223;:::o;30127:366::-;30269:3;30290:67;30354:2;30349:3;30290:67;:::i;:::-;30283:74;;30366:93;30455:3;30366:93;:::i;:::-;30484:2;30479:3;30475:12;30468:19;;30127:366;;;:::o;30499:419::-;30665:4;30703:2;30692:9;30688:18;30680:26;;30752:9;30746:4;30742:20;30738:1;30727:9;30723:17;30716:47;30780:131;30906:4;30780:131;:::i;:::-;30772:139;;30499:419;;;:::o;30924:221::-;31064:34;31060:1;31052:6;31048:14;31041:58;31133:4;31128:2;31120:6;31116:15;31109:29;30924:221;:::o;31151:366::-;31293:3;31314:67;31378:2;31373:3;31314:67;:::i;:::-;31307:74;;31390:93;31479:3;31390:93;:::i;:::-;31508:2;31503:3;31499:12;31492:19;;31151:366;;;:::o;31523:419::-;31689:4;31727:2;31716:9;31712:18;31704:26;;31776:9;31770:4;31766:20;31762:1;31751:9;31747:17;31740:47;31804:131;31930:4;31804:131;:::i;:::-;31796:139;;31523:419;;;:::o;31948:224::-;32088:34;32084:1;32076:6;32072:14;32065:58;32157:7;32152:2;32144:6;32140:15;32133:32;31948:224;:::o;32178:366::-;32320:3;32341:67;32405:2;32400:3;32341:67;:::i;:::-;32334:74;;32417:93;32506:3;32417:93;:::i;:::-;32535:2;32530:3;32526:12;32519:19;;32178:366;;;:::o;32550:419::-;32716:4;32754:2;32743:9;32739:18;32731:26;;32803:9;32797:4;32793:20;32789:1;32778:9;32774:17;32767:47;32831:131;32957:4;32831:131;:::i;:::-;32823:139;;32550:419;;;:::o;32975:222::-;33115:34;33111:1;33103:6;33099:14;33092:58;33184:5;33179:2;33171:6;33167:15;33160:30;32975:222;:::o;33203:366::-;33345:3;33366:67;33430:2;33425:3;33366:67;:::i;:::-;33359:74;;33442:93;33531:3;33442:93;:::i;:::-;33560:2;33555:3;33551:12;33544:19;;33203:366;;;:::o;33575:419::-;33741:4;33779:2;33768:9;33764:18;33756:26;;33828:9;33822:4;33818:20;33814:1;33803:9;33799:17;33792:47;33856:131;33982:4;33856:131;:::i;:::-;33848:139;;33575:419;;;:::o;34000:172::-;34140:24;34136:1;34128:6;34124:14;34117:48;34000:172;:::o;34178:366::-;34320:3;34341:67;34405:2;34400:3;34341:67;:::i;:::-;34334:74;;34417:93;34506:3;34417:93;:::i;:::-;34535:2;34530:3;34526:12;34519:19;;34178:366;;;:::o;34550:419::-;34716:4;34754:2;34743:9;34739:18;34731:26;;34803:9;34797:4;34793:20;34789:1;34778:9;34774:17;34767:47;34831:131;34957:4;34831:131;:::i;:::-;34823:139;;34550:419;;;:::o;34975:297::-;35115:34;35111:1;35103:6;35099:14;35092:58;35184:34;35179:2;35171:6;35167:15;35160:59;35253:11;35248:2;35240:6;35236:15;35229:36;34975:297;:::o;35278:366::-;35420:3;35441:67;35505:2;35500:3;35441:67;:::i;:::-;35434:74;;35517:93;35606:3;35517:93;:::i;:::-;35635:2;35630:3;35626:12;35619:19;;35278:366;;;:::o;35650:419::-;35816:4;35854:2;35843:9;35839:18;35831:26;;35903:9;35897:4;35893:20;35889:1;35878:9;35874:17;35867:47;35931:131;36057:4;35931:131;:::i;:::-;35923:139;;35650:419;;;:::o;36075:240::-;36215:34;36211:1;36203:6;36199:14;36192:58;36284:23;36279:2;36271:6;36267:15;36260:48;36075:240;:::o;36321:366::-;36463:3;36484:67;36548:2;36543:3;36484:67;:::i;:::-;36477:74;;36560:93;36649:3;36560:93;:::i;:::-;36678:2;36673:3;36669:12;36662:19;;36321:366;;;:::o;36693:419::-;36859:4;36897:2;36886:9;36882:18;36874:26;;36946:9;36940:4;36936:20;36932:1;36921:9;36917:17;36910:47;36974:131;37100:4;36974:131;:::i;:::-;36966:139;;36693:419;;;:::o;37118:169::-;37258:21;37254:1;37246:6;37242:14;37235:45;37118:169;:::o;37293:366::-;37435:3;37456:67;37520:2;37515:3;37456:67;:::i;:::-;37449:74;;37532:93;37621:3;37532:93;:::i;:::-;37650:2;37645:3;37641:12;37634:19;;37293:366;;;:::o;37665:419::-;37831:4;37869:2;37858:9;37854:18;37846:26;;37918:9;37912:4;37908:20;37904:1;37893:9;37889:17;37882:47;37946:131;38072:4;37946:131;:::i;:::-;37938:139;;37665:419;;;:::o;38090:241::-;38230:34;38226:1;38218:6;38214:14;38207:58;38299:24;38294:2;38286:6;38282:15;38275:49;38090:241;:::o;38337:366::-;38479:3;38500:67;38564:2;38559:3;38500:67;:::i;:::-;38493:74;;38576:93;38665:3;38576:93;:::i;:::-;38694:2;38689:3;38685:12;38678:19;;38337:366;;;:::o;38709:419::-;38875:4;38913:2;38902:9;38898:18;38890:26;;38962:9;38956:4;38952:20;38948:1;38937:9;38933:17;38926:47;38990:131;39116:4;38990:131;:::i;:::-;38982:139;;38709:419;;;:::o;39134:180::-;39182:77;39179:1;39172:88;39279:4;39276:1;39269:15;39303:4;39300:1;39293:15;39320:180;39368:77;39365:1;39358:88;39465:4;39462:1;39455:15;39489:4;39486:1;39479:15;39506:151;39646:3;39642:1;39634:6;39630:14;39623:27;39506:151;:::o;39663:400::-;39823:3;39844:84;39926:1;39921:3;39844:84;:::i;:::-;39837:91;;39937:93;40026:3;39937:93;:::i;:::-;40055:1;40050:3;40046:11;40039:18;;39663:400;;;:::o;40069:701::-;40350:3;40372:95;40463:3;40454:6;40372:95;:::i;:::-;40365:102;;40484:148;40628:3;40484:148;:::i;:::-;40477:155;;40649:95;40740:3;40731:6;40649:95;:::i;:::-;40642:102;;40761:3;40754:10;;40069:701;;;;;:::o;40776:152::-;40916:4;40912:1;40904:6;40900:14;40893:28;40776:152;:::o;40934:400::-;41094:3;41115:84;41197:1;41192:3;41115:84;:::i;:::-;41108:91;;41208:93;41297:3;41208:93;:::i;:::-;41326:1;41321:3;41317:11;41310:18;;40934:400;;;:::o;41340:541::-;41573:3;41595:148;41739:3;41595:148;:::i;:::-;41588:155;;41760:95;41851:3;41842:6;41760:95;:::i;:::-;41753:102;;41872:3;41865:10;;41340:541;;;;:::o;41887:85::-;41932:7;41961:5;41950:16;;41887:85;;;:::o;41978:158::-;42036:9;42069:61;42087:42;42096:32;42122:5;42096:32;:::i;:::-;42087:42;:::i;:::-;42069:61;:::i;:::-;42056:74;;41978:158;;;:::o;42142:147::-;42237:45;42276:5;42237:45;:::i;:::-;42232:3;42225:58;42142:147;;:::o;42295:114::-;42362:6;42396:5;42390:12;42380:22;;42295:114;;;:::o;42415:184::-;42514:11;42548:6;42543:3;42536:19;42588:4;42583:3;42579:14;42564:29;;42415:184;;;;:::o;42605:132::-;42672:4;42695:3;42687:11;;42725:4;42720:3;42716:14;42708:22;;42605:132;;;:::o;42743:108::-;42820:24;42838:5;42820:24;:::i;:::-;42815:3;42808:37;42743:108;;:::o;42857:179::-;42926:10;42947:46;42989:3;42981:6;42947:46;:::i;:::-;43025:4;43020:3;43016:14;43002:28;;42857:179;;;;:::o;43042:113::-;43112:4;43144;43139:3;43135:14;43127:22;;43042:113;;;:::o;43191:732::-;43310:3;43339:54;43387:5;43339:54;:::i;:::-;43409:86;43488:6;43483:3;43409:86;:::i;:::-;43402:93;;43519:56;43569:5;43519:56;:::i;:::-;43598:7;43629:1;43614:284;43639:6;43636:1;43633:13;43614:284;;;43715:6;43709:13;43742:63;43801:3;43786:13;43742:63;:::i;:::-;43735:70;;43828:60;43881:6;43828:60;:::i;:::-;43818:70;;43674:224;43661:1;43658;43654:9;43649:14;;43614:284;;;43618:14;43914:3;43907:10;;43315:608;;;43191:732;;;;:::o;43929:831::-;44192:4;44230:3;44219:9;44215:19;44207:27;;44244:71;44312:1;44301:9;44297:17;44288:6;44244:71;:::i;:::-;44325:80;44401:2;44390:9;44386:18;44377:6;44325:80;:::i;:::-;44452:9;44446:4;44442:20;44437:2;44426:9;44422:18;44415:48;44480:108;44583:4;44574:6;44480:108;:::i;:::-;44472:116;;44598:72;44666:2;44655:9;44651:18;44642:6;44598:72;:::i;:::-;44680:73;44748:3;44737:9;44733:19;44724:6;44680:73;:::i;:::-;43929:831;;;;;;;;:::o;44766:225::-;44906:34;44902:1;44894:6;44890:14;44883:58;44975:8;44970:2;44962:6;44958:15;44951:33;44766:225;:::o;44997:366::-;45139:3;45160:67;45224:2;45219:3;45160:67;:::i;:::-;45153:74;;45236:93;45325:3;45236:93;:::i;:::-;45354:2;45349:3;45345:12;45338:19;;44997:366;;;:::o;45369:419::-;45535:4;45573:2;45562:9;45558:18;45550:26;;45622:9;45616:4;45612:20;45608:1;45597:9;45593:17;45586:47;45650:131;45776:4;45650:131;:::i;:::-;45642:139;;45369:419;;;:::o;45794:176::-;45826:1;45843:20;45861:1;45843:20;:::i;:::-;45838:25;;45877:20;45895:1;45877:20;:::i;:::-;45872:25;;45916:1;45906:35;;45921:18;;:::i;:::-;45906:35;45962:1;45959;45955:9;45950:14;;45794:176;;;;:::o;45976:233::-;46015:3;46038:24;46056:5;46038:24;:::i;:::-;46029:33;;46084:66;46077:5;46074:77;46071:103;;46154:18;;:::i;:::-;46071:103;46201:1;46194:5;46190:13;46183:20;;45976:233;;;:::o
Swarm Source
ipfs://5847d85d01320d0d8f012fbfd52c05d77765edab6e09190a15203519d2f48b57
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.