Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000 GY
Holders
470
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
1,136.360293 GYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GamersYield
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-06 */ /** Gamers Yield: $GY - You buy on Ethereum, we farm on game yield and return the profits to $GY holders. Tokenomics: 5% of each buy/sell goes to existing holders. 5% of each buy/sell goes into multi-chain farming to add to the treasury and buy back GY tokens. /** * @dev Interface of the ERC20 standard as defined in the EIP. */ pragma solidity ^0.8.4; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ 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; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // Contract implementation contract GamersYield is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000*10**7; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'GamersYield'; string private _symbol = 'GY'; uint8 private _decimals = 6; uint256 private _taxFee = 5; uint256 private _teamFee = 5; uint256 private _previousTaxFee = _taxFee; uint256 private _previousTeamFee = _teamFee; address payable public _GYWalletAddress; address payable public _marketingWalletAddress; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; mapping(address => bool) private _isUniswapPair; bool inSwap = false; bool public swapEnabled = true; uint8 _sellTaxMultiplier = 1; uint256 private _maxTxAmount = 300000000000000e9; uint256 private _numOfTokensToExchangeForTeam = 1; struct AirdropReceiver { address addy; uint256 amount; } event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor( ) { _GYWalletAddress = payable(0xf087c044a75953f41B300A9130E771B0F56A8195); _marketingWalletAddress = payable(0x6366c165a0D2620D0EF1dd0a072F80137DFDA780); _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // UniswapV2 for Ethereum network // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, 'ERC20: transfer amount exceeds allowance' ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, 'ERC20: decreased allowance below zero' ) ); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], 'Excluded addresses cannot call this function' ); (uint256 rAmount, , , , , ) = _getValues(tAmount, false); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, 'Amount must be less than supply'); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount, false); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount, false); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require(rAmount <= _rTotal, 'Amount must be less than total reflections'); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner { require( account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.' ); require(!_isExcluded[account], 'Account is already excluded'); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], 'Account is already excluded'); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function removeAllFee() private { if (_taxFee == 0 && _teamFee == 0) return; _previousTaxFee = _taxFee; _previousTeamFee = _teamFee; _taxFee = 0; _teamFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _teamFee = _previousTeamFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { 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 _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), 'ERC20: transfer from the zero address'); require(recipient != address(0), 'ERC20: transfer to the zero address'); require(amount > 0, 'Transfer amount must be greater than zero'); if (sender != owner() && recipient != owner()) require( amount <= _maxTxAmount, 'Transfer amount exceeds the maxTxAmount.' ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap? // also, don't get caught in a circular team event. // also, don't swap if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeam; if ( !inSwap && swapEnabled && overMinTokenBalance && (recipient == uniswapV2Pair || _isUniswapPair[recipient]) ) { // We need to swap the current tokens to ETH and send to the team wallet swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToTeam(address(this).balance); } } // indicates if fee should be deducted from transfer bool takeFee = false; // take fee only on swaps if ( (sender == uniswapV2Pair || recipient == uniswapV2Pair || _isUniswapPair[recipient] || _isUniswapPair[sender]) && !(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) ) { takeFee = true; } //transfer amount, it will take tax and team fee _tokenTransfer(sender, recipient, amount, takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { // 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 sendETHToTeam(uint256 amount) private { _GYWalletAddress.call{ value: amount.div(2) }(''); _marketingWalletAddress.call{ value: amount.div(2) }(''); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external onlyOwner { uint256 contractETHBalance = address(this).balance; sendETHToTeam(contractETHBalance); } function setSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam ) = _getValues(tAmount, _isSelling(recipient)); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam ) = _getValues(tAmount, _isSelling(recipient)); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam ) = _getValues(tAmount, _isSelling(recipient)); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam ) = _getValues(tAmount, _isSelling(recipient)); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeTeam(uint256 tTeam) private { uint256 currentRate = _getRate(); uint256 rTeam = tTeam.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tTeam); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount, bool isSelling) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues( tAmount, _taxFee, _teamFee, isSelling ); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tTeam, currentRate ); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function _getTValues( uint256 tAmount, uint256 taxFee, uint256 teamFee, bool isSelling ) private view returns ( uint256, uint256, uint256 ) { uint256 finalTax = isSelling ? taxFee.mul(_sellTaxMultiplier) : taxFee; uint256 finalTeam = isSelling ? teamFee.mul(_sellTaxMultiplier) : teamFee; uint256 tFee = tAmount.mul(finalTax).div(100); uint256 tTeam = tAmount.mul(finalTeam).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam); return (tTransferAmount, tFee, tTeam); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTeam = tTeam.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getTaxFee() private view returns (uint256) { return _taxFee; } function _getMaxTxAmount() private view returns (uint256) { return _maxTxAmount; } function _isSelling(address recipient) private view returns (bool) { return recipient == uniswapV2Pair || _isUniswapPair[recipient]; } function _getETHBalance() public view returns (uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner { require(taxFee <= 5, 'taxFee should be in 0 - 5'); _taxFee = taxFee; } function _setTeamFee(uint256 teamFee) external onlyOwner { require(teamFee <= 5, 'teamFee should be in 0 - 5'); _teamFee = teamFee; } function _setSellTaxMultiplier(uint8 mult) external onlyOwner { require(mult >= 1 && mult <= 3, 'multiplier should be in 1 - 3'); _sellTaxMultiplier = mult; } function _setGYWallet(address payable GYWalletAddress) external onlyOwner { _GYWalletAddress = GYWalletAddress; } function _setMarketingWallet(address payable marketingWalletAddress) external onlyOwner { _marketingWalletAddress = marketingWalletAddress; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { require( maxTxAmount >= 100000000000000e9, 'maxTxAmount should be greater than 100000000000000e9' ); _maxTxAmount = maxTxAmount; } function isUniswapPair(address _pair) external view returns (bool) { if (_pair == uniswapV2Pair) return true; return _isUniswapPair[_pair]; } function addUniswapPair(address _pair) external onlyOwner { _isUniswapPair[_pair] = true; } function removeUniswapPair(address _pair) external onlyOwner { _isUniswapPair[_pair] = false; } function Airdrop(AirdropReceiver[] memory recipients) external onlyOwner { for (uint256 _i = 0; _i < recipients.length; _i++) { AirdropReceiver memory _user = recipients[_i]; transferFrom(msg.sender, _user.addy, _user.amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct GamersYield.AirdropReceiver[]","name":"recipients","type":"tuple[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_GYWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"GYWalletAddress","type":"address"}],"name":"_setGYWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mult","type":"uint8"}],"name":"_setSellTaxMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"}],"name":"_setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"isUniswapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removeUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526509184e72a000600755600754600019620000209190620008f5565b6000196200002f919062000846565b6008556040518060400160405280600b81526020017f47616d6572735969656c64000000000000000000000000000000000000000000815250600a90805190602001906200007f929190620006e1565b506040518060400160405280600281526020017f4759000000000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000cd929190620006e1565b506006600c60006101000a81548160ff021916908360ff1602179055506005600d556005600e55600d54600f55600e546010556000601460006101000a81548160ff0219169083151502179055506001601460016101000a81548160ff0219169083151502179055506001601460026101000a81548160ff021916908360ff160217905550693f870857a3e0e380000060155560016016553480156200017257600080fd5b506200019362000187620005ec60201b60201c565b620005f460201b60201c565b73f087c044a75953f41b300a9130e771b0f56a8195601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736366c165a0d2620d0ef1dd0a072f80137dfda780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008546001600062000254620005ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f257600080fd5b505afa15801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d9190620007a8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb9190620007a8565b6040518363ffffffff1660e01b8152600401620003ea929190620007fc565b602060405180830381600087803b1580156200040557600080fd5b505af11580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004409190620007a8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004c3620006b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200057c620005ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005dd919062000829565b60405180910390a350620009d9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006ef90620008bf565b90600052602060002090601f0160209004810192826200071357600085556200075f565b82601f106200072e57805160ff19168380011785556200075f565b828001600101855582156200075f579182015b828111156200075e57825182559160200191906001019062000741565b5b5090506200076e919062000772565b5090565b5b808211156200078d57600081600090555060010162000773565b5090565b600081519050620007a281620009bf565b92915050565b600060208284031215620007c157620007c0620009ba565b5b6000620007d18482850162000791565b91505092915050565b620007e58162000881565b82525050565b620007f681620008b5565b82525050565b6000604082019050620008136000830185620007da565b620008226020830184620007da565b9392505050565b6000602082019050620008406000830184620007eb565b92915050565b60006200085382620008b5565b91506200086083620008b5565b9250828210156200087657620008756200092d565b5b828203905092915050565b60006200088e8262000895565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008d857607f821691505b60208210811415620008ef57620008ee6200098b565b5b50919050565b60006200090282620008b5565b91506200090f83620008b5565b9250826200092257620009216200095c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620009ca8162000881565b8114620009d657600080fd5b50565b60805160601c60a05160601c615a7b62000a3d6000396000818161132101528181611763015281816129c501528181612a9301528181612ae80152614302015260008181610aa901528181612e8c01528181612f7c0152612fa30152615a7b6000f3fe6080604052600436106102555760003560e01c80636ddd171311610139578063a9059cbb116100b6578063e01af92c1161007a578063e01af92c14610907578063f2cc0c1814610930578063f2fde38b14610959578063f429389014610982578063f815a84214610999578063f84354f1146109c45761025c565b8063a9059cbb146107fe578063af9549e01461083b578063bee2259314610864578063cba0e9961461088d578063dd62ed3e146108ca5761025c565b806395d89b41116100fd57806395d89b41146107075780639cece12e14610732578063a457c2d71461076f578063a6931ed7146107ac578063a7f404e2146107d55761025c565b80636ddd17131461063257806370a082311461065d578063715018a61461069a5780638da5cb5b146106b15780638df09524146106dc5761025c565b80632d838119116101d25780634144d9e4116101965780634144d9e4146105225780634549b0391461054d57806349bd5a5e1461058a57806351bc3c85146105b55780635342acb4146105cc5780635880b873146106095761025c565b80632d8381191461042b578063303adcd814610468578063313ce5671461049157806339509351146104bc5780633bd5d173146104f95761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322fba5f11461039c57806323b872dd146103c557806328667162146104025761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109ed565b6040516102839190614dbd565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061484f565b610a7f565b6040516102c09190614d87565b60405180910390f35b3480156102d557600080fd5b506102de610a9d565b6040516102eb9190614fff565b60405180910390f35b34801561030057600080fd5b50610309610aa7565b6040516103169190614da2565b60405180910390f35b34801561032b57600080fd5b50610334610acb565b6040516103419190614fff565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190614905565b610ad5565b005b34801561037f57600080fd5b5061039a6004803603810190610395919061474f565b610ba8565b005b3480156103a857600080fd5b506103c360048036038101906103be919061474f565b610c68565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906147bc565b610d28565b6040516103f99190614d87565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614905565b610e01565b005b34801561043757600080fd5b50610452600480360381019061044d9190614905565b610ecb565b60405161045f9190614fff565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190614972565b610f39565b005b34801561049d57600080fd5b506104a661102a565b6040516104b39190615074565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061484f565b611041565b6040516104f09190614d87565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190614905565b6110f4565b005b34801561052e57600080fd5b50610537611271565b6040516105449190614d6c565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190614932565b611297565b6040516105819190614fff565b60405180910390f35b34801561059657600080fd5b5061059f61131f565b6040516105ac9190614d51565b60405180910390f35b3480156105c157600080fd5b506105ca611343565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906146f5565b6113d8565b6040516106009190614d87565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614905565b61142e565b005b34801561063e57600080fd5b506106476114f8565b6040516106549190614d87565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f91906146f5565b61150b565b6040516106919190614fff565b60405180910390f35b3480156106a657600080fd5b506106af6115f6565b005b3480156106bd57600080fd5b506106c661167e565b6040516106d39190614d51565b60405180910390f35b3480156106e857600080fd5b506106f16116a7565b6040516106fe9190614d6c565b60405180910390f35b34801561071357600080fd5b5061071c6116cd565b6040516107299190614dbd565b60405180910390f35b34801561073e57600080fd5b50610759600480360381019061075491906146f5565b61175f565b6040516107669190614d87565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061484f565b611813565b6040516107a39190614d87565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906146f5565b6118e0565b005b3480156107e157600080fd5b506107fc60048036038101906107f791906146f5565b6119b7565b005b34801561080a57600080fd5b506108256004803603810190610820919061484f565b611a8e565b6040516108329190614d87565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d919061480f565b611aac565b005b34801561087057600080fd5b5061088b6004803603810190610886919061488f565b611b83565b005b34801561089957600080fd5b506108b460048036038101906108af91906146f5565b611c56565b6040516108c19190614d87565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061477c565b611cac565b6040516108fe9190614fff565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906148d8565b611d33565b005b34801561093c57600080fd5b50610957600480360381019061095291906146f5565b611dcc565b005b34801561096557600080fd5b50610980600480360381019061097b91906146f5565b6120ea565b005b34801561098e57600080fd5b506109976121e2565b005b3480156109a557600080fd5b506109ae61226f565b6040516109bb9190614fff565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e691906146f5565b612277565b005b6060600a80546109fc90615337565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2890615337565b8015610a755780601f10610a4a57610100808354040283529160200191610a75565b820191906000526020600020905b815481529060010190602001808311610a5857829003601f168201915b5050505050905090565b6000610a93610a8c6125ad565b84846125b5565b6001905092915050565b6000600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b610add6125ad565b73ffffffffffffffffffffffffffffffffffffffff16610afb61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890614f3f565b60405180910390fd5b69152d02c7e14af6800000811015610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614ebf565b60405180910390fd5b8060158190555050565b610bb06125ad565b73ffffffffffffffffffffffffffffffffffffffff16610bce61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90614f3f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c706125ad565b73ffffffffffffffffffffffffffffffffffffffff16610c8e61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90614f3f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d35848484612780565b610df684610d416125ad565b610df1856040518060600160405280602881526020016159f960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da76125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69092919063ffffffff16565b6125b5565b600190509392505050565b610e096125ad565b73ffffffffffffffffffffffffffffffffffffffff16610e2761167e565b73ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490614f3f565b60405180910390fd5b6005811115610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890614e1f565b60405180910390fd5b80600e8190555050565b6000600854821115610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990614e3f565b60405180910390fd5b6000610f1c612cfb565b9050610f318184612d2690919063ffffffff16565b915050919050565b610f416125ad565b73ffffffffffffffffffffffffffffffffffffffff16610f5f61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90614f3f565b60405180910390fd5b60018160ff1610158015610fcd575060038160ff1611155b61100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390614edf565b60405180910390fd5b80601460026101000a81548160ff021916908360ff16021790555050565b6000600c60009054906101000a900460ff16905090565b60006110ea61104e6125ad565b846110e5856003600061105f6125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b6125b5565b6001905092915050565b60006110fe6125ad565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490614fdf565b60405180910390fd5b600061119a836000612d52565b505050505090506111f381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124b81600854612dbc90919063ffffffff16565b60088190555061126683600954612d3c90919063ffffffff16565b600981905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006007548311156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590614eff565b60405180910390fd5b816113005760006112f0846000612d52565b5050505050905080915050611319565b600061130d846000612d52565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61134b6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661136961167e565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614f3f565b60405180910390fd5b60006113ca3061150b565b90506113d581612dd2565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114366125ad565b73ffffffffffffffffffffffffffffffffffffffff1661145461167e565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614f3f565b60405180910390fd5b60058111156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614ddf565b60405180910390fd5b80600d8190555050565b601460019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115a657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506115f1565b6115ee600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecb565b90505b919050565b6115fe6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661161c61167e565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990614f3f565b60405180910390fd5b61167c6000613054565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b80546116dc90615337565b80601f016020809104026020016040519081016040528092919081815260200182805461170890615337565b80156117555780601f1061172a57610100808354040283529160200191611755565b820191906000526020600020905b81548152906001019060200180831161173857829003601f168201915b5050505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117be576001905061180e565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b60006118d66118206125ad565b846118d185604051806060016040528060258152602001615a21602591396003600061184a6125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69092919063ffffffff16565b6125b5565b6001905092915050565b6118e86125ad565b73ffffffffffffffffffffffffffffffffffffffff1661190661167e565b73ffffffffffffffffffffffffffffffffffffffff161461195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390614f3f565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119bf6125ad565b73ffffffffffffffffffffffffffffffffffffffff166119dd61167e565b73ffffffffffffffffffffffffffffffffffffffff1614611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90614f3f565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611aa2611a9b6125ad565b8484612780565b6001905092915050565b611ab46125ad565b73ffffffffffffffffffffffffffffffffffffffff16611ad261167e565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614f3f565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b8b6125ad565b73ffffffffffffffffffffffffffffffffffffffff16611ba961167e565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690614f3f565b60405180910390fd5b60005b8151811015611c52576000828281518110611c2057611c1f61549f565b5b60200260200101519050611c3d3382600001518360200151610d28565b50508080611c4a9061539a565b915050611c02565b5050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d3b6125ad565b73ffffffffffffffffffffffffffffffffffffffff16611d5961167e565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614f3f565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b611dd46125ad565b73ffffffffffffffffffffffffffffffffffffffff16611df261167e565b73ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90614f3f565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614fbf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90614e9f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561202c57611fe8600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120f26125ad565b73ffffffffffffffffffffffffffffffffffffffff1661211061167e565b73ffffffffffffffffffffffffffffffffffffffff1614612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614f3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd90614e5f565b60405180910390fd5b6121df81613054565b50565b6121ea6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661220861167e565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614f3f565b60405180910390fd5b600047905061226c81613118565b50565b600047905090565b61227f6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661229d61167e565b73ffffffffffffffffffffffffffffffffffffffff16146122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614f3f565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690614e9f565b60405180910390fd5b60005b6006805490508110156125a9578173ffffffffffffffffffffffffffffffffffffffff16600682815481106123ba576123b961549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561259657600660016006805490506124159190615221565b815481106124265761242561549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106124655761246461549f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061255c5761255b615470565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125a9565b80806125a19061539a565b915050612382565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90614f9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614e7f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127739190614fff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614f7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790614dff565b60405180910390fd5b600081116128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90614f5f565b60405180910390fd5b6128ab61167e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291957506128e961167e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296457601554811115612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90614f1f565b60405180910390fd5b5b600061296f3061150b565b905060155481106129805760155490505b60006016548210159050601460009054906101000a900460ff161580156129b35750601460019054906101000a900460ff165b80156129bc5750805b8015612a6757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a665750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612a8f57612a7582612dd2565b60004790506000811115612a8d57612a8c47613118565b5b505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612b3657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612b8a5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612bde5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c885750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c865750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612c9257600190505b612c9e86868684613257565b505050505050565b6000838311158290612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce59190614dbd565b60405180910390fd5b5082840390509392505050565b6000806000612d086134ae565b91509150612d1f8183612d2690919063ffffffff16565b9250505090565b60008183612d349190615196565b905092915050565b60008183612d4a9190615140565b905092915050565b6000806000806000806000806000612d708b600d54600e548d613761565b9250925092506000612d80612cfb565b90506000806000612d938f878787613864565b9250925092508282828989899c509c509c509c509c509c50505050505050509295509295509295565b60008183612dca9190615221565b905092915050565b6001601460006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612e0a57612e096154ce565b5b604051908082528060200260200182016040528015612e385781602001602082028036833780820191505090505b5090503081600081518110612e5057612e4f61549f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ef057600080fd5b505afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f289190614722565b81600181518110612f3c57612f3b61549f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fa1307f0000000000000000000000000000000000000000000000000000000000000000846125b5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161300395949392919061501a565b600060405180830381600087803b15801561301d57600080fd5b505af1158015613031573d6000803e3d6000fd5b50505050506000601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613165600283612d2690919063ffffffff16565b60405161317190614d3c565b60006040518083038185875af1925050503d80600081146131ae576040519150601f19603f3d011682016040523d82523d6000602084013e6131b3565b606091505b505050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613203600283612d2690919063ffffffff16565b60405161320f90614d3c565b60006040518083038185875af1925050503d806000811461324c576040519150601f19603f3d011682016040523d82523d6000602084013e613251565b606091505b50505050565b80613265576132646138ed565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133085750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561331d57613318848484613930565b61349a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133d5576133d0848484613b99565b613499565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134775750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348c57613487848484613e02565b613498565b613497848484614100565b5b5b5b806134a8576134a76142d4565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613724578260016000600684815481106134e8576134e761549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135d6575081600260006006848154811061356e5761356d61549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135ed576008546007549450945050505061375d565b61367d60016000600684815481106136085761360761549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612dbc90919063ffffffff16565b925061370f600260006006848154811061369a5761369961549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612dbc90919063ffffffff16565b9150808061371c9061539a565b9150506134c2565b5061373c600754600854612d2690919063ffffffff16565b8210156137545760085460075493509350505061375d565b81819350935050505b9091565b600080600080846137725786613798565b613797601460029054906101000a900460ff1660ff16886142e890919063ffffffff16565b5b90506000856137a757866137cd565b6137cc601460029054906101000a900460ff1660ff16886142e890919063ffffffff16565b5b905060006137f760646137e9858d6142e890919063ffffffff16565b612d2690919063ffffffff16565b905060006138216064613813858e6142e890919063ffffffff16565b612d2690919063ffffffff16565b9050600061384a8261383c858f612dbc90919063ffffffff16565b612dbc90919063ffffffff16565b905080838397509750975050505050509450945094915050565b60008060008061387d85896142e890919063ffffffff16565b9050600061389486896142e890919063ffffffff16565b905060006138ab87896142e890919063ffffffff16565b905060006138d4826138c68587612dbc90919063ffffffff16565b612dbc90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600d5414801561390157506000600e54145b1561390b5761392e565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061394b876139468a6142fe565b612d52565b9550955095509550955095506139a987600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3e86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1f816143aa565b613b29848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b869190614fff565b60405180910390a3505050505050505050565b600080600080600080613bb487613baf8a6142fe565b612d52565b955095509550955095509550613c1286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca783600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d88816143aa565b613d92848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613def9190614fff565b60405180910390a3505050505050505050565b600080600080600080613e1d87613e188a6142fe565b612d52565b955095509550955095509550613e7b87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fa583600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614086816143aa565b614090848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140ed9190614fff565b60405180910390a3505050505050505050565b60008060008060008061411b876141168a6142fe565b612d52565b95509550955095509550955061417986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425a816143aa565b614264848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142c19190614fff565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b600081836142f691906151c7565b905092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806143a35750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b60006143b4612cfb565b905060006143cb82846142e890919063ffffffff16565b905061441f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561454a5761450683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61456482600854612dbc90919063ffffffff16565b60088190555061457f81600954612d3c90919063ffffffff16565b6009819055505050565b600061459c614597846150b4565b61508f565b905080838252602082019050828560408602820111156145bf576145be615507565b5b60005b858110156145ef57816145d5888261467b565b8452602084019350604083019250506001810190506145c2565b5050509392505050565b60008135905061460881615985565b92915050565b60008151905061461d81615985565b92915050565b6000813590506146328161599c565b92915050565b600082601f83011261464d5761464c6154fd565b5b813561465d848260208601614589565b91505092915050565b600081359050614675816159b3565b92915050565b60006040828403121561469157614690615502565b5b61469b604061508f565b905060006146ab848285016145f9565b60008301525060206146bf848285016146cb565b60208301525092915050565b6000813590506146da816159ca565b92915050565b6000813590506146ef816159e1565b92915050565b60006020828403121561470b5761470a615511565b5b6000614719848285016145f9565b91505092915050565b60006020828403121561473857614737615511565b5b60006147468482850161460e565b91505092915050565b60006020828403121561476557614764615511565b5b600061477384828501614623565b91505092915050565b6000806040838503121561479357614792615511565b5b60006147a1858286016145f9565b92505060206147b2858286016145f9565b9150509250929050565b6000806000606084860312156147d5576147d4615511565b5b60006147e3868287016145f9565b93505060206147f4868287016145f9565b9250506040614805868287016146cb565b9150509250925092565b6000806040838503121561482657614825615511565b5b6000614834858286016145f9565b925050602061484585828601614666565b9150509250929050565b6000806040838503121561486657614865615511565b5b6000614874858286016145f9565b9250506020614885858286016146cb565b9150509250929050565b6000602082840312156148a5576148a4615511565b5b600082013567ffffffffffffffff8111156148c3576148c261550c565b5b6148cf84828501614638565b91505092915050565b6000602082840312156148ee576148ed615511565b5b60006148fc84828501614666565b91505092915050565b60006020828403121561491b5761491a615511565b5b6000614929848285016146cb565b91505092915050565b6000806040838503121561494957614948615511565b5b6000614957858286016146cb565b925050602061496885828601614666565b9150509250929050565b60006020828403121561498857614987615511565b5b6000614996848285016146e0565b91505092915050565b60006149ab83836149c6565b60208301905092915050565b6149c081615267565b82525050565b6149cf81615255565b82525050565b6149de81615255565b82525050565b60006149ef826150f0565b6149f98185615113565b9350614a04836150e0565b8060005b83811015614a35578151614a1c888261499f565b9750614a2783615106565b925050600181019050614a08565b5085935050505092915050565b614a4b81615279565b82525050565b614a5a816152bc565b82525050565b614a69816152ce565b82525050565b6000614a7a826150fb565b614a84818561512f565b9350614a94818560208601615304565b614a9d81615516565b840191505092915050565b6000614ab560198361512f565b9150614ac082615527565b602082019050919050565b6000614ad860238361512f565b9150614ae382615550565b604082019050919050565b6000614afb601a8361512f565b9150614b068261559f565b602082019050919050565b6000614b1e602a8361512f565b9150614b29826155c8565b604082019050919050565b6000614b4160268361512f565b9150614b4c82615617565b604082019050919050565b6000614b6460228361512f565b9150614b6f82615666565b604082019050919050565b6000614b87601b8361512f565b9150614b92826156b5565b602082019050919050565b6000614baa60348361512f565b9150614bb5826156de565b604082019050919050565b6000614bcd601d8361512f565b9150614bd88261572d565b602082019050919050565b6000614bf0601f8361512f565b9150614bfb82615756565b602082019050919050565b6000614c1360288361512f565b9150614c1e8261577f565b604082019050919050565b6000614c3660208361512f565b9150614c41826157ce565b602082019050919050565b6000614c5960298361512f565b9150614c64826157f7565b604082019050919050565b6000614c7c60258361512f565b9150614c8782615846565b604082019050919050565b6000614c9f600083615124565b9150614caa82615895565b600082019050919050565b6000614cc260248361512f565b9150614ccd82615898565b604082019050919050565b6000614ce560228361512f565b9150614cf0826158e7565b604082019050919050565b6000614d08602c8361512f565b9150614d1382615936565b604082019050919050565b614d27816152a5565b82525050565b614d36816152af565b82525050565b6000614d4782614c92565b9150819050919050565b6000602082019050614d6660008301846149d5565b92915050565b6000602082019050614d8160008301846149b7565b92915050565b6000602082019050614d9c6000830184614a42565b92915050565b6000602082019050614db76000830184614a51565b92915050565b60006020820190508181036000830152614dd78184614a6f565b905092915050565b60006020820190508181036000830152614df881614aa8565b9050919050565b60006020820190508181036000830152614e1881614acb565b9050919050565b60006020820190508181036000830152614e3881614aee565b9050919050565b60006020820190508181036000830152614e5881614b11565b9050919050565b60006020820190508181036000830152614e7881614b34565b9050919050565b60006020820190508181036000830152614e9881614b57565b9050919050565b60006020820190508181036000830152614eb881614b7a565b9050919050565b60006020820190508181036000830152614ed881614b9d565b9050919050565b60006020820190508181036000830152614ef881614bc0565b9050919050565b60006020820190508181036000830152614f1881614be3565b9050919050565b60006020820190508181036000830152614f3881614c06565b9050919050565b60006020820190508181036000830152614f5881614c29565b9050919050565b60006020820190508181036000830152614f7881614c4c565b9050919050565b60006020820190508181036000830152614f9881614c6f565b9050919050565b60006020820190508181036000830152614fb881614cb5565b9050919050565b60006020820190508181036000830152614fd881614cd8565b9050919050565b60006020820190508181036000830152614ff881614cfb565b9050919050565b60006020820190506150146000830184614d1e565b92915050565b600060a08201905061502f6000830188614d1e565b61503c6020830187614a60565b818103604083015261504e81866149e4565b905061505d60608301856149d5565b61506a6080830184614d1e565b9695505050505050565b60006020820190506150896000830184614d2d565b92915050565b60006150996150aa565b90506150a58282615369565b919050565b6000604051905090565b600067ffffffffffffffff8211156150cf576150ce6154ce565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061514b826152a5565b9150615156836152a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561518b5761518a6153e3565b5b828201905092915050565b60006151a1826152a5565b91506151ac836152a5565b9250826151bc576151bb615412565b5b828204905092915050565b60006151d2826152a5565b91506151dd836152a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615216576152156153e3565b5b828202905092915050565b600061522c826152a5565b9150615237836152a5565b92508282101561524a576152496153e3565b5b828203905092915050565b600061526082615285565b9050919050565b600061527282615285565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152c7826152e0565b9050919050565b60006152d9826152a5565b9050919050565b60006152eb826152f2565b9050919050565b60006152fd82615285565b9050919050565b60005b83811015615322578082015181840152602081019050615307565b83811115615331576000848401525b50505050565b6000600282049050600182168061534f57607f821691505b6020821081141561536357615362615441565b5b50919050565b61537282615516565b810181811067ffffffffffffffff82111715615391576153906154ce565b5b80604052505050565b60006153a5826152a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153d8576153d76153e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7461784665652073686f756c6420626520696e2030202d203500000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2030202d2035000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f6d756c7469706c6965722073686f756c6420626520696e2031202d2033000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61598e81615255565b811461599957600080fd5b50565b6159a581615267565b81146159b057600080fd5b50565b6159bc81615279565b81146159c757600080fd5b50565b6159d3816152a5565b81146159de57600080fd5b50565b6159ea816152af565b81146159f557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220502f488463c91a5b578cbf0e6b58882e68566fe9c4f4178dd3ba1d826321ca7d64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80636ddd171311610139578063a9059cbb116100b6578063e01af92c1161007a578063e01af92c14610907578063f2cc0c1814610930578063f2fde38b14610959578063f429389014610982578063f815a84214610999578063f84354f1146109c45761025c565b8063a9059cbb146107fe578063af9549e01461083b578063bee2259314610864578063cba0e9961461088d578063dd62ed3e146108ca5761025c565b806395d89b41116100fd57806395d89b41146107075780639cece12e14610732578063a457c2d71461076f578063a6931ed7146107ac578063a7f404e2146107d55761025c565b80636ddd17131461063257806370a082311461065d578063715018a61461069a5780638da5cb5b146106b15780638df09524146106dc5761025c565b80632d838119116101d25780634144d9e4116101965780634144d9e4146105225780634549b0391461054d57806349bd5a5e1461058a57806351bc3c85146105b55780635342acb4146105cc5780635880b873146106095761025c565b80632d8381191461042b578063303adcd814610468578063313ce5671461049157806339509351146104bc5780633bd5d173146104f95761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322fba5f11461039c57806323b872dd146103c557806328667162146104025761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109ed565b6040516102839190614dbd565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061484f565b610a7f565b6040516102c09190614d87565b60405180910390f35b3480156102d557600080fd5b506102de610a9d565b6040516102eb9190614fff565b60405180910390f35b34801561030057600080fd5b50610309610aa7565b6040516103169190614da2565b60405180910390f35b34801561032b57600080fd5b50610334610acb565b6040516103419190614fff565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190614905565b610ad5565b005b34801561037f57600080fd5b5061039a6004803603810190610395919061474f565b610ba8565b005b3480156103a857600080fd5b506103c360048036038101906103be919061474f565b610c68565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906147bc565b610d28565b6040516103f99190614d87565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190614905565b610e01565b005b34801561043757600080fd5b50610452600480360381019061044d9190614905565b610ecb565b60405161045f9190614fff565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190614972565b610f39565b005b34801561049d57600080fd5b506104a661102a565b6040516104b39190615074565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061484f565b611041565b6040516104f09190614d87565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190614905565b6110f4565b005b34801561052e57600080fd5b50610537611271565b6040516105449190614d6c565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190614932565b611297565b6040516105819190614fff565b60405180910390f35b34801561059657600080fd5b5061059f61131f565b6040516105ac9190614d51565b60405180910390f35b3480156105c157600080fd5b506105ca611343565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906146f5565b6113d8565b6040516106009190614d87565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614905565b61142e565b005b34801561063e57600080fd5b506106476114f8565b6040516106549190614d87565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f91906146f5565b61150b565b6040516106919190614fff565b60405180910390f35b3480156106a657600080fd5b506106af6115f6565b005b3480156106bd57600080fd5b506106c661167e565b6040516106d39190614d51565b60405180910390f35b3480156106e857600080fd5b506106f16116a7565b6040516106fe9190614d6c565b60405180910390f35b34801561071357600080fd5b5061071c6116cd565b6040516107299190614dbd565b60405180910390f35b34801561073e57600080fd5b50610759600480360381019061075491906146f5565b61175f565b6040516107669190614d87565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061484f565b611813565b6040516107a39190614d87565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906146f5565b6118e0565b005b3480156107e157600080fd5b506107fc60048036038101906107f791906146f5565b6119b7565b005b34801561080a57600080fd5b506108256004803603810190610820919061484f565b611a8e565b6040516108329190614d87565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d919061480f565b611aac565b005b34801561087057600080fd5b5061088b6004803603810190610886919061488f565b611b83565b005b34801561089957600080fd5b506108b460048036038101906108af91906146f5565b611c56565b6040516108c19190614d87565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061477c565b611cac565b6040516108fe9190614fff565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906148d8565b611d33565b005b34801561093c57600080fd5b50610957600480360381019061095291906146f5565b611dcc565b005b34801561096557600080fd5b50610980600480360381019061097b91906146f5565b6120ea565b005b34801561098e57600080fd5b506109976121e2565b005b3480156109a557600080fd5b506109ae61226f565b6040516109bb9190614fff565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e691906146f5565b612277565b005b6060600a80546109fc90615337565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2890615337565b8015610a755780601f10610a4a57610100808354040283529160200191610a75565b820191906000526020600020905b815481529060010190602001808311610a5857829003601f168201915b5050505050905090565b6000610a93610a8c6125ad565b84846125b5565b6001905092915050565b6000600954905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600754905090565b610add6125ad565b73ffffffffffffffffffffffffffffffffffffffff16610afb61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890614f3f565b60405180910390fd5b69152d02c7e14af6800000811015610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614ebf565b60405180910390fd5b8060158190555050565b610bb06125ad565b73ffffffffffffffffffffffffffffffffffffffff16610bce61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90614f3f565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c706125ad565b73ffffffffffffffffffffffffffffffffffffffff16610c8e61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90614f3f565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d35848484612780565b610df684610d416125ad565b610df1856040518060600160405280602881526020016159f960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da76125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69092919063ffffffff16565b6125b5565b600190509392505050565b610e096125ad565b73ffffffffffffffffffffffffffffffffffffffff16610e2761167e565b73ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490614f3f565b60405180910390fd5b6005811115610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890614e1f565b60405180910390fd5b80600e8190555050565b6000600854821115610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990614e3f565b60405180910390fd5b6000610f1c612cfb565b9050610f318184612d2690919063ffffffff16565b915050919050565b610f416125ad565b73ffffffffffffffffffffffffffffffffffffffff16610f5f61167e565b73ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90614f3f565b60405180910390fd5b60018160ff1610158015610fcd575060038160ff1611155b61100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390614edf565b60405180910390fd5b80601460026101000a81548160ff021916908360ff16021790555050565b6000600c60009054906101000a900460ff16905090565b60006110ea61104e6125ad565b846110e5856003600061105f6125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b6125b5565b6001905092915050565b60006110fe6125ad565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490614fdf565b60405180910390fd5b600061119a836000612d52565b505050505090506111f381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124b81600854612dbc90919063ffffffff16565b60088190555061126683600954612d3c90919063ffffffff16565b600981905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006007548311156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590614eff565b60405180910390fd5b816113005760006112f0846000612d52565b5050505050905080915050611319565b600061130d846000612d52565b50505050915050809150505b92915050565b7f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34681565b61134b6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661136961167e565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614f3f565b60405180910390fd5b60006113ca3061150b565b90506113d581612dd2565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114366125ad565b73ffffffffffffffffffffffffffffffffffffffff1661145461167e565b73ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614f3f565b60405180910390fd5b60058111156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614ddf565b60405180910390fd5b80600d8190555050565b601460019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115a657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506115f1565b6115ee600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecb565b90505b919050565b6115fe6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661161c61167e565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990614f3f565b60405180910390fd5b61167c6000613054565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b80546116dc90615337565b80601f016020809104026020016040519081016040528092919081815260200182805461170890615337565b80156117555780601f1061172a57610100808354040283529160200191611755565b820191906000526020600020905b81548152906001019060200180831161173857829003601f168201915b5050505050905090565b60007f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117be576001905061180e565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b60006118d66118206125ad565b846118d185604051806060016040528060258152602001615a21602591396003600061184a6125ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca69092919063ffffffff16565b6125b5565b6001905092915050565b6118e86125ad565b73ffffffffffffffffffffffffffffffffffffffff1661190661167e565b73ffffffffffffffffffffffffffffffffffffffff161461195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390614f3f565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119bf6125ad565b73ffffffffffffffffffffffffffffffffffffffff166119dd61167e565b73ffffffffffffffffffffffffffffffffffffffff1614611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90614f3f565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611aa2611a9b6125ad565b8484612780565b6001905092915050565b611ab46125ad565b73ffffffffffffffffffffffffffffffffffffffff16611ad261167e565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614f3f565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b8b6125ad565b73ffffffffffffffffffffffffffffffffffffffff16611ba961167e565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690614f3f565b60405180910390fd5b60005b8151811015611c52576000828281518110611c2057611c1f61549f565b5b60200260200101519050611c3d3382600001518360200151610d28565b50508080611c4a9061539a565b915050611c02565b5050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d3b6125ad565b73ffffffffffffffffffffffffffffffffffffffff16611d5961167e565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614f3f565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b611dd46125ad565b73ffffffffffffffffffffffffffffffffffffffff16611df261167e565b73ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f90614f3f565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614fbf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90614e9f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561202c57611fe8600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120f26125ad565b73ffffffffffffffffffffffffffffffffffffffff1661211061167e565b73ffffffffffffffffffffffffffffffffffffffff1614612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614f3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd90614e5f565b60405180910390fd5b6121df81613054565b50565b6121ea6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661220861167e565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614f3f565b60405180910390fd5b600047905061226c81613118565b50565b600047905090565b61227f6125ad565b73ffffffffffffffffffffffffffffffffffffffff1661229d61167e565b73ffffffffffffffffffffffffffffffffffffffff16146122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614f3f565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690614e9f565b60405180910390fd5b60005b6006805490508110156125a9578173ffffffffffffffffffffffffffffffffffffffff16600682815481106123ba576123b961549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561259657600660016006805490506124159190615221565b815481106124265761242561549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106124655761246461549f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061255c5761255b615470565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125a9565b80806125a19061539a565b915050612382565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90614f9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614e7f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127739190614fff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614f7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790614dff565b60405180910390fd5b600081116128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90614f5f565b60405180910390fd5b6128ab61167e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291957506128e961167e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296457601554811115612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90614f1f565b60405180910390fd5b5b600061296f3061150b565b905060155481106129805760155490505b60006016548210159050601460009054906101000a900460ff161580156129b35750601460019054906101000a900460ff165b80156129bc5750805b8015612a6757507f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a665750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612a8f57612a7582612dd2565b60004790506000811115612a8d57612a8c47613118565b5b505b60007f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612b3657507f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612b8a5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612bde5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c885750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c865750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612c9257600190505b612c9e86868684613257565b505050505050565b6000838311158290612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce59190614dbd565b60405180910390fd5b5082840390509392505050565b6000806000612d086134ae565b91509150612d1f8183612d2690919063ffffffff16565b9250505090565b60008183612d349190615196565b905092915050565b60008183612d4a9190615140565b905092915050565b6000806000806000806000806000612d708b600d54600e548d613761565b9250925092506000612d80612cfb565b90506000806000612d938f878787613864565b9250925092508282828989899c509c509c509c509c509c50505050505050509295509295509295565b60008183612dca9190615221565b905092915050565b6001601460006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612e0a57612e096154ce565b5b604051908082528060200260200182016040528015612e385781602001602082028036833780820191505090505b5090503081600081518110612e5057612e4f61549f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ef057600080fd5b505afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f289190614722565b81600181518110612f3c57612f3b61549f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fa1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125b5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161300395949392919061501a565b600060405180830381600087803b15801561301d57600080fd5b505af1158015613031573d6000803e3d6000fd5b50505050506000601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613165600283612d2690919063ffffffff16565b60405161317190614d3c565b60006040518083038185875af1925050503d80600081146131ae576040519150601f19603f3d011682016040523d82523d6000602084013e6131b3565b606091505b505050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613203600283612d2690919063ffffffff16565b60405161320f90614d3c565b60006040518083038185875af1925050503d806000811461324c576040519150601f19603f3d011682016040523d82523d6000602084013e613251565b606091505b50505050565b80613265576132646138ed565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133085750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561331d57613318848484613930565b61349a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133d5576133d0848484613b99565b613499565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134775750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348c57613487848484613e02565b613498565b613497848484614100565b5b5b5b806134a8576134a76142d4565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613724578260016000600684815481106134e8576134e761549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135d6575081600260006006848154811061356e5761356d61549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135ed576008546007549450945050505061375d565b61367d60016000600684815481106136085761360761549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612dbc90919063ffffffff16565b925061370f600260006006848154811061369a5761369961549f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612dbc90919063ffffffff16565b9150808061371c9061539a565b9150506134c2565b5061373c600754600854612d2690919063ffffffff16565b8210156137545760085460075493509350505061375d565b81819350935050505b9091565b600080600080846137725786613798565b613797601460029054906101000a900460ff1660ff16886142e890919063ffffffff16565b5b90506000856137a757866137cd565b6137cc601460029054906101000a900460ff1660ff16886142e890919063ffffffff16565b5b905060006137f760646137e9858d6142e890919063ffffffff16565b612d2690919063ffffffff16565b905060006138216064613813858e6142e890919063ffffffff16565b612d2690919063ffffffff16565b9050600061384a8261383c858f612dbc90919063ffffffff16565b612dbc90919063ffffffff16565b905080838397509750975050505050509450945094915050565b60008060008061387d85896142e890919063ffffffff16565b9050600061389486896142e890919063ffffffff16565b905060006138ab87896142e890919063ffffffff16565b905060006138d4826138c68587612dbc90919063ffffffff16565b612dbc90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600d5414801561390157506000600e54145b1561390b5761392e565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061394b876139468a6142fe565b612d52565b9550955095509550955095506139a987600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3e86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1f816143aa565b613b29848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b869190614fff565b60405180910390a3505050505050505050565b600080600080600080613bb487613baf8a6142fe565b612d52565b955095509550955095509550613c1286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca783600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d88816143aa565b613d92848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613def9190614fff565b60405180910390a3505050505050505050565b600080600080600080613e1d87613e188a6142fe565b612d52565b955095509550955095509550613e7b87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fa583600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614086816143aa565b614090848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140ed9190614fff565b60405180910390a3505050505050505050565b60008060008060008061411b876141168a6142fe565b612d52565b95509550955095509550955061417986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbc90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425a816143aa565b614264848361454f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142c19190614fff565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b600081836142f691906151c7565b905092915050565b60007f000000000000000000000000860a1f08e5c0eb660c1d61bf937eaf6554b9b34673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806143a35750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b60006143b4612cfb565b905060006143cb82846142e890919063ffffffff16565b905061441f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561454a5761450683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61456482600854612dbc90919063ffffffff16565b60088190555061457f81600954612d3c90919063ffffffff16565b6009819055505050565b600061459c614597846150b4565b61508f565b905080838252602082019050828560408602820111156145bf576145be615507565b5b60005b858110156145ef57816145d5888261467b565b8452602084019350604083019250506001810190506145c2565b5050509392505050565b60008135905061460881615985565b92915050565b60008151905061461d81615985565b92915050565b6000813590506146328161599c565b92915050565b600082601f83011261464d5761464c6154fd565b5b813561465d848260208601614589565b91505092915050565b600081359050614675816159b3565b92915050565b60006040828403121561469157614690615502565b5b61469b604061508f565b905060006146ab848285016145f9565b60008301525060206146bf848285016146cb565b60208301525092915050565b6000813590506146da816159ca565b92915050565b6000813590506146ef816159e1565b92915050565b60006020828403121561470b5761470a615511565b5b6000614719848285016145f9565b91505092915050565b60006020828403121561473857614737615511565b5b60006147468482850161460e565b91505092915050565b60006020828403121561476557614764615511565b5b600061477384828501614623565b91505092915050565b6000806040838503121561479357614792615511565b5b60006147a1858286016145f9565b92505060206147b2858286016145f9565b9150509250929050565b6000806000606084860312156147d5576147d4615511565b5b60006147e3868287016145f9565b93505060206147f4868287016145f9565b9250506040614805868287016146cb565b9150509250925092565b6000806040838503121561482657614825615511565b5b6000614834858286016145f9565b925050602061484585828601614666565b9150509250929050565b6000806040838503121561486657614865615511565b5b6000614874858286016145f9565b9250506020614885858286016146cb565b9150509250929050565b6000602082840312156148a5576148a4615511565b5b600082013567ffffffffffffffff8111156148c3576148c261550c565b5b6148cf84828501614638565b91505092915050565b6000602082840312156148ee576148ed615511565b5b60006148fc84828501614666565b91505092915050565b60006020828403121561491b5761491a615511565b5b6000614929848285016146cb565b91505092915050565b6000806040838503121561494957614948615511565b5b6000614957858286016146cb565b925050602061496885828601614666565b9150509250929050565b60006020828403121561498857614987615511565b5b6000614996848285016146e0565b91505092915050565b60006149ab83836149c6565b60208301905092915050565b6149c081615267565b82525050565b6149cf81615255565b82525050565b6149de81615255565b82525050565b60006149ef826150f0565b6149f98185615113565b9350614a04836150e0565b8060005b83811015614a35578151614a1c888261499f565b9750614a2783615106565b925050600181019050614a08565b5085935050505092915050565b614a4b81615279565b82525050565b614a5a816152bc565b82525050565b614a69816152ce565b82525050565b6000614a7a826150fb565b614a84818561512f565b9350614a94818560208601615304565b614a9d81615516565b840191505092915050565b6000614ab560198361512f565b9150614ac082615527565b602082019050919050565b6000614ad860238361512f565b9150614ae382615550565b604082019050919050565b6000614afb601a8361512f565b9150614b068261559f565b602082019050919050565b6000614b1e602a8361512f565b9150614b29826155c8565b604082019050919050565b6000614b4160268361512f565b9150614b4c82615617565b604082019050919050565b6000614b6460228361512f565b9150614b6f82615666565b604082019050919050565b6000614b87601b8361512f565b9150614b92826156b5565b602082019050919050565b6000614baa60348361512f565b9150614bb5826156de565b604082019050919050565b6000614bcd601d8361512f565b9150614bd88261572d565b602082019050919050565b6000614bf0601f8361512f565b9150614bfb82615756565b602082019050919050565b6000614c1360288361512f565b9150614c1e8261577f565b604082019050919050565b6000614c3660208361512f565b9150614c41826157ce565b602082019050919050565b6000614c5960298361512f565b9150614c64826157f7565b604082019050919050565b6000614c7c60258361512f565b9150614c8782615846565b604082019050919050565b6000614c9f600083615124565b9150614caa82615895565b600082019050919050565b6000614cc260248361512f565b9150614ccd82615898565b604082019050919050565b6000614ce560228361512f565b9150614cf0826158e7565b604082019050919050565b6000614d08602c8361512f565b9150614d1382615936565b604082019050919050565b614d27816152a5565b82525050565b614d36816152af565b82525050565b6000614d4782614c92565b9150819050919050565b6000602082019050614d6660008301846149d5565b92915050565b6000602082019050614d8160008301846149b7565b92915050565b6000602082019050614d9c6000830184614a42565b92915050565b6000602082019050614db76000830184614a51565b92915050565b60006020820190508181036000830152614dd78184614a6f565b905092915050565b60006020820190508181036000830152614df881614aa8565b9050919050565b60006020820190508181036000830152614e1881614acb565b9050919050565b60006020820190508181036000830152614e3881614aee565b9050919050565b60006020820190508181036000830152614e5881614b11565b9050919050565b60006020820190508181036000830152614e7881614b34565b9050919050565b60006020820190508181036000830152614e9881614b57565b9050919050565b60006020820190508181036000830152614eb881614b7a565b9050919050565b60006020820190508181036000830152614ed881614b9d565b9050919050565b60006020820190508181036000830152614ef881614bc0565b9050919050565b60006020820190508181036000830152614f1881614be3565b9050919050565b60006020820190508181036000830152614f3881614c06565b9050919050565b60006020820190508181036000830152614f5881614c29565b9050919050565b60006020820190508181036000830152614f7881614c4c565b9050919050565b60006020820190508181036000830152614f9881614c6f565b9050919050565b60006020820190508181036000830152614fb881614cb5565b9050919050565b60006020820190508181036000830152614fd881614cd8565b9050919050565b60006020820190508181036000830152614ff881614cfb565b9050919050565b60006020820190506150146000830184614d1e565b92915050565b600060a08201905061502f6000830188614d1e565b61503c6020830187614a60565b818103604083015261504e81866149e4565b905061505d60608301856149d5565b61506a6080830184614d1e565b9695505050505050565b60006020820190506150896000830184614d2d565b92915050565b60006150996150aa565b90506150a58282615369565b919050565b6000604051905090565b600067ffffffffffffffff8211156150cf576150ce6154ce565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061514b826152a5565b9150615156836152a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561518b5761518a6153e3565b5b828201905092915050565b60006151a1826152a5565b91506151ac836152a5565b9250826151bc576151bb615412565b5b828204905092915050565b60006151d2826152a5565b91506151dd836152a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615216576152156153e3565b5b828202905092915050565b600061522c826152a5565b9150615237836152a5565b92508282101561524a576152496153e3565b5b828203905092915050565b600061526082615285565b9050919050565b600061527282615285565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152c7826152e0565b9050919050565b60006152d9826152a5565b9050919050565b60006152eb826152f2565b9050919050565b60006152fd82615285565b9050919050565b60005b83811015615322578082015181840152602081019050615307565b83811115615331576000848401525b50505050565b6000600282049050600182168061534f57607f821691505b6020821081141561536357615362615441565b5b50919050565b61537282615516565b810181811067ffffffffffffffff82111715615391576153906154ce565b5b80604052505050565b60006153a5826152a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153d8576153d76153e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7461784665652073686f756c6420626520696e2030202d203500000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2030202d2035000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f6d756c7469706c6965722073686f756c6420626520696e2031202d2033000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61598e81615255565b811461599957600080fd5b50565b6159a581615267565b81146159b057600080fd5b50565b6159bc81615279565b81146159c757600080fd5b50565b6159d3816152a5565b81146159de57600080fd5b50565b6159ea816152af565b81146159f557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220502f488463c91a5b578cbf0e6b58882e68566fe9c4f4178dd3ba1d826321ca7d64736f6c63430008070033
Deployed Bytecode Sourcemap
28782:18862:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31246:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32135:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33546:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29756:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31499:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46775:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46607:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46480:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32310:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46151:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34466:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46303:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31416:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32690:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33633:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29703:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34023:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29812:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39141:144;;;;;;;;;;;;;:::i;:::-;;35874:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46005:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29933:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31594:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12254:94;;;;;;;;;;;;;:::i;:::-;;11603:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29659:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31329:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47010:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32950:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47275:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47170:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31788:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33398:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47384:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33288:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31969:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39441:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34711:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12503:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39291:144;;;;;;;;;;;;;:::i;:::-;;45894:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35148:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31246:77;31283:13;31312:5;31305:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31246:77;:::o;32135:169::-;32225:4;32241:39;32250:12;:10;:12::i;:::-;32264:7;32273:6;32241:8;:39::i;:::-;32294:4;32287:11;;32135:169;;;;:::o;33546:81::-;33588:7;33611:10;;33604:17;;33546:81;:::o;29756:51::-;;;:::o;31499:89::-;31552:7;31575;;31568:14;;31499:89;:::o;46775:229::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46878:17:::1;46863:11;:32;;46847:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;46987:11;46972:12;:26;;;;46775:229:::0;:::o;46607:162::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46741:22:::1;46715:23;;:48;;;;;;;;;;;;;;;;;;46607:162:::0;:::o;46480:121::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46580:15:::1;46561:16;;:34;;;;;;;;;;;;;;;;;;46480:121:::0;:::o;32310:374::-;32428:4;32441:36;32451:6;32459:9;32470:6;32441:9;:36::i;:::-;32484:176;32501:6;32516:12;:10;:12::i;:::-;32537:116;32585:6;32537:116;;;;;;;;;;;;;;;;;:11;:19;32549:6;32537:19;;;;;;;;;;;;;;;:33;32557:12;:10;:12::i;:::-;32537:33;;;;;;;;;;;;;;;;:37;;:116;;;;;:::i;:::-;32484:8;:176::i;:::-;32674:4;32667:11;;32310:374;;;;;:::o;46151:146::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46234:1:::1;46223:7;:12;;46215:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46284:7;46273:8;:18;;;;46151:146:::0;:::o;34466:239::-;34533:7;34568;;34557;:18;;34549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34629:19;34651:10;:8;:10::i;:::-;34629:32;;34675:24;34687:11;34675:7;:11;;:24;;;;:::i;:::-;34668:31;;;34466:239;;;:::o;46303:171::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46388:1:::1;46380:4;:9;;;;:22;;;;;46401:1;46393:4;:9;;;;46380:22;46372:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46464:4;46443:18;;:25;;;;;;;;;;;;;;;;;;46303:171:::0;:::o;31416:77::-;31457:5;31478:9;;;;;;;;;;;31471:16;;31416:77;:::o;32690:254::-;32793:4;32809:111;32826:12;:10;:12::i;:::-;32847:7;32863:50;32902:10;32863:11;:25;32875:12;:10;:12::i;:::-;32863:25;;;;;;;;;;;;;;;:34;32889:7;32863:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32809:8;:111::i;:::-;32934:4;32927:11;;32690:254;;;;:::o;33633:384::-;33681:14;33698:12;:10;:12::i;:::-;33681:29;;33734:11;:19;33746:6;33734:19;;;;;;;;;;;;;;;;;;;;;;;;;33733:20;33717:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:15;33852:26;33863:7;33872:5;33852:10;:26::i;:::-;33822:56;;;;;;;33903:28;33923:7;33903;:15;33911:6;33903:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33885:7;:15;33893:6;33885:15;;;;;;;;;;;;;;;:46;;;;33948:20;33960:7;33948;;:11;;:20;;;;:::i;:::-;33938:7;:30;;;;33988:23;34003:7;33988:10;;:14;;:23;;;;:::i;:::-;33975:10;:36;;;;33674:343;;33633:384;:::o;29703:46::-;;;;;;;;;;;;;:::o;34023:437::-;34129:7;34167;;34156;:18;;34148:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34222:17;34217:238;;34251:15;34280:26;34291:7;34300:5;34280:10;:26::i;:::-;34250:56;;;;;;;34322:7;34315:14;;;;;34217:238;34355:23;34390:26;34401:7;34410:5;34390:10;:26::i;:::-;34352:64;;;;;;;34432:15;34425:22;;;34023:437;;;;;:::o;29812:38::-;;;:::o;39141:144::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39189:23:::1;39215:24;39233:4;39215:9;:24::i;:::-;39189:50;;39246:33;39263:15;39246:16;:33::i;:::-;39182:103;39141:144::o:0;35874:118::-;35939:4;35959:18;:27;35978:7;35959:27;;;;;;;;;;;;;;;;;;;;;;;;;35952:34;;35874:118;;;:::o;46005:140::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46085:1:::1;46075:6;:11;;46067:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46133:6;46123:7;:16;;;;46005:140:::0;:::o;29933:30::-;;;;;;;;;;;;;:::o;31594:188::-;31660:7;31680:11;:20;31692:7;31680:20;;;;;;;;;;;;;;;;;;;;;;;;;31676:49;;;31709:7;:16;31717:7;31709:16;;;;;;;;;;;;;;;;31702:23;;;;31676:49;31739:37;31759:7;:16;31767:7;31759:16;;;;;;;;;;;;;;;;31739:19;:37::i;:::-;31732:44;;31594:188;;;;:::o;12254:94::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12319:21:::1;12337:1;12319:9;:21::i;:::-;12254:94::o:0;11603:87::-;11649:7;11676:6;;;;;;;;;;;11669:13;;11603:87;:::o;29659:39::-;;;;;;;;;;;;;:::o;31329:81::-;31368:13;31397:7;31390:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31329:81;:::o;47010:154::-;47071:4;47097:13;47088:22;;:5;:22;;;47084:39;;;47119:4;47112:11;;;;47084:39;47137:14;:21;47152:5;47137:21;;;;;;;;;;;;;;;;;;;;;;;;;47130:28;;47010:154;;;;:::o;32950:332::-;33058:4;33074:184;33091:12;:10;:12::i;:::-;33112:7;33128:123;33177:15;33128:123;;;;;;;;;;;;;;;;;:11;:25;33140:12;:10;:12::i;:::-;33128:25;;;;;;;;;;;;;;;:34;33154:7;33128:34;;;;;;;;;;;;;;;;:38;;:123;;;;;:::i;:::-;33074:8;:184::i;:::-;33272:4;33265:11;;32950:332;;;;:::o;47275:103::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47367:5:::1;47343:14;:21;47358:5;47343:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47275:103:::0;:::o;47170:99::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47259:4:::1;47235:14;:21;47250:5;47235:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;47170:99:::0;:::o;31788:175::-;31881:4;31897:42;31907:12;:10;:12::i;:::-;31921:9;31932:6;31897:9;:42::i;:::-;31953:4;31946:11;;31788:175;;;;:::o;33398:142::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33526:8:::1;33496:18;:27;33515:7;33496:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;33398:142:::0;;:::o;47384:257::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47469:10:::1;47464:172;47490:10;:17;47485:2;:22;47464:172;;;47524:28;47555:10;47566:2;47555:14;;;;;;;;:::i;:::-;;;;;;;;47524:45;;47578:50;47591:10;47603:5;:10;;;47615:5;:12;;;47578;:50::i;:::-;;47515:121;47509:4;;;;;:::i;:::-;;;;47464:172;;;;47384:257:::0;:::o;33288:104::-;33346:4;33366:11;:20;33378:7;33366:20;;;;;;;;;;;;;;;;;;;;;;;;;33359:27;;33288:104;;;:::o;31969:160::-;32070:7;32096:11;:18;32108:5;32096:18;;;;;;;;;;;;;;;:27;32115:7;32096:27;;;;;;;;;;;;;;;;32089:34;;31969:160;;;;:::o;39441:91::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39519:7:::1;39505:11;;:21;;;;;;;;;;;;;;;;;;39441:91:::0;:::o;34711:431::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34805:42:::1;34794:53;;:7;:53;;;;34778:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;34915:11;:20;34927:7;34915:20;;;;;;;;;;;;;;;;;;;;;;;;;34914:21;34906:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34997:1;34978:7;:16;34986:7;34978:16;;;;;;;;;;;;;;;;:20;34974:99;;;35028:37;35048:7;:16;35056:7;35048:16;;;;;;;;;;;;;;;;35028:19;:37::i;:::-;35009:7;:16;35017:7;35009:16;;;;;;;;;;;;;;;:56;;;;34974:99;35102:4;35079:11;:20;35091:7;35079:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35113:9;35128:7;35113:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34711:431:::0;:::o;12503:192::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12612:1:::1;12592:22;;:8;:22;;;;12584:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12668:19;12678:8;12668:9;:19::i;:::-;12503:192:::0;:::o;39291:144::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39339:26:::1;39368:21;39339:50;;39396:33;39410:18;39396:13;:33::i;:::-;39332:103;39291:144::o:0;45894:105::-;45941:15;45972:21;45965:28;;45894:105;:::o;35148:410::-;11834:12;:10;:12::i;:::-;11823:23;;:7;:5;:7::i;:::-;:23;;;11815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35223:11:::1;:20;35235:7;35223:20;;;;;;;;;;;;;;;;;;;;;;;;;35215:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35287:9;35282:271;35306:9;:16;;;;35302:1;:20;35282:271;;;35358:7;35342:23;;:9;35352:1;35342:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;35338:208;;;35393:9;35422:1;35403:9;:16;;;;:20;;;;:::i;:::-;35393:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35378:9;35388:1;35378:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35454:1;35435:7;:16;35443:7;35435:16;;;;;;;;;;;;;;;:20;;;;35489:5;35466:11;:20;35478:7;35466:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35505:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35531:5;;35338:208;35324:3;;;;;:::i;:::-;;;;35282:271;;;;35148:410:::0;:::o;10479:98::-;10532:7;10559:10;10552:17;;10479:98;:::o;35998:339::-;36124:1;36107:19;;:5;:19;;;;36099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36201:1;36182:21;;:7;:21;;;;36174:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36281:6;36251:11;:18;36263:5;36251:18;;;;;;;;;;;;;;;:27;36270:7;36251:27;;;;;;;;;;;;;;;:36;;;;36315:7;36299:32;;36308:5;36299:32;;;36324:6;36299:32;;;;;;:::i;:::-;;;;;;;;35998:339;;;:::o;36343:1933::-;36474:1;36456:20;;:6;:20;;;;36448:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:1;36533:23;;:9;:23;;;;36525:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36620:1;36611:6;:10;36603:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36690:7;:5;:7::i;:::-;36680:17;;:6;:17;;;;:41;;;;;36714:7;:5;:7::i;:::-;36701:20;;:9;:20;;;;36680:41;36676:156;;;36758:12;;36748:6;:22;;36730:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36676:156;37075:28;37106:24;37124:4;37106:9;:24::i;:::-;37075:55;;37167:12;;37143:20;:36;37139:94;;37213:12;;37190:35;;37139:94;37241:24;37299:29;;37268:20;:60;;37241:87;;37348:6;;;;;;;;;;;37347:7;:29;;;;;37365:11;;;;;;;;;;;37347:29;:59;;;;;37387:19;37347:59;:127;;;;;37431:13;37418:26;;:9;:26;;;:55;;;;37448:14;:25;37463:9;37448:25;;;;;;;;;;;;;;;;;;;;;;;;;37418:55;37347:127;37335:436;;;37571:38;37588:20;37571:16;:38::i;:::-;37620:26;37649:21;37620:50;;37704:1;37683:18;:22;37679:85;;;37718:36;37732:21;37718:13;:36::i;:::-;37679:85;37482:289;37335:436;37837:12;37920:13;37910:23;;:6;:23;;;:62;;;;37959:13;37946:26;;:9;:26;;;37910:62;:100;;;;37985:14;:25;38000:9;37985:25;;;;;;;;;;;;;;;;;;;;;;;;;37910:100;:135;;;;38023:14;:22;38038:6;38023:22;;;;;;;;;;;;;;;;;;;;;;;;;37910:135;37909:210;;;;;38059:18;:26;38078:6;38059:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;38089:18;:29;38108:9;38089:29;;;;;;;;;;;;;;;;;;;;;;;;;38059:59;38057:62;37909:210;37897:261;;;38146:4;38136:14;;37897:261;38220:50;38235:6;38243:9;38254:6;38262:7;38220:14;:50::i;:::-;36441:1835;;;36343:1933;;;:::o;8054:240::-;8174:7;8232:1;8227;:6;;8235:12;8219:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8274:1;8270;:5;8263:12;;8054:240;;;;;:::o;44877:154::-;44919:7;44936:15;44953;44972:19;:17;:19::i;:::-;44935:56;;;;45005:20;45017:7;45005;:11;;:20;;;;:::i;:::-;44998:27;;;;44877:154;:::o;6912:98::-;6970:7;7001:1;6997;:5;;;;:::i;:::-;6990:12;;6912:98;;;;:::o;5775:::-;5833:7;5864:1;5860;:5;;;;:::i;:::-;5853:12;;5775:98;;;;:::o;43205:613::-;43303:7;43319;43335;43351;43367;43383;43409:23;43434:12;43448:13;43465:85;43485:7;43501;;43517:8;;43534:9;43465:11;:85::i;:::-;43408:142;;;;;;43557:19;43579:10;:8;:10::i;:::-;43557:32;;43597:15;43614:23;43639:12;43655:81;43675:7;43691:4;43704:5;43718:11;43655;:81::i;:::-;43596:140;;;;;;43751:7;43760:15;43777:4;43783:15;43800:4;43806:5;43743:69;;;;;;;;;;;;;;;;;;;43205:613;;;;;;;;:::o;6156:98::-;6214:7;6245:1;6241;:5;;;;:::i;:::-;6234:12;;6156:98;;;;:::o;38282:537::-;30339:4;30330:6;;:13;;;;;;;;;;;;;;;;;;38412:21:::1;38450:1;38436:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38412:40;;38477:4;38459;38464:1;38459:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38499:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38489:4;38494:1;38489:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;38530:62;38547:4;38562:15;38580:11;38530:8;:62::i;:::-;38623:15;:66;;;38698:11;38718:1;38756:4;38777;38791:15;38623:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38349:470;30367:5:::0;30358:6;;:14;;;;;;;;;;;;;;;;;;38282:537;:::o;12703:173::-;12759:16;12778:6;;;;;;;;;;;12759:25;;12804:8;12795:6;;:17;;;;;;;;;;;;;;;;;;12859:8;12828:40;;12849:8;12828:40;;;;;;;;;;;;12748:128;12703:173;:::o;38825:172::-;38879:16;;;;;;;;;;;:21;;38909:13;38920:1;38909:6;:10;;:13;;;;:::i;:::-;38879:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38935:23;;;;;;;;;;;:28;;38972:13;38983:1;38972:6;:10;;:13;;;;:::i;:::-;38935:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38825:172;:::o;39538:636::-;39672:7;39667:28;;39681:14;:12;:14::i;:::-;39667:28;39708:11;:19;39720:6;39708:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;39732:11;:22;39744:9;39732:22;;;;;;;;;;;;;;;;;;;;;;;;;39731:23;39708:46;39704:427;;;39765:48;39787:6;39795:9;39806:6;39765:21;:48::i;:::-;39704:427;;;39832:11;:19;39844:6;39832:19;;;;;;;;;;;;;;;;;;;;;;;;;39831:20;:46;;;;;39855:11;:22;39867:9;39855:22;;;;;;;;;;;;;;;;;;;;;;;;;39831:46;39827:304;;;39888:46;39908:6;39916:9;39927:6;39888:19;:46::i;:::-;39827:304;;;39952:11;:19;39964:6;39952:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;39975:11;:22;39987:9;39975:22;;;;;;;;;;;;;;;;;;;;;;;;;39952:45;39948:183;;;40008:48;40030:6;40038:9;40049:6;40008:21;:48::i;:::-;39948:183;;;40079:44;40097:6;40105:9;40116:6;40079:17;:44::i;:::-;39948:183;39827:304;39704:427;40144:7;40139:29;;40153:15;:13;:15::i;:::-;40139:29;39538:636;;;;:::o;45037:521::-;45088:7;45097;45113:15;45131:7;;45113:25;;45145:15;45163:7;;45145:25;;45182:9;45177:276;45201:9;:16;;;;45197:1;:20;45177:276;;;45261:7;45237;:21;45245:9;45255:1;45245:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45237:21;;;;;;;;;;;;;;;;:31;:66;;;;45296:7;45272;:21;45280:9;45290:1;45280:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45272:21;;;;;;;;;;;;;;;;:31;45237:66;45233:106;;;45322:7;;45331;;45314:25;;;;;;;;;45233:106;45358:34;45370:7;:21;45378:9;45388:1;45378:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45370:21;;;;;;;;;;;;;;;;45358:7;:11;;:34;;;;:::i;:::-;45348:44;;45411:34;45423:7;:21;45431:9;45441:1;45431:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45423:21;;;;;;;;;;;;;;;;45411:7;:11;;:34;;;;:::i;:::-;45401:44;;45219:3;;;;;:::i;:::-;;;;45177:276;;;;45473:20;45485:7;;45473;;:11;;:20;;;;:::i;:::-;45463:7;:30;45459:61;;;45503:7;;45512;;45495:25;;;;;;;;45459:61;45535:7;45544;45527:25;;;;;;45037:521;;;:::o;43824:583::-;43981:7;43997;44013;44038:16;44057:9;:51;;44102:6;44057:51;;;44069:30;44080:18;;;;;;;;;;;44069:30;;:6;:10;;:30;;;;:::i;:::-;44057:51;44038:70;;44115:17;44135:9;:53;;44181:7;44135:53;;;44147:31;44159:18;;;;;;;;;;;44147:31;;:7;:11;;:31;;;;:::i;:::-;44135:53;44115:73;;44197:12;44212:30;44238:3;44212:21;44224:8;44212:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;44197:45;;44249:13;44265:31;44292:3;44265:22;44277:9;44265:7;:11;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;44249:47;;44303:23;44329:28;44351:5;44329:17;44341:4;44329:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;44303:54;;44372:15;44389:4;44395:5;44364:37;;;;;;;;;;;43824:583;;;;;;;;:::o;44413:458::-;44571:7;44587;44603;44628:15;44646:24;44658:11;44646:7;:11;;:24;;;;:::i;:::-;44628:42;;44677:12;44692:21;44701:11;44692:4;:8;;:21;;;;:::i;:::-;44677:36;;44720:13;44736:22;44746:11;44736:5;:9;;:22;;;;:::i;:::-;44720:38;;44765:23;44791:28;44813:5;44791:17;44803:4;44791:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;44765:54;;44834:7;44843:15;44860:4;44826:39;;;;;;;;;;44413:458;;;;;;;;:::o;35564:193::-;35618:1;35607:7;;:12;:29;;;;;35635:1;35623:8;;:13;35607:29;35603:42;;;35638:7;;35603:42;35671:7;;35653:15;:25;;;;35704:8;;35685:16;:27;;;;35731:1;35721:7;:11;;;;35750:1;35739:8;:12;;;;35564:193;:::o;41367:610::-;41494:15;41518:23;41550:12;41571:23;41603:12;41624:13;41647:42;41658:7;41667:21;41678:9;41667:10;:21::i;:::-;41647:10;:42::i;:::-;41485:204;;;;;;;;;;;;41714:28;41734:7;41714;:15;41722:6;41714:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41696:7;:15;41704:6;41696:15;;;;;;;;;;;;;;;:46;;;;41767:28;41787:7;41767;:15;41775:6;41767:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41749:7;:15;41757:6;41749:15;;;;;;;;;;;;;;;:46;;;;41823:39;41846:15;41823:7;:18;41831:9;41823:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41802:7;:18;41810:9;41802:18;;;;;;;;;;;;;;;:60;;;;41869:16;41879:5;41869:9;:16::i;:::-;41892:23;41904:4;41910;41892:11;:23::i;:::-;41944:9;41927:44;;41936:6;41927:44;;;41955:15;41927:44;;;;;;:::i;:::-;;;;;;;;41478:499;;;;;;41367:610;;;:::o;40739:622::-;40864:15;40888:23;40920:12;40941:23;40973:12;40994:13;41017:42;41028:7;41037:21;41048:9;41037:10;:21::i;:::-;41017:10;:42::i;:::-;40855:204;;;;;;;;;;;;41084:28;41104:7;41084;:15;41092:6;41084:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41066:7;:15;41074:6;41066:15;;;;;;;;;;;;;;;:46;;;;41140:39;41163:15;41140:7;:18;41148:9;41140:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41119:7;:18;41127:9;41119:18;;;;;;;;;;;;;;;:60;;;;41207:39;41230:15;41207:7;:18;41215:9;41207:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41186:7;:18;41194:9;41186:18;;;;;;;;;;;;;;;:60;;;;41253:16;41263:5;41253:9;:16::i;:::-;41276:23;41288:4;41294;41276:11;:23::i;:::-;41328:9;41311:44;;41320:6;41311:44;;;41339:15;41311:44;;;;;;:::i;:::-;;;;;;;;40848:513;;;;;;40739:622;;;:::o;41983:677::-;42110:15;42134:23;42166:12;42187:23;42219:12;42240:13;42263:42;42274:7;42283:21;42294:9;42283:10;:21::i;:::-;42263:10;:42::i;:::-;42101:204;;;;;;;;;;;;42330:28;42350:7;42330;:15;42338:6;42330:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42312:7;:15;42320:6;42312:15;;;;;;;;;;;;;;;:46;;;;42383:28;42403:7;42383;:15;42391:6;42383:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42365:7;:15;42373:6;42365:15;;;;;;;;;;;;;;;:46;;;;42439:39;42462:15;42439:7;:18;42447:9;42439:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42418:7;:18;42426:9;42418:18;;;;;;;;;;;;;;;:60;;;;42506:39;42529:15;42506:7;:18;42514:9;42506:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42485:7;:18;42493:9;42485:18;;;;;;;;;;;;;;;:60;;;;42552:16;42562:5;42552:9;:16::i;:::-;42575:23;42587:4;42593;42575:11;:23::i;:::-;42627:9;42610:44;;42619:6;42610:44;;;42638:15;42610:44;;;;;;:::i;:::-;;;;;;;;42094:566;;;;;;41983:677;;;:::o;40180:553::-;40303:15;40327:23;40359:12;40380:23;40412:12;40433:13;40456:42;40467:7;40476:21;40487:9;40476:10;:21::i;:::-;40456:10;:42::i;:::-;40294:204;;;;;;;;;;;;40523:28;40543:7;40523;:15;40531:6;40523:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40505:7;:15;40513:6;40505:15;;;;;;;;;;;;;;;:46;;;;40579:39;40602:15;40579:7;:18;40587:9;40579:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40558:7;:18;40566:9;40558:18;;;;;;;;;;;;;;;:60;;;;40625:16;40635:5;40625:9;:16::i;:::-;40648:23;40660:4;40666;40648:11;:23::i;:::-;40700:9;40683:44;;40692:6;40683:44;;;40711:15;40683:44;;;;;;:::i;:::-;;;;;;;;40287:446;;;;;;40180:553;;;:::o;35763:105::-;35813:15;;35803:7;:25;;;;35846:16;;35835:8;:27;;;;35763:105::o;6513:98::-;6571:7;6602:1;6598;:5;;;;:::i;:::-;6591:12;;6513:98;;;;:::o;45746:142::-;45807:4;45840:13;45827:26;;:9;:26;;;:55;;;;45857:14;:25;45872:9;45857:25;;;;;;;;;;;;;;;;;;;;;;;;;45827:55;45820:62;;45746:142;;;:::o;42666:301::-;42715:19;42737:10;:8;:10::i;:::-;42715:32;;42754:13;42770:22;42780:11;42770:5;:9;;:22;;;;:::i;:::-;42754:38;;42824:33;42851:5;42824:7;:22;42840:4;42824:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;42799:7;:22;42815:4;42799:22;;;;;;;;;;;;;;;:58;;;;42868:11;:26;42888:4;42868:26;;;;;;;;;;;;;;;;;;;;;;;;;42864:97;;;42928:33;42955:5;42928:7;:22;42944:4;42928:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;42903:7;:22;42919:4;42903:22;;;;;;;;;;;;;;;:58;;;;42864:97;42708:259;;42666:301;:::o;42973:137::-;43047:17;43059:4;43047:7;;:11;;:17;;;;:::i;:::-;43037:7;:27;;;;43084:20;43099:4;43084:10;;:14;;:20;;;;:::i;:::-;43071:10;:33;;;;42973:137;;:::o;51:821:1:-;180:5;205:114;221:97;311:6;221:97;:::i;:::-;205:114;:::i;:::-;196:123;;339:5;368:6;361:5;354:21;402:4;395:5;391:16;384:23;;428:6;478:3;470:4;462:6;458:17;453:3;449:27;446:36;443:143;;;497:79;;:::i;:::-;443:143;610:1;595:271;620:6;617:1;614:13;595:271;;;688:3;717:70;783:3;771:10;717:70;:::i;:::-;712:3;705:83;817:4;812:3;808:14;801:21;;851:4;846:3;842:14;835:21;;655:211;642:1;639;635:9;630:14;;595:271;;;599:14;186:686;;51:821;;;;;:::o;878:139::-;924:5;962:6;949:20;940:29;;978:33;1005:5;978:33;:::i;:::-;878:139;;;;:::o;1023:143::-;1080:5;1111:6;1105:13;1096:22;;1127:33;1154:5;1127:33;:::i;:::-;1023:143;;;;:::o;1172:155::-;1226:5;1264:6;1251:20;1242:29;;1280:41;1315:5;1280:41;:::i;:::-;1172:155;;;;:::o;1377:436::-;1481:5;1530:3;1523:4;1515:6;1511:17;1507:27;1497:122;;1538:79;;:::i;:::-;1497:122;1655:6;1642:20;1680:127;1803:3;1795:6;1788:4;1780:6;1776:17;1680:127;:::i;:::-;1671:136;;1487:326;1377:436;;;;:::o;1819:133::-;1862:5;1900:6;1887:20;1878:29;;1916:30;1940:5;1916:30;:::i;:::-;1819:133;;;;:::o;2000:584::-;2082:5;2126:4;2114:9;2109:3;2105:19;2101:30;2098:117;;;2134:79;;:::i;:::-;2098:117;2233:21;2249:4;2233:21;:::i;:::-;2224:30;;2313:1;2353:49;2398:3;2389:6;2378:9;2374:22;2353:49;:::i;:::-;2346:4;2339:5;2335:16;2328:75;2264:150;2475:2;2516:49;2561:3;2552:6;2541:9;2537:22;2516:49;:::i;:::-;2509:4;2502:5;2498:16;2491:75;2424:153;2000:584;;;;:::o;2590:139::-;2636:5;2674:6;2661:20;2652:29;;2690:33;2717:5;2690:33;:::i;:::-;2590:139;;;;:::o;2735:135::-;2779:5;2817:6;2804:20;2795:29;;2833:31;2858:5;2833:31;:::i;:::-;2735:135;;;;:::o;2876:329::-;2935:6;2984:2;2972:9;2963:7;2959:23;2955:32;2952:119;;;2990:79;;:::i;:::-;2952:119;3110:1;3135:53;3180:7;3171:6;3160:9;3156:22;3135:53;:::i;:::-;3125:63;;3081:117;2876:329;;;;:::o;3211:351::-;3281:6;3330:2;3318:9;3309:7;3305:23;3301:32;3298:119;;;3336:79;;:::i;:::-;3298:119;3456:1;3481:64;3537:7;3528:6;3517:9;3513:22;3481:64;:::i;:::-;3471:74;;3427:128;3211:351;;;;:::o;3568:345::-;3635:6;3684:2;3672:9;3663:7;3659:23;3655:32;3652:119;;;3690:79;;:::i;:::-;3652:119;3810:1;3835:61;3888:7;3879:6;3868:9;3864:22;3835:61;:::i;:::-;3825:71;;3781:125;3568:345;;;;:::o;3919:474::-;3987:6;3995;4044:2;4032:9;4023:7;4019:23;4015:32;4012:119;;;4050:79;;:::i;:::-;4012:119;4170:1;4195:53;4240:7;4231:6;4220:9;4216:22;4195:53;:::i;:::-;4185:63;;4141:117;4297:2;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4268:118;3919:474;;;;;:::o;4399:619::-;4476:6;4484;4492;4541:2;4529:9;4520:7;4516:23;4512:32;4509:119;;;4547:79;;:::i;:::-;4509:119;4667:1;4692:53;4737:7;4728:6;4717:9;4713:22;4692:53;:::i;:::-;4682:63;;4638:117;4794:2;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4765:118;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4399:619;;;;;:::o;5024:468::-;5089:6;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:50;5467:7;5458:6;5447:9;5443:22;5425:50;:::i;:::-;5415:60;;5370:115;5024:468;;;;;:::o;5498:474::-;5566:6;5574;5623:2;5611:9;5602:7;5598:23;5594:32;5591:119;;;5629:79;;:::i;:::-;5591:119;5749:1;5774:53;5819:7;5810:6;5799:9;5795:22;5774:53;:::i;:::-;5764:63;;5720:117;5876:2;5902:53;5947:7;5938:6;5927:9;5923:22;5902:53;:::i;:::-;5892:63;;5847:118;5498:474;;;;;:::o;5978:605::-;6095:6;6144:2;6132:9;6123:7;6119:23;6115:32;6112:119;;;6150:79;;:::i;:::-;6112:119;6298:1;6287:9;6283:17;6270:31;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:111;6558:7;6549:6;6538:9;6534:22;6455:111;:::i;:::-;6445:121;;6241:335;5978:605;;;;:::o;6589:323::-;6645:6;6694:2;6682:9;6673:7;6669:23;6665:32;6662:119;;;6700:79;;:::i;:::-;6662:119;6820:1;6845:50;6887:7;6878:6;6867:9;6863:22;6845:50;:::i;:::-;6835:60;;6791:114;6589:323;;;;:::o;6918:329::-;6977:6;7026:2;7014:9;7005:7;7001:23;6997:32;6994:119;;;7032:79;;:::i;:::-;6994:119;7152:1;7177:53;7222:7;7213:6;7202:9;7198:22;7177:53;:::i;:::-;7167:63;;7123:117;6918:329;;;;:::o;7253:468::-;7318:6;7326;7375:2;7363:9;7354:7;7350:23;7346:32;7343:119;;;7381:79;;:::i;:::-;7343:119;7501:1;7526:53;7571:7;7562:6;7551:9;7547:22;7526:53;:::i;:::-;7516:63;;7472:117;7628:2;7654:50;7696:7;7687:6;7676:9;7672:22;7654:50;:::i;:::-;7644:60;;7599:115;7253:468;;;;;:::o;7727:325::-;7784:6;7833:2;7821:9;7812:7;7808:23;7804:32;7801:119;;;7839:79;;:::i;:::-;7801:119;7959:1;7984:51;8027:7;8018:6;8007:9;8003:22;7984:51;:::i;:::-;7974:61;;7930:115;7727:325;;;;:::o;8058:179::-;8127:10;8148:46;8190:3;8182:6;8148:46;:::i;:::-;8226:4;8221:3;8217:14;8203:28;;8058:179;;;;:::o;8243:142::-;8346:32;8372:5;8346:32;:::i;:::-;8341:3;8334:45;8243:142;;:::o;8391:108::-;8468:24;8486:5;8468:24;:::i;:::-;8463:3;8456:37;8391:108;;:::o;8505:118::-;8592:24;8610:5;8592:24;:::i;:::-;8587:3;8580:37;8505:118;;:::o;8659:732::-;8778:3;8807:54;8855:5;8807:54;:::i;:::-;8877:86;8956:6;8951:3;8877:86;:::i;:::-;8870:93;;8987:56;9037:5;8987:56;:::i;:::-;9066:7;9097:1;9082:284;9107:6;9104:1;9101:13;9082:284;;;9183:6;9177:13;9210:63;9269:3;9254:13;9210:63;:::i;:::-;9203:70;;9296:60;9349:6;9296:60;:::i;:::-;9286:70;;9142:224;9129:1;9126;9122:9;9117:14;;9082:284;;;9086:14;9382:3;9375:10;;8783:608;;;8659:732;;;;:::o;9397:109::-;9478:21;9493:5;9478:21;:::i;:::-;9473:3;9466:34;9397:109;;:::o;9512:185::-;9626:64;9684:5;9626:64;:::i;:::-;9621:3;9614:77;9512:185;;:::o;9703:147::-;9798:45;9837:5;9798:45;:::i;:::-;9793:3;9786:58;9703:147;;:::o;9856:364::-;9944:3;9972:39;10005:5;9972:39;:::i;:::-;10027:71;10091:6;10086:3;10027:71;:::i;:::-;10020:78;;10107:52;10152:6;10147:3;10140:4;10133:5;10129:16;10107:52;:::i;:::-;10184:29;10206:6;10184:29;:::i;:::-;10179:3;10175:39;10168:46;;9948:272;9856:364;;;;:::o;10226:366::-;10368:3;10389:67;10453:2;10448:3;10389:67;:::i;:::-;10382:74;;10465:93;10554:3;10465:93;:::i;:::-;10583:2;10578:3;10574:12;10567:19;;10226:366;;;:::o;10598:::-;10740:3;10761:67;10825:2;10820:3;10761:67;:::i;:::-;10754:74;;10837:93;10926:3;10837:93;:::i;:::-;10955:2;10950:3;10946:12;10939:19;;10598:366;;;:::o;10970:::-;11112:3;11133:67;11197:2;11192:3;11133:67;:::i;:::-;11126:74;;11209:93;11298:3;11209:93;:::i;:::-;11327:2;11322:3;11318:12;11311:19;;10970:366;;;:::o;11342:::-;11484:3;11505:67;11569:2;11564:3;11505:67;:::i;:::-;11498:74;;11581:93;11670:3;11581:93;:::i;:::-;11699:2;11694:3;11690:12;11683:19;;11342:366;;;:::o;11714:::-;11856:3;11877:67;11941:2;11936:3;11877:67;:::i;:::-;11870:74;;11953:93;12042:3;11953:93;:::i;:::-;12071:2;12066:3;12062:12;12055:19;;11714:366;;;:::o;12086:::-;12228:3;12249:67;12313:2;12308:3;12249:67;:::i;:::-;12242:74;;12325:93;12414:3;12325:93;:::i;:::-;12443:2;12438:3;12434:12;12427:19;;12086:366;;;:::o;12458:::-;12600:3;12621:67;12685:2;12680:3;12621:67;:::i;:::-;12614:74;;12697:93;12786:3;12697:93;:::i;:::-;12815:2;12810:3;12806:12;12799:19;;12458:366;;;:::o;12830:::-;12972:3;12993:67;13057:2;13052:3;12993:67;:::i;:::-;12986:74;;13069:93;13158:3;13069:93;:::i;:::-;13187:2;13182:3;13178:12;13171:19;;12830:366;;;:::o;13202:::-;13344:3;13365:67;13429:2;13424:3;13365:67;:::i;:::-;13358:74;;13441:93;13530:3;13441:93;:::i;:::-;13559:2;13554:3;13550:12;13543:19;;13202:366;;;:::o;13574:::-;13716:3;13737:67;13801:2;13796:3;13737:67;:::i;:::-;13730:74;;13813:93;13902:3;13813:93;:::i;:::-;13931:2;13926:3;13922:12;13915:19;;13574:366;;;:::o;13946:::-;14088:3;14109:67;14173:2;14168:3;14109:67;:::i;:::-;14102:74;;14185:93;14274:3;14185:93;:::i;:::-;14303:2;14298:3;14294:12;14287:19;;13946:366;;;:::o;14318:::-;14460:3;14481:67;14545:2;14540:3;14481:67;:::i;:::-;14474:74;;14557:93;14646:3;14557:93;:::i;:::-;14675:2;14670:3;14666:12;14659:19;;14318:366;;;:::o;14690:::-;14832:3;14853:67;14917:2;14912:3;14853:67;:::i;:::-;14846:74;;14929:93;15018:3;14929:93;:::i;:::-;15047:2;15042:3;15038:12;15031:19;;14690:366;;;:::o;15062:::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:398::-;15593:3;15614:83;15695:1;15690:3;15614:83;:::i;:::-;15607:90;;15706:93;15795:3;15706:93;:::i;:::-;15824:1;15819:3;15815:11;15808:18;;15434:398;;;:::o;15838:366::-;15980:3;16001:67;16065:2;16060:3;16001:67;:::i;:::-;15994:74;;16077:93;16166:3;16077:93;:::i;:::-;16195:2;16190:3;16186:12;16179:19;;15838:366;;;:::o;16210:::-;16352:3;16373:67;16437:2;16432:3;16373:67;:::i;:::-;16366:74;;16449:93;16538:3;16449:93;:::i;:::-;16567:2;16562:3;16558:12;16551:19;;16210:366;;;:::o;16582:::-;16724:3;16745:67;16809:2;16804:3;16745:67;:::i;:::-;16738:74;;16821:93;16910:3;16821:93;:::i;:::-;16939:2;16934:3;16930:12;16923:19;;16582:366;;;:::o;16954:118::-;17041:24;17059:5;17041:24;:::i;:::-;17036:3;17029:37;16954:118;;:::o;17078:112::-;17161:22;17177:5;17161:22;:::i;:::-;17156:3;17149:35;17078:112;;:::o;17196:379::-;17380:3;17402:147;17545:3;17402:147;:::i;:::-;17395:154;;17566:3;17559:10;;17196:379;;;:::o;17581:222::-;17674:4;17712:2;17701:9;17697:18;17689:26;;17725:71;17793:1;17782:9;17778:17;17769:6;17725:71;:::i;:::-;17581:222;;;;:::o;17809:254::-;17918:4;17956:2;17945:9;17941:18;17933:26;;17969:87;18053:1;18042:9;18038:17;18029:6;17969:87;:::i;:::-;17809:254;;;;:::o;18069:210::-;18156:4;18194:2;18183:9;18179:18;18171:26;;18207:65;18269:1;18258:9;18254:17;18245:6;18207:65;:::i;:::-;18069:210;;;;:::o;18285:276::-;18405:4;18443:2;18432:9;18428:18;18420:26;;18456:98;18551:1;18540:9;18536:17;18527:6;18456:98;:::i;:::-;18285:276;;;;:::o;18567:313::-;18680:4;18718:2;18707:9;18703:18;18695:26;;18767:9;18761:4;18757:20;18753:1;18742:9;18738:17;18731:47;18795:78;18868:4;18859:6;18795:78;:::i;:::-;18787:86;;18567:313;;;;:::o;18886:419::-;19052:4;19090:2;19079:9;19075:18;19067:26;;19139:9;19133:4;19129:20;19125:1;19114:9;19110:17;19103:47;19167:131;19293:4;19167:131;:::i;:::-;19159:139;;18886:419;;;:::o;19311:::-;19477:4;19515:2;19504:9;19500:18;19492:26;;19564:9;19558:4;19554:20;19550:1;19539:9;19535:17;19528:47;19592:131;19718:4;19592:131;:::i;:::-;19584:139;;19311:419;;;:::o;19736:::-;19902:4;19940:2;19929:9;19925:18;19917:26;;19989:9;19983:4;19979:20;19975:1;19964:9;19960:17;19953:47;20017:131;20143:4;20017:131;:::i;:::-;20009:139;;19736:419;;;:::o;20161:::-;20327:4;20365:2;20354:9;20350:18;20342:26;;20414:9;20408:4;20404:20;20400:1;20389:9;20385:17;20378:47;20442:131;20568:4;20442:131;:::i;:::-;20434:139;;20161:419;;;:::o;20586:::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20839:9;20833:4;20829:20;20825:1;20814:9;20810:17;20803:47;20867:131;20993:4;20867:131;:::i;:::-;20859:139;;20586:419;;;:::o;21011:::-;21177:4;21215:2;21204:9;21200:18;21192:26;;21264:9;21258:4;21254:20;21250:1;21239:9;21235:17;21228:47;21292:131;21418:4;21292:131;:::i;:::-;21284:139;;21011:419;;;:::o;21436:::-;21602:4;21640:2;21629:9;21625:18;21617:26;;21689:9;21683:4;21679:20;21675:1;21664:9;21660:17;21653:47;21717:131;21843:4;21717:131;:::i;:::-;21709:139;;21436:419;;;:::o;21861:::-;22027:4;22065:2;22054:9;22050:18;22042:26;;22114:9;22108:4;22104:20;22100:1;22089:9;22085:17;22078:47;22142:131;22268:4;22142:131;:::i;:::-;22134:139;;21861:419;;;:::o;22286:::-;22452:4;22490:2;22479:9;22475:18;22467:26;;22539:9;22533:4;22529:20;22525:1;22514:9;22510:17;22503:47;22567:131;22693:4;22567:131;:::i;:::-;22559:139;;22286:419;;;:::o;22711:::-;22877:4;22915:2;22904:9;22900:18;22892:26;;22964:9;22958:4;22954:20;22950:1;22939:9;22935:17;22928:47;22992:131;23118:4;22992:131;:::i;:::-;22984:139;;22711:419;;;:::o;23136:::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23389:9;23383:4;23379:20;23375:1;23364:9;23360:17;23353:47;23417:131;23543:4;23417:131;:::i;:::-;23409:139;;23136:419;;;:::o;23561:::-;23727:4;23765:2;23754:9;23750:18;23742:26;;23814:9;23808:4;23804:20;23800:1;23789:9;23785:17;23778:47;23842:131;23968:4;23842:131;:::i;:::-;23834:139;;23561:419;;;:::o;23986:::-;24152:4;24190:2;24179:9;24175:18;24167:26;;24239:9;24233:4;24229:20;24225:1;24214:9;24210:17;24203:47;24267:131;24393:4;24267:131;:::i;:::-;24259:139;;23986:419;;;:::o;24411:::-;24577:4;24615:2;24604:9;24600:18;24592:26;;24664:9;24658:4;24654:20;24650:1;24639:9;24635:17;24628:47;24692:131;24818:4;24692:131;:::i;:::-;24684:139;;24411:419;;;:::o;24836:::-;25002:4;25040:2;25029:9;25025:18;25017:26;;25089:9;25083:4;25079:20;25075:1;25064:9;25060:17;25053:47;25117:131;25243:4;25117:131;:::i;:::-;25109:139;;24836:419;;;:::o;25261:::-;25427:4;25465:2;25454:9;25450:18;25442:26;;25514:9;25508:4;25504:20;25500:1;25489:9;25485:17;25478:47;25542:131;25668:4;25542:131;:::i;:::-;25534:139;;25261:419;;;:::o;25686:::-;25852:4;25890:2;25879:9;25875:18;25867:26;;25939:9;25933:4;25929:20;25925:1;25914:9;25910:17;25903:47;25967:131;26093:4;25967:131;:::i;:::-;25959:139;;25686:419;;;:::o;26111:222::-;26204:4;26242:2;26231:9;26227:18;26219:26;;26255:71;26323:1;26312:9;26308:17;26299:6;26255:71;:::i;:::-;26111:222;;;;:::o;26339:831::-;26602:4;26640:3;26629:9;26625:19;26617:27;;26654:71;26722:1;26711:9;26707:17;26698:6;26654:71;:::i;:::-;26735:80;26811:2;26800:9;26796:18;26787:6;26735:80;:::i;:::-;26862:9;26856:4;26852:20;26847:2;26836:9;26832:18;26825:48;26890:108;26993:4;26984:6;26890:108;:::i;:::-;26882:116;;27008:72;27076:2;27065:9;27061:18;27052:6;27008:72;:::i;:::-;27090:73;27158:3;27147:9;27143:19;27134:6;27090:73;:::i;:::-;26339:831;;;;;;;;:::o;27176:214::-;27265:4;27303:2;27292:9;27288:18;27280:26;;27316:67;27380:1;27369:9;27365:17;27356:6;27316:67;:::i;:::-;27176:214;;;;:::o;27396:129::-;27430:6;27457:20;;:::i;:::-;27447:30;;27486:33;27514:4;27506:6;27486:33;:::i;:::-;27396:129;;;:::o;27531:75::-;27564:6;27597:2;27591:9;27581:19;;27531:75;:::o;27612:344::-;27722:4;27812:18;27804:6;27801:30;27798:56;;;27834:18;;:::i;:::-;27798:56;27884:4;27876:6;27872:17;27864:25;;27944:4;27938;27934:15;27926:23;;27612:344;;;:::o;27962:132::-;28029:4;28052:3;28044:11;;28082:4;28077:3;28073:14;28065:22;;27962:132;;;:::o;28100:114::-;28167:6;28201:5;28195:12;28185:22;;28100:114;;;:::o;28220:99::-;28272:6;28306:5;28300:12;28290:22;;28220:99;;;:::o;28325:113::-;28395:4;28427;28422:3;28418:14;28410:22;;28325:113;;;:::o;28444:184::-;28543:11;28577:6;28572:3;28565:19;28617:4;28612:3;28608:14;28593:29;;28444:184;;;;:::o;28634:147::-;28735:11;28772:3;28757:18;;28634:147;;;;:::o;28787:169::-;28871:11;28905:6;28900:3;28893:19;28945:4;28940:3;28936:14;28921:29;;28787:169;;;;:::o;28962:305::-;29002:3;29021:20;29039:1;29021:20;:::i;:::-;29016:25;;29055:20;29073:1;29055:20;:::i;:::-;29050:25;;29209:1;29141:66;29137:74;29134:1;29131:81;29128:107;;;29215:18;;:::i;:::-;29128:107;29259:1;29256;29252:9;29245:16;;28962:305;;;;:::o;29273:185::-;29313:1;29330:20;29348:1;29330:20;:::i;:::-;29325:25;;29364:20;29382:1;29364:20;:::i;:::-;29359:25;;29403:1;29393:35;;29408:18;;:::i;:::-;29393:35;29450:1;29447;29443:9;29438:14;;29273:185;;;;:::o;29464:348::-;29504:7;29527:20;29545:1;29527:20;:::i;:::-;29522:25;;29561:20;29579:1;29561:20;:::i;:::-;29556:25;;29749:1;29681:66;29677:74;29674:1;29671:81;29666:1;29659:9;29652:17;29648:105;29645:131;;;29756:18;;:::i;:::-;29645:131;29804:1;29801;29797:9;29786:20;;29464:348;;;;:::o;29818:191::-;29858:4;29878:20;29896:1;29878:20;:::i;:::-;29873:25;;29912:20;29930:1;29912:20;:::i;:::-;29907:25;;29951:1;29948;29945:8;29942:34;;;29956:18;;:::i;:::-;29942:34;30001:1;29998;29994:9;29986:17;;29818:191;;;;:::o;30015:96::-;30052:7;30081:24;30099:5;30081:24;:::i;:::-;30070:35;;30015:96;;;:::o;30117:104::-;30162:7;30191:24;30209:5;30191:24;:::i;:::-;30180:35;;30117:104;;;:::o;30227:90::-;30261:7;30304:5;30297:13;30290:21;30279:32;;30227:90;;;:::o;30323:126::-;30360:7;30400:42;30393:5;30389:54;30378:65;;30323:126;;;:::o;30455:77::-;30492:7;30521:5;30510:16;;30455:77;;;:::o;30538:86::-;30573:7;30613:4;30606:5;30602:16;30591:27;;30538:86;;;:::o;30630:153::-;30707:9;30740:37;30771:5;30740:37;:::i;:::-;30727:50;;30630:153;;;:::o;30789:121::-;30847:9;30880:24;30898:5;30880:24;:::i;:::-;30867:37;;30789:121;;;:::o;30916:126::-;30966:9;30999:37;31030:5;30999:37;:::i;:::-;30986:50;;30916:126;;;:::o;31048:113::-;31098:9;31131:24;31149:5;31131:24;:::i;:::-;31118:37;;31048:113;;;:::o;31167:307::-;31235:1;31245:113;31259:6;31256:1;31253:13;31245:113;;;31344:1;31339:3;31335:11;31329:18;31325:1;31320:3;31316:11;31309:39;31281:2;31278:1;31274:10;31269:15;;31245:113;;;31376:6;31373:1;31370:13;31367:101;;;31456:1;31447:6;31442:3;31438:16;31431:27;31367:101;31216:258;31167:307;;;:::o;31480:320::-;31524:6;31561:1;31555:4;31551:12;31541:22;;31608:1;31602:4;31598:12;31629:18;31619:81;;31685:4;31677:6;31673:17;31663:27;;31619:81;31747:2;31739:6;31736:14;31716:18;31713:38;31710:84;;;31766:18;;:::i;:::-;31710:84;31531:269;31480:320;;;:::o;31806:281::-;31889:27;31911:4;31889:27;:::i;:::-;31881:6;31877:40;32019:6;32007:10;32004:22;31983:18;31971:10;31968:34;31965:62;31962:88;;;32030:18;;:::i;:::-;31962:88;32070:10;32066:2;32059:22;31849:238;31806:281;;:::o;32093:233::-;32132:3;32155:24;32173:5;32155:24;:::i;:::-;32146:33;;32201:66;32194:5;32191:77;32188:103;;;32271:18;;:::i;:::-;32188:103;32318:1;32311:5;32307:13;32300:20;;32093:233;;;:::o;32332:180::-;32380:77;32377:1;32370:88;32477:4;32474:1;32467:15;32501:4;32498:1;32491:15;32518:180;32566:77;32563:1;32556:88;32663:4;32660:1;32653:15;32687:4;32684:1;32677:15;32704:180;32752:77;32749:1;32742:88;32849:4;32846:1;32839:15;32873:4;32870:1;32863:15;32890:180;32938:77;32935:1;32928:88;33035:4;33032:1;33025:15;33059:4;33056:1;33049:15;33076:180;33124:77;33121:1;33114:88;33221:4;33218:1;33211:15;33245:4;33242:1;33235:15;33262:180;33310:77;33307:1;33300:88;33407:4;33404:1;33397:15;33431:4;33428:1;33421:15;33448:117;33557:1;33554;33547:12;33571:117;33680:1;33677;33670:12;33817:117;33926:1;33923;33916:12;33940:117;34049:1;34046;34039:12;34063:117;34172:1;34169;34162:12;34186:102;34227:6;34278:2;34274:7;34269:2;34262:5;34258:14;34254:28;34244:38;;34186:102;;;:::o;34294:175::-;34434:27;34430:1;34422:6;34418:14;34411:51;34294:175;:::o;34475:222::-;34615:34;34611:1;34603:6;34599:14;34592:58;34684:5;34679:2;34671:6;34667:15;34660:30;34475:222;:::o;34703:176::-;34843:28;34839:1;34831:6;34827:14;34820:52;34703:176;:::o;34885:229::-;35025:34;35021:1;35013:6;35009:14;35002:58;35094:12;35089:2;35081:6;35077:15;35070:37;34885:229;:::o;35120:225::-;35260:34;35256:1;35248:6;35244:14;35237:58;35329:8;35324:2;35316:6;35312:15;35305:33;35120:225;:::o;35351:221::-;35491:34;35487:1;35479:6;35475:14;35468:58;35560:4;35555:2;35547:6;35543:15;35536:29;35351:221;:::o;35578:177::-;35718:29;35714:1;35706:6;35702:14;35695:53;35578:177;:::o;35761:239::-;35901:34;35897:1;35889:6;35885:14;35878:58;35970:22;35965:2;35957:6;35953:15;35946:47;35761:239;:::o;36006:179::-;36146:31;36142:1;36134:6;36130:14;36123:55;36006:179;:::o;36191:181::-;36331:33;36327:1;36319:6;36315:14;36308:57;36191:181;:::o;36378:227::-;36518:34;36514:1;36506:6;36502:14;36495:58;36587:10;36582:2;36574:6;36570:15;36563:35;36378:227;:::o;36611:182::-;36751:34;36747:1;36739:6;36735:14;36728:58;36611:182;:::o;36799:228::-;36939:34;36935:1;36927:6;36923:14;36916:58;37008:11;37003:2;36995:6;36991:15;36984:36;36799:228;:::o;37033:224::-;37173:34;37169:1;37161:6;37157:14;37150:58;37242:7;37237:2;37229:6;37225:15;37218:32;37033:224;:::o;37263:114::-;;:::o;37383:223::-;37523:34;37519:1;37511:6;37507:14;37500:58;37592:6;37587:2;37579:6;37575:15;37568:31;37383:223;:::o;37612:221::-;37752:34;37748:1;37740:6;37736:14;37729:58;37821:4;37816:2;37808:6;37804:15;37797:29;37612:221;:::o;37839:231::-;37979:34;37975:1;37967:6;37963:14;37956:58;38048:14;38043:2;38035:6;38031:15;38024:39;37839:231;:::o;38076:122::-;38149:24;38167:5;38149:24;:::i;:::-;38142:5;38139:35;38129:63;;38188:1;38185;38178:12;38129:63;38076:122;:::o;38204:138::-;38285:32;38311:5;38285:32;:::i;:::-;38278:5;38275:43;38265:71;;38332:1;38329;38322:12;38265:71;38204:138;:::o;38348:116::-;38418:21;38433:5;38418:21;:::i;:::-;38411:5;38408:32;38398:60;;38454:1;38451;38444:12;38398:60;38348:116;:::o;38470:122::-;38543:24;38561:5;38543:24;:::i;:::-;38536:5;38533:35;38523:63;;38582:1;38579;38572:12;38523:63;38470:122;:::o;38598:118::-;38669:22;38685:5;38669:22;:::i;:::-;38662:5;38659:33;38649:61;;38706:1;38703;38696:12;38649:61;38598:118;:::o
Swarm Source
ipfs://502f488463c91a5b578cbf0e6b58882e68566fe9c4f4178dd3ba1d826321ca7d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.