Token migration announcement. Aggregated Finance token contract has migrated to a new address.
ERC-20
Overview
Max Total Supply
1,000,000,000,000 AGFI
Holders
1,600 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
95,299,124.463721669 AGFIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AggregatedFinance
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-29 */ // Aggregated Finance ($AGFI) // A Deflationary DeFi-as-a-Service (DaaS) Token, with 60% supply burned to 0x0dEaD // //Initial Supply: 1,000,000,000,000 $AGFI //60% of $AGFI burned to 0x0dEaD //10% of each buy goes to existing holders. //10% of each sell goes into various-chain algorithmic stablecoin investing to add to the treasury and buy back $AGFI tokens. // Twitter: https://twitter.com/AGFI_Official // Website: https://aggregated.finance/ // Telegram: https://t.me/aggregatedfinance // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) 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 generally not needed starting with Solidity 0.8, since 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; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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); } } } } // File: contracts/agfi.sol // Vari-Stable Capital: $AGFIs // Deflationary DeFi-as-a-Service (DaaS) Token, with 60% supply burned to 0x0dEaD // You buy on Ethereum, we execute algorithmic stablecoin strategies on various chains and return the profits to $AGFI holders. //Initial Supply: 1,000,000,000,000 $AGFI //60% of $AGFI burned to 0x0dEaD //10% of each buy goes to existing holders. //10% of each sell goes into various-chain algorithmic stablecoin investing to add to the treasury and buy back $AGFI tokens. // Twitter: https://twitter.com/AGFI_Official // Website: https://aggregated.finance/ // Telegram: https://t.me/aggregatedfinance 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; } 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; } 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; } pragma solidity ^0.8.0; //SPDX-License-Identifier: MIT contract AggregatedFinance 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 = 1000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'AggregatedFinance'; string private _symbol = 'AGFI'; uint8 private _decimals = 9; uint256 private _taxFee = 10; uint256 private _teamFee = 10; uint256 private _previousTaxFee = _taxFee; uint256 private _previousTeamFee = _teamFee; address payable public _AGFIWalletAddress; address payable public _marketingWalletAddress; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwap = false; bool public swapEnabled = true; uint256 private _maxTxAmount = 100000000000000e9; // We will set a minimum amount of tokens to be swaped => 5M uint256 private _numOfTokensToExchangeForTeam = 5 * 10**3 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor (address payable AGFIWalletAddress, address payable marketingWalletAddress) { _AGFIWalletAddress = AGFIWalletAddress; _marketingWalletAddress = marketingWalletAddress; _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); _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); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); 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 && sender != uniswapV2Pair) { // 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 = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //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 { _AGFIWalletAddress.transfer(amount.div(2)); _marketingWalletAddress.transfer(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]) { _transferStandard(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); _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); _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); _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); _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) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 teamFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tTeam = tAmount.mul(teamFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam); return (tTransferAmount, tFee, tTeam); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); 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 _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner() { require(taxFee >= 1 && taxFee <= 25, 'taxFee should be in 1 - 25'); _taxFee = taxFee; } function _setTeamFee(uint256 teamFee) external onlyOwner() { require(teamFee >= 1 && teamFee <= 25, 'teamFee should be in 1 - 25'); _teamFee = teamFee; } function _setAGFIWallet(address payable AGFIWalletAddress) external onlyOwner() { _AGFIWalletAddress = AGFIWalletAddress; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= 100000000000000e9 , 'maxTxAmount should be greater than 100000000000000e9'); _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"AGFIWalletAddress","type":"address"},{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"_AGFIWalletAddress","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":"AGFIWalletAddress","type":"address"}],"name":"_setAGFIWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","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":"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":[],"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":[],"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
60c0604052683635c9adc5dea0000060075560075460001962000023919062000952565b6000196200003291906200088f565b6008556040518060400160405280601181526020017f4167677265676174656446696e616e6365000000000000000000000000000000815250600a908051906020019062000082929190620006cc565b506040518060400160405280600481526020017f4147464900000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000d0929190620006cc565b506009600c60006101000a81548160ff021916908360ff160217905550600a600d55600a600e55600d54600f55600e546010556000601260146101000a81548160ff0219169083151502179055506001601260156101000a81548160ff02191690831515021790555069152d02c7e14af680000060135565048c273950006014553480156200015e57600080fd5b5060405162005983380380620059838339818101604052810190620001849190620007dc565b620001a462000198620005d760201b60201c565b620005df60201b60201c565b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600160006200023d620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003169190620007aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037957600080fd5b505afa1580156200038e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b49190620007aa565b6040518363ffffffff1660e01b8152600401620003d392919062000845565b602060405180830381600087803b158015620003ee57600080fd5b505af115801562000403573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004299190620007aa565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004ac620006a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000565620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005c6919062000872565b60405180910390a350505062000a50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006da906200091c565b90600052602060002090601f016020900481019282620006fe57600085556200074a565b82601f106200071957805160ff19168380011785556200074a565b828001600101855582156200074a579182015b82811115620007495782518255916020019190600101906200072c565b5b5090506200075991906200075d565b5090565b5b80821115620007785760008160009055506001016200075e565b5090565b6000815190506200078d8162000a1c565b92915050565b600081519050620007a48162000a36565b92915050565b600060208284031215620007c357620007c262000a17565b5b6000620007d3848285016200077c565b91505092915050565b60008060408385031215620007f657620007f562000a17565b5b6000620008068582860162000793565b9250506020620008198582860162000793565b9150509250929050565b6200082e81620008ca565b82525050565b6200083f8162000912565b82525050565b60006040820190506200085c600083018562000823565b6200086b602083018462000823565b9392505050565b600060208201905062000889600083018462000834565b92915050565b60006200089c8262000912565b9150620008a98362000912565b925082821015620008bf57620008be6200098a565b5b828203905092915050565b6000620008d782620008f2565b9050919050565b6000620008eb82620008f2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200093557607f821691505b602082108114156200094c576200094b620009e8565b5b50919050565b60006200095f8262000912565b91506200096c8362000912565b9250826200097f576200097e620009b9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b62000a2781620008ca565b811462000a3357600080fd5b50565b62000a4181620008de565b811462000a4d57600080fd5b50565b60805160601c60a05160601c614eeb62000a9860003960008181610f6b01526123a701526000818161095d015281816126c6015281816127b601526127dd0152614eeb6000f3fe6080604052600436106102135760003560e01c8063694acd9111610118578063af9549e0116100a0578063f2cc0c181161006f578063f2cc0c18146107e4578063f2fde38b1461080d578063f429389014610836578063f815a8421461084d578063f84354f1146108785761021a565b8063af9549e014610718578063cba0e99614610741578063dd62ed3e1461077e578063e01af92c146107bb5761021a565b8063715018a6116100e7578063715018a6146106315780638da5cb5b1461064857806395d89b4114610673578063a457c2d71461069e578063a9059cbb146106db5761021a565b8063694acd91146105755780636ddd17131461059e5780636e9885b8146105c957806370a08231146105f45761021a565b8063313ce5671161019b5780634549b0391161016a5780634549b0391461049057806349bd5a5e146104cd57806351bc3c85146104f85780635342acb41461050f5780635880b8731461054c5761021a565b8063313ce567146103d457806339509351146103ff5780633bd5d1731461043c5780634144d9e4146104655761021a565b806318160ddd116101e257806318160ddd146102dd5780631bbae6e01461030857806323b872dd14610331578063286671621461036e5780632d838119146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806313114a9d146102875780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108a1565b6040516102419190614331565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190613e94565b610933565b60405161027e91906142fb565b60405180910390f35b34801561029357600080fd5b5061029c610951565b6040516102a99190614553565b60405180910390f35b3480156102be57600080fd5b506102c761095b565b6040516102d49190614316565b60405180910390f35b3480156102e957600080fd5b506102f261097f565b6040516102ff9190614553565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f01565b610989565b005b34801561033d57600080fd5b5061035860048036038101906103539190613e01565b610a5c565b60405161036591906142fb565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613f01565b610b35565b005b3480156103a357600080fd5b506103be60048036038101906103b99190613f01565b610c0c565b6040516103cb9190614553565b60405180910390f35b3480156103e057600080fd5b506103e9610c7a565b6040516103f691906145c8565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190613e94565b610c91565b60405161043391906142fb565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190613f01565b610d44565b005b34801561047157600080fd5b5061047a610ebf565b60405161048791906142e0565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613f2e565b610ee5565b6040516104c49190614553565b60405180910390f35b3480156104d957600080fd5b506104e2610f69565b6040516104ef91906142c5565b60405180910390f35b34801561050457600080fd5b5061050d610f8d565b005b34801561051b57600080fd5b5061053660048036038101906105319190613d3a565b611022565b60405161054391906142fb565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613f01565b611078565b005b34801561058157600080fd5b5061059c60048036038101906105979190613d94565b61114f565b005b3480156105aa57600080fd5b506105b361120f565b6040516105c091906142fb565b60405180910390f35b3480156105d557600080fd5b506105de611222565b6040516105eb91906142e0565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613d3a565b611248565b6040516106289190614553565b60405180910390f35b34801561063d57600080fd5b50610646611333565b005b34801561065457600080fd5b5061065d6113bb565b60405161066a91906142c5565b60405180910390f35b34801561067f57600080fd5b506106886113e4565b6040516106959190614331565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190613e94565b611476565b6040516106d291906142fb565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190613e94565b611543565b60405161070f91906142fb565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613e54565b611561565b005b34801561074d57600080fd5b5061076860048036038101906107639190613d3a565b611638565b60405161077591906142fb565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613dc1565b61168e565b6040516107b29190614553565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190613ed4565b611715565b005b3480156107f057600080fd5b5061080b60048036038101906108069190613d3a565b6117ae565b005b34801561081957600080fd5b50610834600480360381019061082f9190613d3a565b611acc565b005b34801561084257600080fd5b5061084b611bc4565b005b34801561085957600080fd5b50610862611c51565b60405161086f9190614553565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190613d3a565b611c59565b005b6060600a80546108b09061482f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc9061482f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b6000610947610940611f8f565b8484611f97565b6001905092915050565b6000600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b610991611f8f565b73ffffffffffffffffffffffffffffffffffffffff166109af6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc90614473565b60405180910390fd5b69152d02c7e14af6800000811015610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990614413565b60405180910390fd5b8060138190555050565b6000610a69848484612162565b610b2a84610a75611f8f565b610b2585604051806060016040528060288152602001614e6960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610adb611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e39092919063ffffffff16565b611f97565b600190509392505050565b610b3d611f8f565b73ffffffffffffffffffffffffffffffffffffffff16610b5b6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890614473565b60405180910390fd5b60018110158015610bc3575060198111155b610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf9906143d3565b60405180910390fd5b80600e8190555050565b6000600854821115610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90614373565b60405180910390fd5b6000610c5d612538565b9050610c72818461256390919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610d3a610c9e611f8f565b84610d358560036000610caf611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b611f97565b6001905092915050565b6000610d4e611f8f565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490614533565b60405180910390fd5b6000610de88361258f565b50505050509050610e4181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e99816008546125f690919063ffffffff16565b600881905550610eb48360095461257990919063ffffffff16565b600981905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754831115610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614433565b60405180910390fd5b81610f4c576000610f3c8461258f565b5050505050905080915050610f63565b6000610f578461258f565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f95611f8f565b73ffffffffffffffffffffffffffffffffffffffff16610fb36113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090614473565b60405180910390fd5b600061101430611248565b905061101f8161260c565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611080611f8f565b73ffffffffffffffffffffffffffffffffffffffff1661109e6113bb565b73ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614473565b60405180910390fd5b60018110158015611106575060198111155b611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906144f3565b60405180910390fd5b80600d8190555050565b611157611f8f565b73ffffffffffffffffffffffffffffffffffffffff166111756113bb565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290614473565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260159054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112e357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061132e565b61132b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0c565b90505b919050565b61133b611f8f565b73ffffffffffffffffffffffffffffffffffffffff166113596113bb565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614473565b60405180910390fd5b6113b9600061288e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546113f39061482f565b80601f016020809104026020016040519081016040528092919081815260200182805461141f9061482f565b801561146c5780601f106114415761010080835404028352916020019161146c565b820191906000526020600020905b81548152906001019060200180831161144f57829003601f168201915b5050505050905090565b6000611539611483611f8f565b8461153485604051806060016040528060258152602001614e9160259139600360006114ad611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e39092919063ffffffff16565b611f97565b6001905092915050565b6000611557611550611f8f565b8484612162565b6001905092915050565b611569611f8f565b73ffffffffffffffffffffffffffffffffffffffff166115876113bb565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614473565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61171d611f8f565b73ffffffffffffffffffffffffffffffffffffffff1661173b6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614473565b60405180910390fd5b80601260156101000a81548160ff02191690831515021790555050565b6117b6611f8f565b73ffffffffffffffffffffffffffffffffffffffff166117d46113bb565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614473565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614513565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906143f3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a0e576119ca600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ad4611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611af26113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90614473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614393565b60405180910390fd5b611bc18161288e565b50565b611bcc611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611bea6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614473565b60405180910390fd5b6000479050611c4e81612952565b50565b600047905090565b611c61611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611c7f6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90614473565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906143f3565b60405180910390fd5b60005b600680549050811015611f8b578173ffffffffffffffffffffffffffffffffffffffff1660068281548110611d9c57611d9b614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f785760066001600680549050611df79190614719565b81548110611e0857611e07614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611e4757611e46614966565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611f3e57611f3d614937565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f8b565b8080611f8390614861565b915050611d64565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906143b3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121559190614553565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223990614353565b60405180910390fd5b60008111612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90614493565b60405180910390fd5b61228d6113bb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122fb57506122cb6113bb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561234657601354811115612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614453565b60405180910390fd5b5b600061235130611248565b905060135481106123625760135490505b60006014548210159050601260149054906101000a900460ff161580156123955750601260159054906101000a900460ff165b801561239e5750805b80156123f657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561241e576124048261260c565b6000479050600081111561241c5761241b47612952565b5b505b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124c55750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124cf57600090505b6124db86868684612a4d565b505050505050565b600083831115829061252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125229190614331565b60405180910390fd5b5082840390509392505050565b6000806000612545612d5e565b9150915061255c818361256390919063ffffffff16565b9250505090565b60008183612571919061468e565b905092915050565b600081836125879190614638565b905092915050565b60008060008060008060008060006125ac8a600d54600e54613011565b92509250925060006125bc612538565b905060008060006125ce8e87866130a7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836126049190614719565b905092915050565b6001601260146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561264457612643614995565b5b6040519080825280602002602001820160405280156126725781602001602082028036833780820191505090505b509050308160008151811061268a57612689614966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561272a57600080fd5b505afa15801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613d67565b8160018151811061277657612775614966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127db307f000000000000000000000000000000000000000000000000000000000000000084611f97565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161283d95949392919061456e565b600060405180830381600087803b15801561285757600080fd5b505af115801561286b573d6000803e3d6000fd5b50505050506000601260146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6129a260028461256390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156129cd573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a1e60028461256390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612a49573d6000803e3d6000fd5b5050565b80612a5b57612a5a613105565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1357612b0e848484613148565b612d4a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bb65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bcb57612bc68484846133a8565b612d49565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8457612c7f848484613608565b612d48565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d265750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3b57612d368484846137d3565b612d47565b612d46848484613608565b5b5b5b5b80612d5857612d57613ac8565b5b50505050565b600080600060085490506000600754905060005b600680549050811015612fd457826001600060068481548110612d9857612d97614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e865750816002600060068481548110612e1e57612e1d614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e9d576008546007549450945050505061300d565b612f2d6001600060068481548110612eb857612eb7614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846125f690919063ffffffff16565b9250612fbf6002600060068481548110612f4a57612f49614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836125f690919063ffffffff16565b91508080612fcc90614861565b915050612d72565b50612fec60075460085461256390919063ffffffff16565b8210156130045760085460075493509350505061300d565b81819350935050505b9091565b60008060008061303d606461302f888a613adc90919063ffffffff16565b61256390919063ffffffff16565b905060006130676064613059888b613adc90919063ffffffff16565b61256390919063ffffffff16565b9050600061309082613082858c6125f690919063ffffffff16565b6125f690919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806130c08588613adc90919063ffffffff16565b905060006130d78688613adc90919063ffffffff16565b905060006130ee82846125f690919063ffffffff16565b905082818395509550955050505093509350939050565b6000600d5414801561311957506000600e54145b1561312357613146565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061315a8761258f565b9550955095509550955095506131b887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061324d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332e81613af2565b6133388483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133959190614553565b60405180910390a3505050505050505050565b6000806000806000806133ba8761258f565b95509550955095509550955061341886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ad83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061354285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061358e81613af2565b6135988483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135f59190614553565b60405180910390a3505050505050505050565b60008060008060008061361a8761258f565b95509550955095509550955061367886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375981613af2565b6137638483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137c09190614553565b60405180910390a3505050505050505050565b6000806000806000806137e58761258f565b95509550955095509550955061384387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a0285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4e81613af2565b613a588483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ab59190614553565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b60008183613aea91906146bf565b905092915050565b6000613afc612538565b90506000613b138284613adc90919063ffffffff16565b9050613b6781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c9257613c4e83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613cac826008546125f690919063ffffffff16565b600881905550613cc78160095461257990919063ffffffff16565b6009819055505050565b600081359050613ce081614e0c565b92915050565b600081519050613cf581614e0c565b92915050565b600081359050613d0a81614e23565b92915050565b600081359050613d1f81614e3a565b92915050565b600081359050613d3481614e51565b92915050565b600060208284031215613d5057613d4f6149c4565b5b6000613d5e84828501613cd1565b91505092915050565b600060208284031215613d7d57613d7c6149c4565b5b6000613d8b84828501613ce6565b91505092915050565b600060208284031215613daa57613da96149c4565b5b6000613db884828501613cfb565b91505092915050565b60008060408385031215613dd857613dd76149c4565b5b6000613de685828601613cd1565b9250506020613df785828601613cd1565b9150509250929050565b600080600060608486031215613e1a57613e196149c4565b5b6000613e2886828701613cd1565b9350506020613e3986828701613cd1565b9250506040613e4a86828701613d25565b9150509250925092565b60008060408385031215613e6b57613e6a6149c4565b5b6000613e7985828601613cd1565b9250506020613e8a85828601613d10565b9150509250929050565b60008060408385031215613eab57613eaa6149c4565b5b6000613eb985828601613cd1565b9250506020613eca85828601613d25565b9150509250929050565b600060208284031215613eea57613ee96149c4565b5b6000613ef884828501613d10565b91505092915050565b600060208284031215613f1757613f166149c4565b5b6000613f2584828501613d25565b91505092915050565b60008060408385031215613f4557613f446149c4565b5b6000613f5385828601613d25565b9250506020613f6485828601613d10565b9150509250929050565b6000613f7a8383613f95565b60208301905092915050565b613f8f8161475f565b82525050565b613f9e8161474d565b82525050565b613fad8161474d565b82525050565b6000613fbe826145f3565b613fc88185614616565b9350613fd3836145e3565b8060005b83811015614004578151613feb8882613f6e565b9750613ff683614609565b925050600181019050613fd7565b5085935050505092915050565b61401a81614771565b82525050565b614029816147b4565b82525050565b614038816147c6565b82525050565b6000614049826145fe565b6140538185614627565b93506140638185602086016147fc565b61406c816149c9565b840191505092915050565b6000614084602383614627565b915061408f826149da565b604082019050919050565b60006140a7602a83614627565b91506140b282614a29565b604082019050919050565b60006140ca602683614627565b91506140d582614a78565b604082019050919050565b60006140ed602283614627565b91506140f882614ac7565b604082019050919050565b6000614110601b83614627565b915061411b82614b16565b602082019050919050565b6000614133601b83614627565b915061413e82614b3f565b602082019050919050565b6000614156603483614627565b915061416182614b68565b604082019050919050565b6000614179601f83614627565b915061418482614bb7565b602082019050919050565b600061419c602883614627565b91506141a782614be0565b604082019050919050565b60006141bf602083614627565b91506141ca82614c2f565b602082019050919050565b60006141e2602983614627565b91506141ed82614c58565b604082019050919050565b6000614205602583614627565b915061421082614ca7565b604082019050919050565b6000614228602483614627565b915061423382614cf6565b604082019050919050565b600061424b601a83614627565b915061425682614d45565b602082019050919050565b600061426e602283614627565b915061427982614d6e565b604082019050919050565b6000614291602c83614627565b915061429c82614dbd565b604082019050919050565b6142b08161479d565b82525050565b6142bf816147a7565b82525050565b60006020820190506142da6000830184613fa4565b92915050565b60006020820190506142f56000830184613f86565b92915050565b60006020820190506143106000830184614011565b92915050565b600060208201905061432b6000830184614020565b92915050565b6000602082019050818103600083015261434b818461403e565b905092915050565b6000602082019050818103600083015261436c81614077565b9050919050565b6000602082019050818103600083015261438c8161409a565b9050919050565b600060208201905081810360008301526143ac816140bd565b9050919050565b600060208201905081810360008301526143cc816140e0565b9050919050565b600060208201905081810360008301526143ec81614103565b9050919050565b6000602082019050818103600083015261440c81614126565b9050919050565b6000602082019050818103600083015261442c81614149565b9050919050565b6000602082019050818103600083015261444c8161416c565b9050919050565b6000602082019050818103600083015261446c8161418f565b9050919050565b6000602082019050818103600083015261448c816141b2565b9050919050565b600060208201905081810360008301526144ac816141d5565b9050919050565b600060208201905081810360008301526144cc816141f8565b9050919050565b600060208201905081810360008301526144ec8161421b565b9050919050565b6000602082019050818103600083015261450c8161423e565b9050919050565b6000602082019050818103600083015261452c81614261565b9050919050565b6000602082019050818103600083015261454c81614284565b9050919050565b600060208201905061456860008301846142a7565b92915050565b600060a08201905061458360008301886142a7565b614590602083018761402f565b81810360408301526145a28186613fb3565b90506145b16060830185613fa4565b6145be60808301846142a7565b9695505050505050565b60006020820190506145dd60008301846142b6565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006146438261479d565b915061464e8361479d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614683576146826148aa565b5b828201905092915050565b60006146998261479d565b91506146a48361479d565b9250826146b4576146b36148d9565b5b828204905092915050565b60006146ca8261479d565b91506146d58361479d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561470e5761470d6148aa565b5b828202905092915050565b60006147248261479d565b915061472f8361479d565b925082821015614742576147416148aa565b5b828203905092915050565b60006147588261477d565b9050919050565b600061476a8261477d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147bf826147d8565b9050919050565b60006147d18261479d565b9050919050565b60006147e3826147ea565b9050919050565b60006147f58261477d565b9050919050565b60005b8381101561481a5780820151818401526020810190506147ff565b83811115614829576000848401525b50505050565b6000600282049050600182168061484757607f821691505b6020821081141561485b5761485a614908565b5b50919050565b600061486c8261479d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561489f5761489e6148aa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2031202d2032350000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f7461784665652073686f756c6420626520696e2031202d203235000000000000600082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614e158161474d565b8114614e2057600080fd5b50565b614e2c8161475f565b8114614e3757600080fd5b50565b614e4381614771565b8114614e4e57600080fd5b50565b614e5a8161479d565b8114614e6557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e12e97209c37e19317ba19ca3dd2f99f7b0a7f09b93d2b85d45939533c7fadb664736f6c63430008070033000000000000000000000000feb8f237873e846d9ddbf8a9477519ae3219984c000000000000000000000000ddcaaf2669f3be5af80068fe71575f1a8c6cec3a
Deployed Bytecode
0x6080604052600436106102135760003560e01c8063694acd9111610118578063af9549e0116100a0578063f2cc0c181161006f578063f2cc0c18146107e4578063f2fde38b1461080d578063f429389014610836578063f815a8421461084d578063f84354f1146108785761021a565b8063af9549e014610718578063cba0e99614610741578063dd62ed3e1461077e578063e01af92c146107bb5761021a565b8063715018a6116100e7578063715018a6146106315780638da5cb5b1461064857806395d89b4114610673578063a457c2d71461069e578063a9059cbb146106db5761021a565b8063694acd91146105755780636ddd17131461059e5780636e9885b8146105c957806370a08231146105f45761021a565b8063313ce5671161019b5780634549b0391161016a5780634549b0391461049057806349bd5a5e146104cd57806351bc3c85146104f85780635342acb41461050f5780635880b8731461054c5761021a565b8063313ce567146103d457806339509351146103ff5780633bd5d1731461043c5780634144d9e4146104655761021a565b806318160ddd116101e257806318160ddd146102dd5780631bbae6e01461030857806323b872dd14610331578063286671621461036e5780632d838119146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806313114a9d146102875780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108a1565b6040516102419190614331565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190613e94565b610933565b60405161027e91906142fb565b60405180910390f35b34801561029357600080fd5b5061029c610951565b6040516102a99190614553565b60405180910390f35b3480156102be57600080fd5b506102c761095b565b6040516102d49190614316565b60405180910390f35b3480156102e957600080fd5b506102f261097f565b6040516102ff9190614553565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613f01565b610989565b005b34801561033d57600080fd5b5061035860048036038101906103539190613e01565b610a5c565b60405161036591906142fb565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613f01565b610b35565b005b3480156103a357600080fd5b506103be60048036038101906103b99190613f01565b610c0c565b6040516103cb9190614553565b60405180910390f35b3480156103e057600080fd5b506103e9610c7a565b6040516103f691906145c8565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190613e94565b610c91565b60405161043391906142fb565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190613f01565b610d44565b005b34801561047157600080fd5b5061047a610ebf565b60405161048791906142e0565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613f2e565b610ee5565b6040516104c49190614553565b60405180910390f35b3480156104d957600080fd5b506104e2610f69565b6040516104ef91906142c5565b60405180910390f35b34801561050457600080fd5b5061050d610f8d565b005b34801561051b57600080fd5b5061053660048036038101906105319190613d3a565b611022565b60405161054391906142fb565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613f01565b611078565b005b34801561058157600080fd5b5061059c60048036038101906105979190613d94565b61114f565b005b3480156105aa57600080fd5b506105b361120f565b6040516105c091906142fb565b60405180910390f35b3480156105d557600080fd5b506105de611222565b6040516105eb91906142e0565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613d3a565b611248565b6040516106289190614553565b60405180910390f35b34801561063d57600080fd5b50610646611333565b005b34801561065457600080fd5b5061065d6113bb565b60405161066a91906142c5565b60405180910390f35b34801561067f57600080fd5b506106886113e4565b6040516106959190614331565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190613e94565b611476565b6040516106d291906142fb565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd9190613e94565b611543565b60405161070f91906142fb565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613e54565b611561565b005b34801561074d57600080fd5b5061076860048036038101906107639190613d3a565b611638565b60405161077591906142fb565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613dc1565b61168e565b6040516107b29190614553565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190613ed4565b611715565b005b3480156107f057600080fd5b5061080b60048036038101906108069190613d3a565b6117ae565b005b34801561081957600080fd5b50610834600480360381019061082f9190613d3a565b611acc565b005b34801561084257600080fd5b5061084b611bc4565b005b34801561085957600080fd5b50610862611c51565b60405161086f9190614553565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190613d3a565b611c59565b005b6060600a80546108b09061482f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc9061482f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b6000610947610940611f8f565b8484611f97565b6001905092915050565b6000600954905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600754905090565b610991611f8f565b73ffffffffffffffffffffffffffffffffffffffff166109af6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc90614473565b60405180910390fd5b69152d02c7e14af6800000811015610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990614413565b60405180910390fd5b8060138190555050565b6000610a69848484612162565b610b2a84610a75611f8f565b610b2585604051806060016040528060288152602001614e6960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610adb611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e39092919063ffffffff16565b611f97565b600190509392505050565b610b3d611f8f565b73ffffffffffffffffffffffffffffffffffffffff16610b5b6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890614473565b60405180910390fd5b60018110158015610bc3575060198111155b610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf9906143d3565b60405180910390fd5b80600e8190555050565b6000600854821115610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90614373565b60405180910390fd5b6000610c5d612538565b9050610c72818461256390919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610d3a610c9e611f8f565b84610d358560036000610caf611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b611f97565b6001905092915050565b6000610d4e611f8f565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490614533565b60405180910390fd5b6000610de88361258f565b50505050509050610e4181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e99816008546125f690919063ffffffff16565b600881905550610eb48360095461257990919063ffffffff16565b600981905550505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754831115610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390614433565b60405180910390fd5b81610f4c576000610f3c8461258f565b5050505050905080915050610f63565b6000610f578461258f565b50505050915050809150505b92915050565b7f000000000000000000000000c366336dc7cf8131d4e538bc0205e603014743f081565b610f95611f8f565b73ffffffffffffffffffffffffffffffffffffffff16610fb36113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090614473565b60405180910390fd5b600061101430611248565b905061101f8161260c565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611080611f8f565b73ffffffffffffffffffffffffffffffffffffffff1661109e6113bb565b73ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614473565b60405180910390fd5b60018110158015611106575060198111155b611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906144f3565b60405180910390fd5b80600d8190555050565b611157611f8f565b73ffffffffffffffffffffffffffffffffffffffff166111756113bb565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290614473565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260159054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112e357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061132e565b61132b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0c565b90505b919050565b61133b611f8f565b73ffffffffffffffffffffffffffffffffffffffff166113596113bb565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614473565b60405180910390fd5b6113b9600061288e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546113f39061482f565b80601f016020809104026020016040519081016040528092919081815260200182805461141f9061482f565b801561146c5780601f106114415761010080835404028352916020019161146c565b820191906000526020600020905b81548152906001019060200180831161144f57829003601f168201915b5050505050905090565b6000611539611483611f8f565b8461153485604051806060016040528060258152602001614e9160259139600360006114ad611f8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e39092919063ffffffff16565b611f97565b6001905092915050565b6000611557611550611f8f565b8484612162565b6001905092915050565b611569611f8f565b73ffffffffffffffffffffffffffffffffffffffff166115876113bb565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614473565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61171d611f8f565b73ffffffffffffffffffffffffffffffffffffffff1661173b6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614473565b60405180910390fd5b80601260156101000a81548160ff02191690831515021790555050565b6117b6611f8f565b73ffffffffffffffffffffffffffffffffffffffff166117d46113bb565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614473565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614513565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906143f3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a0e576119ca600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c0c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ad4611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611af26113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90614473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614393565b60405180910390fd5b611bc18161288e565b50565b611bcc611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611bea6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614473565b60405180910390fd5b6000479050611c4e81612952565b50565b600047905090565b611c61611f8f565b73ffffffffffffffffffffffffffffffffffffffff16611c7f6113bb565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90614473565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906143f3565b60405180910390fd5b60005b600680549050811015611f8b578173ffffffffffffffffffffffffffffffffffffffff1660068281548110611d9c57611d9b614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f785760066001600680549050611df79190614719565b81548110611e0857611e07614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110611e4757611e46614966565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480611f3e57611f3d614937565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f8b565b8080611f8390614861565b915050611d64565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe906144d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906143b3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121559190614553565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223990614353565b60405180910390fd5b60008111612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90614493565b60405180910390fd5b61228d6113bb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122fb57506122cb6113bb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561234657601354811115612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614453565b60405180910390fd5b5b600061235130611248565b905060135481106123625760135490505b60006014548210159050601260149054906101000a900460ff161580156123955750601260159054906101000a900460ff165b801561239e5750805b80156123f657507f000000000000000000000000c366336dc7cf8131d4e538bc0205e603014743f073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561241e576124048261260c565b6000479050600081111561241c5761241b47612952565b5b505b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124c55750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124cf57600090505b6124db86868684612a4d565b505050505050565b600083831115829061252b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125229190614331565b60405180910390fd5b5082840390509392505050565b6000806000612545612d5e565b9150915061255c818361256390919063ffffffff16565b9250505090565b60008183612571919061468e565b905092915050565b600081836125879190614638565b905092915050565b60008060008060008060008060006125ac8a600d54600e54613011565b92509250925060006125bc612538565b905060008060006125ce8e87866130a7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836126049190614719565b905092915050565b6001601260146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561264457612643614995565b5b6040519080825280602002602001820160405280156126725781602001602082028036833780820191505090505b509050308160008151811061268a57612689614966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561272a57600080fd5b505afa15801561273e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127629190613d67565b8160018151811061277657612775614966565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127db307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f97565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161283d95949392919061456e565b600060405180830381600087803b15801561285757600080fd5b505af115801561286b573d6000803e3d6000fd5b50505050506000601260146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6129a260028461256390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156129cd573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc612a1e60028461256390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612a49573d6000803e3d6000fd5b5050565b80612a5b57612a5a613105565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1357612b0e848484613148565b612d4a565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bb65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bcb57612bc68484846133a8565b612d49565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8457612c7f848484613608565b612d48565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d265750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3b57612d368484846137d3565b612d47565b612d46848484613608565b5b5b5b5b80612d5857612d57613ac8565b5b50505050565b600080600060085490506000600754905060005b600680549050811015612fd457826001600060068481548110612d9857612d97614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e865750816002600060068481548110612e1e57612e1d614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e9d576008546007549450945050505061300d565b612f2d6001600060068481548110612eb857612eb7614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846125f690919063ffffffff16565b9250612fbf6002600060068481548110612f4a57612f49614966565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836125f690919063ffffffff16565b91508080612fcc90614861565b915050612d72565b50612fec60075460085461256390919063ffffffff16565b8210156130045760085460075493509350505061300d565b81819350935050505b9091565b60008060008061303d606461302f888a613adc90919063ffffffff16565b61256390919063ffffffff16565b905060006130676064613059888b613adc90919063ffffffff16565b61256390919063ffffffff16565b9050600061309082613082858c6125f690919063ffffffff16565b6125f690919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806130c08588613adc90919063ffffffff16565b905060006130d78688613adc90919063ffffffff16565b905060006130ee82846125f690919063ffffffff16565b905082818395509550955050505093509350939050565b6000600d5414801561311957506000600e54145b1561312357613146565b600d54600f81905550600e546010819055506000600d819055506000600e819055505b565b60008060008060008061315a8761258f565b9550955095509550955095506131b887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061324d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061332e81613af2565b6133388483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133959190614553565b60405180910390a3505050505050505050565b6000806000806000806133ba8761258f565b95509550955095509550955061341886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ad83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061354285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061358e81613af2565b6135988483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135f59190614553565b60405180910390a3505050505050505050565b60008060008060008061361a8761258f565b95509550955095509550955061367886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375981613af2565b6137638483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137c09190614553565b60405180910390a3505050505050505050565b6000806000806000806137e58761258f565b95509550955095509550955061384387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f690919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a0285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4e81613af2565b613a588483613c97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ab59190614553565b60405180910390a3505050505050505050565b600f54600d81905550601054600e81905550565b60008183613aea91906146bf565b905092915050565b6000613afc612538565b90506000613b138284613adc90919063ffffffff16565b9050613b6781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c9257613c4e83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613cac826008546125f690919063ffffffff16565b600881905550613cc78160095461257990919063ffffffff16565b6009819055505050565b600081359050613ce081614e0c565b92915050565b600081519050613cf581614e0c565b92915050565b600081359050613d0a81614e23565b92915050565b600081359050613d1f81614e3a565b92915050565b600081359050613d3481614e51565b92915050565b600060208284031215613d5057613d4f6149c4565b5b6000613d5e84828501613cd1565b91505092915050565b600060208284031215613d7d57613d7c6149c4565b5b6000613d8b84828501613ce6565b91505092915050565b600060208284031215613daa57613da96149c4565b5b6000613db884828501613cfb565b91505092915050565b60008060408385031215613dd857613dd76149c4565b5b6000613de685828601613cd1565b9250506020613df785828601613cd1565b9150509250929050565b600080600060608486031215613e1a57613e196149c4565b5b6000613e2886828701613cd1565b9350506020613e3986828701613cd1565b9250506040613e4a86828701613d25565b9150509250925092565b60008060408385031215613e6b57613e6a6149c4565b5b6000613e7985828601613cd1565b9250506020613e8a85828601613d10565b9150509250929050565b60008060408385031215613eab57613eaa6149c4565b5b6000613eb985828601613cd1565b9250506020613eca85828601613d25565b9150509250929050565b600060208284031215613eea57613ee96149c4565b5b6000613ef884828501613d10565b91505092915050565b600060208284031215613f1757613f166149c4565b5b6000613f2584828501613d25565b91505092915050565b60008060408385031215613f4557613f446149c4565b5b6000613f5385828601613d25565b9250506020613f6485828601613d10565b9150509250929050565b6000613f7a8383613f95565b60208301905092915050565b613f8f8161475f565b82525050565b613f9e8161474d565b82525050565b613fad8161474d565b82525050565b6000613fbe826145f3565b613fc88185614616565b9350613fd3836145e3565b8060005b83811015614004578151613feb8882613f6e565b9750613ff683614609565b925050600181019050613fd7565b5085935050505092915050565b61401a81614771565b82525050565b614029816147b4565b82525050565b614038816147c6565b82525050565b6000614049826145fe565b6140538185614627565b93506140638185602086016147fc565b61406c816149c9565b840191505092915050565b6000614084602383614627565b915061408f826149da565b604082019050919050565b60006140a7602a83614627565b91506140b282614a29565b604082019050919050565b60006140ca602683614627565b91506140d582614a78565b604082019050919050565b60006140ed602283614627565b91506140f882614ac7565b604082019050919050565b6000614110601b83614627565b915061411b82614b16565b602082019050919050565b6000614133601b83614627565b915061413e82614b3f565b602082019050919050565b6000614156603483614627565b915061416182614b68565b604082019050919050565b6000614179601f83614627565b915061418482614bb7565b602082019050919050565b600061419c602883614627565b91506141a782614be0565b604082019050919050565b60006141bf602083614627565b91506141ca82614c2f565b602082019050919050565b60006141e2602983614627565b91506141ed82614c58565b604082019050919050565b6000614205602583614627565b915061421082614ca7565b604082019050919050565b6000614228602483614627565b915061423382614cf6565b604082019050919050565b600061424b601a83614627565b915061425682614d45565b602082019050919050565b600061426e602283614627565b915061427982614d6e565b604082019050919050565b6000614291602c83614627565b915061429c82614dbd565b604082019050919050565b6142b08161479d565b82525050565b6142bf816147a7565b82525050565b60006020820190506142da6000830184613fa4565b92915050565b60006020820190506142f56000830184613f86565b92915050565b60006020820190506143106000830184614011565b92915050565b600060208201905061432b6000830184614020565b92915050565b6000602082019050818103600083015261434b818461403e565b905092915050565b6000602082019050818103600083015261436c81614077565b9050919050565b6000602082019050818103600083015261438c8161409a565b9050919050565b600060208201905081810360008301526143ac816140bd565b9050919050565b600060208201905081810360008301526143cc816140e0565b9050919050565b600060208201905081810360008301526143ec81614103565b9050919050565b6000602082019050818103600083015261440c81614126565b9050919050565b6000602082019050818103600083015261442c81614149565b9050919050565b6000602082019050818103600083015261444c8161416c565b9050919050565b6000602082019050818103600083015261446c8161418f565b9050919050565b6000602082019050818103600083015261448c816141b2565b9050919050565b600060208201905081810360008301526144ac816141d5565b9050919050565b600060208201905081810360008301526144cc816141f8565b9050919050565b600060208201905081810360008301526144ec8161421b565b9050919050565b6000602082019050818103600083015261450c8161423e565b9050919050565b6000602082019050818103600083015261452c81614261565b9050919050565b6000602082019050818103600083015261454c81614284565b9050919050565b600060208201905061456860008301846142a7565b92915050565b600060a08201905061458360008301886142a7565b614590602083018761402f565b81810360408301526145a28186613fb3565b90506145b16060830185613fa4565b6145be60808301846142a7565b9695505050505050565b60006020820190506145dd60008301846142b6565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006146438261479d565b915061464e8361479d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614683576146826148aa565b5b828201905092915050565b60006146998261479d565b91506146a48361479d565b9250826146b4576146b36148d9565b5b828204905092915050565b60006146ca8261479d565b91506146d58361479d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561470e5761470d6148aa565b5b828202905092915050565b60006147248261479d565b915061472f8361479d565b925082821015614742576147416148aa565b5b828203905092915050565b60006147588261477d565b9050919050565b600061476a8261477d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147bf826147d8565b9050919050565b60006147d18261479d565b9050919050565b60006147e3826147ea565b9050919050565b60006147f58261477d565b9050919050565b60005b8381101561481a5780820151818401526020810190506147ff565b83811115614829576000848401525b50505050565b6000600282049050600182168061484757607f821691505b6020821081141561485b5761485a614908565b5b50919050565b600061486c8261479d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561489f5761489e6148aa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2031202d2032350000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f7461784665652073686f756c6420626520696e2031202d203235000000000000600082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614e158161474d565b8114614e2057600080fd5b50565b614e2c8161475f565b8114614e3757600080fd5b50565b614e4381614771565b8114614e4e57600080fd5b50565b614e5a8161479d565b8114614e6557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e12e97209c37e19317ba19ca3dd2f99f7b0a7f09b93d2b85d45939533c7fadb664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000feb8f237873e846d9ddbf8a9477519ae3219984c000000000000000000000000ddcaaf2669f3be5af80068fe71575f1a8c6cec3a
-----Decoded View---------------
Arg [0] : AGFIWalletAddress (address): 0xfEB8f237873e846d9Ddbf8A9477519AE3219984c
Arg [1] : marketingWalletAddress (address): 0xDdcAAf2669f3bE5aF80068FE71575F1A8C6cEc3A
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000feb8f237873e846d9ddbf8a9477519ae3219984c
Arg [1] : 000000000000000000000000ddcaaf2669f3be5af80068fe71575f1a8c6cec3a
Deployed Bytecode Sourcemap
31436:18852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34168:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35172:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36520:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32573:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34481:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50048:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35357:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49691:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37528:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34378:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35698:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36627:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32514:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37044:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32635:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42715:168;;;;;;;;;;;;;:::i;:::-;;39219:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49498:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49891:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32716:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32462:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34596:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13039:103;;;;;;;;;;;;;:::i;:::-;;12388:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34271:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35940:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34818:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36363:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36233:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35009:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43075:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37809:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13297:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42895:168;;;;;;;;;;;;;:::i;:::-;;49368:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38296:522;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34168:91;34205:13;34242:5;34235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34168:91;:::o;35172:173::-;35247:4;35268:39;35277:12;:10;:12::i;:::-;35291:7;35300:6;35268:8;:39::i;:::-;35329:4;35322:11;;35172:173;;;;:::o;36520:95::-;36562:7;36593:10;;36586:17;;36520:95;:::o;32573:51::-;;;:::o;34481:103::-;34534:7;34565;;34558:14;;34481:103;:::o;50048:233::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50153:17:::1;50138:11;:32;;50130:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;50258:11;50243:12;:26;;;;50048:233:::0;:::o;35357:329::-;35455:4;35476:36;35486:6;35494:9;35505:6;35476:9;:36::i;:::-;35527:121;35536:6;35544:12;:10;:12::i;:::-;35558:89;35596:6;35558:89;;;;;;;;;;;;;;;;;:11;:19;35570:6;35558:19;;;;;;;;;;;;;;;:33;35578:12;:10;:12::i;:::-;35558:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;35527:8;:121::i;:::-;35670:4;35663:11;;35357:329;;;;;:::o;49691:188::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49784:1:::1;49773:7;:12;;:29;;;;;49800:2;49789:7;:13;;49773:29;49765:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49860:7;49849:8;:18;;;;49691:188:::0;:::o;37528:269::-;37594:7;37637;;37626;:18;;37618:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37706:19;37729:10;:8;:10::i;:::-;37706:33;;37761:24;37773:11;37761:7;:11;;:24;;;;:::i;:::-;37754:31;;;37528:269;;;:::o;34378:91::-;34419:5;34448:9;;;;;;;;;;;34441:16;;34378:91;:::o;35698:230::-;35786:4;35807:83;35816:12;:10;:12::i;:::-;35830:7;35839:50;35878:10;35839:11;:25;35851:12;:10;:12::i;:::-;35839:25;;;;;;;;;;;;;;;:34;35865:7;35839:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;35807:8;:83::i;:::-;35912:4;35905:11;;35698:230;;;;:::o;36627:405::-;36683:14;36700:12;:10;:12::i;:::-;36683:29;;36736:11;:19;36748:6;36736:19;;;;;;;;;;;;;;;;;;;;;;;;;36735:20;36727:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36820:15;36844:19;36855:7;36844:10;:19::i;:::-;36819:44;;;;;;;36896:28;36916:7;36896;:15;36904:6;36896:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36878:7;:15;36886:6;36878:15;;;;;;;;;;;;;;;:46;;;;36949:20;36961:7;36949;;:11;;:20;;;;:::i;:::-;36939:7;:30;;;;36997:23;37012:7;36997:10;;:14;;:23;;;;:::i;:::-;36984:10;:36;;;;36668:364;;36627:405;:::o;32514:46::-;;;;;;;;;;;;;:::o;37044:472::-;37134:7;37177;;37166;:18;;37158:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37240:17;37235:270;;37279:15;37303:19;37314:7;37303:10;:19::i;:::-;37278:44;;;;;;;37348:7;37341:14;;;;;37235:270;37398:23;37429:19;37440:7;37429:10;:19::i;:::-;37396:52;;;;;;;37474:15;37467:22;;;37044:472;;;;;:::o;32635:38::-;;;:::o;42715:168::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42773:23:::1;42799:24;42817:4;42799:9;:24::i;:::-;42773:50;;42838:33;42855:15;42838:16;:33::i;:::-;42758:125;42715:168::o:0;39219:131::-;39283:4;39311:18;:27;39330:7;39311:27;;;;;;;;;;;;;;;;;;;;;;;;;39304:34;;39219:131;;;:::o;49498:181::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49588:1:::1;49578:6;:11;;:27;;;;;49603:2;49593:6;:12;;49578:27;49570:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49661:6;49651:7;:16;;;;49498:181:::0;:::o;49891:145::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50007:17:::1;49986:18;;:38;;;;;;;;;;;;;;;;;;49891:145:::0;:::o;32716:30::-;;;;;;;;;;;;;:::o;32462:41::-;;;;;;;;;;;;;:::o;34596:210::-;34662:7;34690:11;:20;34702:7;34690:20;;;;;;;;;;;;;;;;;;;;;;;;;34686:49;;;34719:7;:16;34727:7;34719:16;;;;;;;;;;;;;;;;34712:23;;;;34686:49;34757:37;34777:7;:16;34785:7;34777:16;;;;;;;;;;;;;;;;34757:19;:37::i;:::-;34750:44;;34596:210;;;;:::o;13039:103::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13104:30:::1;13131:1;13104:18;:30::i;:::-;13039:103::o:0;12388:87::-;12434:7;12461:6;;;;;;;;;;;12454:13;;12388:87;:::o;34271:95::-;34310:13;34347:7;34340:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34271:95;:::o;35940:281::-;36033:4;36054:129;36063:12;:10;:12::i;:::-;36077:7;36086:96;36125:15;36086:96;;;;;;;;;;;;;;;;;:11;:25;36098:12;:10;:12::i;:::-;36086:25;;;;;;;;;;;;;;;:34;36112:7;36086:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;36054:8;:129::i;:::-;36205:4;36198:11;;35940:281;;;;:::o;34818:179::-;34896:4;34917:42;34927:12;:10;:12::i;:::-;34941:9;34952:6;34917:9;:42::i;:::-;34981:4;34974:11;;34818:179;;;;:::o;36363:145::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36488:8:::1;36458:18;:27;36477:7;36458:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;36363:145:::0;;:::o;36233:118::-;36291:4;36319:11;:20;36331:7;36319:20;;;;;;;;;;;;;;;;;;;;;;;;;36312:27;;36233:118;;;:::o;35009:151::-;35090:7;35121:11;:18;35133:5;35121:18;;;;;;;;;;;;;;;:27;35140:7;35121:27;;;;;;;;;;;;;;;;35114:34;;35009:151;;;;:::o;43075:106::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43162:7:::1;43148:11;;:21;;;;;;;;;;;;;;;;;;43075:106:::0;:::o;37809:475::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37905:42:::1;37894:53;;:7;:53;;;;37886:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;38010:11;:20;38022:7;38010:20;;;;;;;;;;;;;;;;;;;;;;;;;38009:21;38001:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38099:1;38080:7;:16;38088:7;38080:16;;;;;;;;;;;;;;;;:20;38077:116;;;38140:37;38160:7;:16;38168:7;38160:16;;;;;;;;;;;;;;;;38140:19;:37::i;:::-;38121:7;:16;38129:7;38121:16;;;;;;;;;;;;;;;:56;;;;38077:116;38230:4;38207:11;:20;38219:7;38207:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;38249:9;38264:7;38249:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37809:475:::0;:::o;13297:201::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13406:1:::1;13386:22;;:8;:22;;;;13378:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13462:28;13481:8;13462:18;:28::i;:::-;13297:201:::0;:::o;42895:168::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42953:26:::1;42982:21;42953:50;;43018:33;43032:18;43018:13;:33::i;:::-;42938:125;42895:168::o:0;49368:118::-;49414:15;49453:21;49446:28;;49368:118;:::o;38296:522::-;12619:12;:10;:12::i;:::-;12608:23;;:7;:5;:7::i;:::-;:23;;;12600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38381:11:::1;:20;38393:7;38381:20;;;;;;;;;;;;;;;;;;;;;;;;;38373:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38453:9;38448:359;38472:9;:16;;;;38468:1;:20;38448:359;;;38534:7;38518:23;;:9;38528:1;38518:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;38514:278;;;38581:9;38610:1;38591:9;:16;;;;:20;;;;:::i;:::-;38581:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38566:9;38576:1;38566:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38654:1;38635:7;:16;38643:7;38635:16;;;;;;;;;;;;;;;:20;;;;38701:5;38678:11;:20;38690:7;38678:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38729:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;38767:5;;38514:278;38490:3;;;;;:::i;:::-;;;;38448:359;;;;38296:522:::0;:::o;11112:98::-;11165:7;11192:10;11185:17;;11112:98;:::o;39362:357::-;39476:1;39459:19;;:5;:19;;;;39451:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39561:1;39542:21;;:7;:21;;;;39534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39649:6;39619:11;:18;39631:5;39619:18;;;;;;;;;;;;;;;:27;39638:7;39619:27;;;;;;;;;;;;;;;:36;;;;39691:7;39675:32;;39684:5;39675:32;;;39700:6;39675:32;;;;;;:::i;:::-;;;;;;;;39362:357;;;:::o;39731:1964::-;39850:1;39832:20;;:6;:20;;;;39824:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39938:1;39917:23;;:9;:23;;;;39909:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40012:1;40003:6;:10;39995:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40089:7;:5;:7::i;:::-;40079:17;;:6;:17;;;;:41;;;;;40113:7;:5;:7::i;:::-;40100:20;;:9;:20;;;;40079:41;40076:138;;;40157:12;;40147:6;:22;;40139:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40076:138;40497:28;40528:24;40546:4;40528:9;:24::i;:::-;40497:55;;40596:12;;40572:20;:36;40569:124;;40665:12;;40642:35;;40569:124;40709:24;40760:29;;40736:20;:53;;40709:80;;40809:6;;;;;;;;;;;40808:7;:22;;;;;40819:11;;;;;;;;;;;40808:22;:45;;;;;40834:19;40808:45;:72;;;;;40867:13;40857:23;;:6;:23;;;;40808:72;40804:436;;;40991:38;41008:20;40991:16;:38::i;:::-;41050:26;41079:21;41050:50;;41143:1;41122:18;:22;41119:106;;;41169:36;41183:21;41169:13;:36::i;:::-;41119:106;40882:358;40804:436;41321:12;41336:4;41321:19;;41448:18;:26;41467:6;41448:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41478:18;:29;41497:9;41478:29;;;;;;;;;;;;;;;;;;;;;;;;;41448:59;41445:113;;;41537:5;41527:15;;41445:113;41636:47;41651:6;41658:9;41668:6;41675:7;41636:14;:47::i;:::-;39809:1886;;;39731:1964;;;:::o;5651:240::-;5771:7;5829:1;5824;:6;;5832:12;5816:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5871:1;5867;:5;5860:12;;5651:240;;;;;:::o;48354:175::-;48395:7;48420:15;48437;48456:19;:17;:19::i;:::-;48419:56;;;;48497:20;48509:7;48497;:11;;:20;;;;:::i;:::-;48490:27;;;;48354:175;:::o;4509:98::-;4567:7;4598:1;4594;:5;;;;:::i;:::-;4587:12;;4509:98;;;;:::o;3372:::-;3430:7;3461:1;3457;:5;;;;:::i;:::-;3450:12;;3372:98;;;;:::o;47112:481::-;47171:7;47180;47189;47198;47207;47216;47241:23;47266:12;47280:13;47297:39;47309:7;47318;;47327:8;;47297:11;:39::i;:::-;47240:96;;;;;;47351:19;47374:10;:8;:10::i;:::-;47351:33;;47400:15;47417:23;47442:12;47458:39;47470:7;47479:4;47485:11;47458;:39::i;:::-;47399:98;;;;;;47520:7;47529:15;47546:4;47552:15;47569:4;47575:5;47512:69;;;;;;;;;;;;;;;;;;;47112:481;;;;;;;:::o;3753:98::-;3811:7;3842:1;3838;:5;;;;:::i;:::-;3831:12;;3753:98;;;;:::o;41707:656::-;33134:4;33125:6;;:13;;;;;;;;;;;;;;;;;;41852:21:::1;41890:1;41876:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41852:40;;41925:4;41907;41912:1;41907:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41955:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41945:4;41950:1;41945:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;41994:62;42011:4;42026:15;42044:11;41994:8;:62::i;:::-;42103:15;:66;;;42188:11;42218:1;42266:4;42297;42321:15;42103:248;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41773:590;33178:5:::0;33169:6;;:14;;;;;;;;;;;;;;;;;;41707:656;:::o;13658:191::-;13732:16;13751:6;;;;;;;;;;;13732:25;;13777:8;13768:6;;:17;;;;;;;;;;;;;;;;;;13832:8;13801:40;;13822:8;13801:40;;;;;;;;;;;;13721:128;13658:191;:::o;42375:178::-;42437:18;;;;;;;;;;;:27;;:42;42465:13;42476:1;42465:6;:10;;:13;;;;:::i;:::-;42437:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42494:23;;;;;;;;;;;:32;;:47;42527:13;42538:1;42527:6;:10;;:13;;;;:::i;:::-;42494:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42375:178;:::o;43193:883::-;43309:7;43305:44;;43335:14;:12;:14::i;:::-;43305:44;43370:11;:19;43382:6;43370:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;43394:11;:22;43406:9;43394:22;;;;;;;;;;;;;;;;;;;;;;;;;43393:23;43370:46;43366:637;;;43437:48;43459:6;43467:9;43478:6;43437:21;:48::i;:::-;43366:637;;;43512:11;:19;43524:6;43512:19;;;;;;;;;;;;;;;;;;;;;;;;;43511:20;:46;;;;;43535:11;:22;43547:9;43535:22;;;;;;;;;;;;;;;;;;;;;;;;;43511:46;43507:496;;;43578:46;43598:6;43606:9;43617:6;43578:19;:46::i;:::-;43507:496;;;43651:11;:19;43663:6;43651:19;;;;;;;;;;;;;;;;;;;;;;;;;43650:20;:47;;;;;43675:11;:22;43687:9;43675:22;;;;;;;;;;;;;;;;;;;;;;;;;43674:23;43650:47;43646:357;;;43718:44;43736:6;43744:9;43755:6;43718:17;:44::i;:::-;43646:357;;;43788:11;:19;43800:6;43788:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;43811:11;:22;43823:9;43811:22;;;;;;;;;;;;;;;;;;;;;;;;;43788:45;43784:219;;;43854:48;43876:6;43884:9;43895:6;43854:21;:48::i;:::-;43784:219;;;43943:44;43961:6;43969:9;43980:6;43943:17;:44::i;:::-;43784:219;43646:357;43507:496;43366:637;44023:7;44019:45;;44049:15;:13;:15::i;:::-;44019:45;43193:883;;;;:::o;48541:595::-;48591:7;48600;48624:15;48642:7;;48624:25;;48664:15;48682:7;;48664:25;;48709:9;48704:305;48728:9;:16;;;;48724:1;:20;48704:305;;;48798:7;48774;:21;48782:9;48792:1;48782:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48774:21;;;;;;;;;;;;;;;;:31;:66;;;;48833:7;48809;:21;48817:9;48827:1;48817:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48809:21;;;;;;;;;;;;;;;;:31;48774:66;48770:97;;;48850:7;;48859;;48842:25;;;;;;;;;48770:97;48896:34;48908:7;:21;48916:9;48926:1;48916:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48908:21;;;;;;;;;;;;;;;;48896:7;:11;;:34;;;;:::i;:::-;48886:44;;48959:34;48971:7;:21;48979:9;48989:1;48979:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48971:21;;;;;;;;;;;;;;;;48959:7;:11;;:34;;;;:::i;:::-;48949:44;;48746:3;;;;;:::i;:::-;;;;48704:305;;;;49037:20;49049:7;;49037;;:11;;:20;;;;:::i;:::-;49027:7;:30;49023:61;;;49067:7;;49076;;49059:25;;;;;;;;49023:61;49107:7;49116;49099:25;;;;;;48541:595;;;:::o;47605:371::-;47698:7;47707;47716;47740:12;47755:28;47779:3;47755:19;47767:6;47755:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;47740:43;;47798:13;47814:29;47839:3;47814:20;47826:7;47814;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;47798:45;;47858:23;47884:28;47906:5;47884:17;47896:4;47884:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;47858:54;;47935:15;47952:4;47958:5;47927:37;;;;;;;;;47605:371;;;;;;;:::o;47988:354::-;48083:7;48092;48101;48125:15;48143:24;48155:11;48143:7;:11;;:24;;;;:::i;:::-;48125:42;;48182:12;48197:21;48206:11;48197:4;:8;;:21;;;;:::i;:::-;48182:36;;48233:23;48259:17;48271:4;48259:7;:11;;:17;;;;:::i;:::-;48233:43;;48299:7;48308:15;48325:4;48291:39;;;;;;;;;47988:354;;;;;;;:::o;38830:238::-;38891:1;38880:7;;:12;:29;;;;;38908:1;38896:8;;:13;38880:29;38877:41;;;38911:7;;38877:41;38952:7;;38934:15;:25;;;;38993:8;;38974:16;:27;;;;39028:1;39018:7;:11;;;;39055:1;39044:8;:12;;;;38830:238;:::o;45219:580::-;45326:15;45343:23;45368:12;45382:23;45407:12;45421:13;45438:19;45449:7;45438:10;:19::i;:::-;45325:132;;;;;;;;;;;;45490:28;45510:7;45490;:15;45498:6;45490:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45472:7;:15;45480:6;45472:15;;;;;;;;;;;;;;;:46;;;;45551:28;45571:7;45551;:15;45559:6;45551:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45533:7;:15;45541:6;45533:15;;;;;;;;;;;;;;;:46;;;;45615:39;45638:15;45615:7;:18;45623:9;45615:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45594:7;:18;45602:9;45594:18;;;;;;;;;;;;;;;:60;;;;45669:16;45679:5;45669:9;:16::i;:::-;45700:23;45712:4;45718;45700:11;:23::i;:::-;45760:9;45743:44;;45752:6;45743:44;;;45771:15;45743:44;;;;;;:::i;:::-;;;;;;;;45310:489;;;;;;45219:580;;;:::o;44615:592::-;44720:15;44737:23;44762:12;44776:23;44801:12;44815:13;44832:19;44843:7;44832:10;:19::i;:::-;44719:132;;;;;;;;;;;;44884:28;44904:7;44884;:15;44892:6;44884:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44866:7;:15;44874:6;44866:15;;;;;;;;;;;;;;;:46;;;;44948:39;44971:15;44948:7;:18;44956:9;44948:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44927:7;:18;44935:9;44927:18;;;;;;;;;;;;;;;:60;;;;45023:39;45046:15;45023:7;:18;45031:9;45023:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45002:7;:18;45010:9;45002:18;;;;;;;;;;;;;;;:60;;;;45077:16;45087:5;45077:9;:16::i;:::-;45108:23;45120:4;45126;45108:11;:23::i;:::-;45168:9;45151:44;;45160:6;45151:44;;;45179:15;45151:44;;;;;;:::i;:::-;;;;;;;;44704:503;;;;;;44615:592;;;:::o;44088:515::-;44191:15;44208:23;44233:12;44247:23;44272:12;44286:13;44303:19;44314:7;44303:10;:19::i;:::-;44190:132;;;;;;;;;;;;44355:28;44375:7;44355;:15;44363:6;44355:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44337:7;:15;44345:6;44337:15;;;;;;;;;;;;;;;:46;;;;44419:39;44442:15;44419:7;:18;44427:9;44419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44398:7;:18;44406:9;44398:18;;;;;;;;;;;;;;;:60;;;;44473:16;44483:5;44473:9;:16::i;:::-;44504:23;44516:4;44522;44504:11;:23::i;:::-;44564:9;44547:44;;44556:6;44547:44;;;44575:15;44547:44;;;;;;:::i;:::-;;;;;;;;44175:428;;;;;;44088:515;;;:::o;45811:655::-;45918:15;45935:23;45960:12;45974:23;45999:12;46013:13;46030:19;46041:7;46030:10;:19::i;:::-;45917:132;;;;;;;;;;;;46082:28;46102:7;46082;:15;46090:6;46082:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46064:7;:15;46072:6;46064:15;;;;;;;;;;;;;;;:46;;;;46143:28;46163:7;46143;:15;46151:6;46143:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46125:7;:15;46133:6;46125:15;;;;;;;;;;;;;;;:46;;;;46207:39;46230:15;46207:7;:18;46215:9;46207:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46186:7;:18;46194:9;46186:18;;;;;;;;;;;;;;;:60;;;;46282:39;46305:15;46282:7;:18;46290:9;46282:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46261:7;:18;46269:9;46261:18;;;;;;;;;;;;;;;:60;;;;46336:16;46346:5;46336:9;:16::i;:::-;46367:23;46379:4;46385;46367:11;:23::i;:::-;46427:9;46410:44;;46419:6;46410:44;;;46438:15;46410:44;;;;;;:::i;:::-;;;;;;;;45902:564;;;;;;45811:655;;;:::o;39080:127::-;39138:15;;39128:7;:25;;;;39179:16;;39168:8;:27;;;;39080:127::o;4110:98::-;4168:7;4199:1;4195;:5;;;;:::i;:::-;4188:12;;4110:98;;;;:::o;46478:349::-;46535:19;46558:10;:8;:10::i;:::-;46535:33;;46583:13;46599:22;46609:11;46599:5;:9;;:22;;;;:::i;:::-;46583:38;;46661:33;46688:5;46661:7;:22;46677:4;46661:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;46636:7;:22;46652:4;46636:22;;;;;;;;;;;;;;;:58;;;;46712:11;:26;46732:4;46712:26;;;;;;;;;;;;;;;;;;;;;;;;;46709:106;;;46782:33;46809:5;46782:7;:22;46798:4;46782:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;46757:7;:22;46773:4;46757:22;;;;;;;;;;;;;;;:58;;;;46709:106;46520:307;;46478:349;:::o;46839:159::-;46921:17;46933:4;46921:7;;:11;;:17;;;;:::i;:::-;46911:7;:27;;;;46966:20;46981:4;46966:10;;:14;;:20;;;;:::i;:::-;46953:10;:33;;;;46839:159;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;462:133;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;601:139;;;;:::o;746:329::-;805:6;854:2;842:9;833:7;829:23;825:32;822:119;;;860:79;;:::i;:::-;822:119;980:1;1005:53;1050:7;1041:6;1030:9;1026:22;1005:53;:::i;:::-;995:63;;951:117;746:329;;;;:::o;1081:351::-;1151:6;1200:2;1188:9;1179:7;1175:23;1171:32;1168:119;;;1206:79;;:::i;:::-;1168:119;1326:1;1351:64;1407:7;1398:6;1387:9;1383:22;1351:64;:::i;:::-;1341:74;;1297:128;1081:351;;;;:::o;1438:345::-;1505:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:119;;;1560:79;;:::i;:::-;1522:119;1680:1;1705:61;1758:7;1749:6;1738:9;1734:22;1705:61;:::i;:::-;1695:71;;1651:125;1438:345;;;;:::o;1789:474::-;1857:6;1865;1914:2;1902:9;1893:7;1889:23;1885:32;1882:119;;;1920:79;;:::i;:::-;1882:119;2040:1;2065:53;2110:7;2101:6;2090:9;2086:22;2065:53;:::i;:::-;2055:63;;2011:117;2167:2;2193:53;2238:7;2229:6;2218:9;2214:22;2193:53;:::i;:::-;2183:63;;2138:118;1789:474;;;;;:::o;2269:619::-;2346:6;2354;2362;2411:2;2399:9;2390:7;2386:23;2382:32;2379:119;;;2417:79;;:::i;:::-;2379:119;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:53;2735:7;2726:6;2715:9;2711:22;2690:53;:::i;:::-;2680:63;;2635:118;2792:2;2818:53;2863:7;2854:6;2843:9;2839:22;2818:53;:::i;:::-;2808:63;;2763:118;2269:619;;;;;:::o;2894:468::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:50;3337:7;3328:6;3317:9;3313:22;3295:50;:::i;:::-;3285:60;;3240:115;2894:468;;;;;:::o;3368:474::-;3436:6;3444;3493:2;3481:9;3472:7;3468:23;3464:32;3461:119;;;3499:79;;:::i;:::-;3461:119;3619:1;3644:53;3689:7;3680:6;3669:9;3665:22;3644:53;:::i;:::-;3634:63;;3590:117;3746:2;3772:53;3817:7;3808:6;3797:9;3793:22;3772:53;:::i;:::-;3762:63;;3717:118;3368:474;;;;;:::o;3848:323::-;3904:6;3953:2;3941:9;3932:7;3928:23;3924:32;3921:119;;;3959:79;;:::i;:::-;3921:119;4079:1;4104:50;4146:7;4137:6;4126:9;4122:22;4104:50;:::i;:::-;4094:60;;4050:114;3848:323;;;;:::o;4177:329::-;4236:6;4285:2;4273:9;4264:7;4260:23;4256:32;4253:119;;;4291:79;;:::i;:::-;4253:119;4411:1;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4382:117;4177:329;;;;:::o;4512:468::-;4577:6;4585;4634:2;4622:9;4613:7;4609:23;4605:32;4602:119;;;4640:79;;:::i;:::-;4602:119;4760:1;4785:53;4830:7;4821:6;4810:9;4806:22;4785:53;:::i;:::-;4775:63;;4731:117;4887:2;4913:50;4955:7;4946:6;4935:9;4931:22;4913:50;:::i;:::-;4903:60;;4858:115;4512:468;;;;;:::o;4986:179::-;5055:10;5076:46;5118:3;5110:6;5076:46;:::i;:::-;5154:4;5149:3;5145:14;5131:28;;4986:179;;;;:::o;5171:142::-;5274:32;5300:5;5274:32;:::i;:::-;5269:3;5262:45;5171:142;;:::o;5319:108::-;5396:24;5414:5;5396:24;:::i;:::-;5391:3;5384:37;5319:108;;:::o;5433:118::-;5520:24;5538:5;5520:24;:::i;:::-;5515:3;5508:37;5433:118;;:::o;5587:732::-;5706:3;5735:54;5783:5;5735:54;:::i;:::-;5805:86;5884:6;5879:3;5805:86;:::i;:::-;5798:93;;5915:56;5965:5;5915:56;:::i;:::-;5994:7;6025:1;6010:284;6035:6;6032:1;6029:13;6010:284;;;6111:6;6105:13;6138:63;6197:3;6182:13;6138:63;:::i;:::-;6131:70;;6224:60;6277:6;6224:60;:::i;:::-;6214:70;;6070:224;6057:1;6054;6050:9;6045:14;;6010:284;;;6014:14;6310:3;6303:10;;5711:608;;;5587:732;;;;:::o;6325:109::-;6406:21;6421:5;6406:21;:::i;:::-;6401:3;6394:34;6325:109;;:::o;6440:185::-;6554:64;6612:5;6554:64;:::i;:::-;6549:3;6542:77;6440:185;;:::o;6631:147::-;6726:45;6765:5;6726:45;:::i;:::-;6721:3;6714:58;6631:147;;:::o;6784:364::-;6872:3;6900:39;6933:5;6900:39;:::i;:::-;6955:71;7019:6;7014:3;6955:71;:::i;:::-;6948:78;;7035:52;7080:6;7075:3;7068:4;7061:5;7057:16;7035:52;:::i;:::-;7112:29;7134:6;7112:29;:::i;:::-;7107:3;7103:39;7096:46;;6876:272;6784:364;;;;:::o;7154:366::-;7296:3;7317:67;7381:2;7376:3;7317:67;:::i;:::-;7310:74;;7393:93;7482:3;7393:93;:::i;:::-;7511:2;7506:3;7502:12;7495:19;;7154:366;;;:::o;7526:::-;7668:3;7689:67;7753:2;7748:3;7689:67;:::i;:::-;7682:74;;7765:93;7854:3;7765:93;:::i;:::-;7883:2;7878:3;7874:12;7867:19;;7526:366;;;:::o;7898:::-;8040:3;8061:67;8125:2;8120:3;8061:67;:::i;:::-;8054:74;;8137:93;8226:3;8137:93;:::i;:::-;8255:2;8250:3;8246:12;8239:19;;7898:366;;;:::o;8270:::-;8412:3;8433:67;8497:2;8492:3;8433:67;:::i;:::-;8426:74;;8509:93;8598:3;8509:93;:::i;:::-;8627:2;8622:3;8618:12;8611:19;;8270:366;;;:::o;8642:::-;8784:3;8805:67;8869:2;8864:3;8805:67;:::i;:::-;8798:74;;8881:93;8970:3;8881:93;:::i;:::-;8999:2;8994:3;8990:12;8983:19;;8642:366;;;:::o;9014:::-;9156:3;9177:67;9241:2;9236:3;9177:67;:::i;:::-;9170:74;;9253:93;9342:3;9253:93;:::i;:::-;9371:2;9366:3;9362:12;9355:19;;9014:366;;;:::o;9386:::-;9528:3;9549:67;9613:2;9608:3;9549:67;:::i;:::-;9542:74;;9625:93;9714:3;9625:93;:::i;:::-;9743:2;9738:3;9734:12;9727:19;;9386:366;;;:::o;9758:::-;9900:3;9921:67;9985:2;9980:3;9921:67;:::i;:::-;9914:74;;9997:93;10086:3;9997:93;:::i;:::-;10115:2;10110:3;10106:12;10099:19;;9758:366;;;:::o;10130:::-;10272:3;10293:67;10357:2;10352:3;10293:67;:::i;:::-;10286:74;;10369:93;10458:3;10369:93;:::i;:::-;10487:2;10482:3;10478:12;10471:19;;10130:366;;;:::o;10502:::-;10644:3;10665:67;10729:2;10724:3;10665:67;:::i;:::-;10658:74;;10741:93;10830:3;10741:93;:::i;:::-;10859:2;10854:3;10850:12;10843:19;;10502:366;;;:::o;10874:::-;11016:3;11037:67;11101:2;11096:3;11037:67;:::i;:::-;11030:74;;11113:93;11202:3;11113:93;:::i;:::-;11231:2;11226:3;11222:12;11215:19;;10874:366;;;:::o;11246:::-;11388:3;11409:67;11473:2;11468:3;11409:67;:::i;:::-;11402:74;;11485:93;11574:3;11485:93;:::i;:::-;11603:2;11598:3;11594:12;11587:19;;11246:366;;;:::o;11618:::-;11760:3;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11857:93;11946:3;11857:93;:::i;:::-;11975:2;11970:3;11966:12;11959:19;;11618:366;;;:::o;11990:::-;12132:3;12153:67;12217:2;12212:3;12153:67;:::i;:::-;12146:74;;12229:93;12318:3;12229:93;:::i;:::-;12347:2;12342:3;12338:12;12331:19;;11990:366;;;:::o;12362:::-;12504:3;12525:67;12589:2;12584:3;12525:67;:::i;:::-;12518:74;;12601:93;12690:3;12601:93;:::i;:::-;12719:2;12714:3;12710:12;12703:19;;12362:366;;;:::o;12734:::-;12876:3;12897:67;12961:2;12956:3;12897:67;:::i;:::-;12890:74;;12973:93;13062:3;12973:93;:::i;:::-;13091:2;13086:3;13082:12;13075:19;;12734:366;;;:::o;13106:118::-;13193:24;13211:5;13193:24;:::i;:::-;13188:3;13181:37;13106:118;;:::o;13230:112::-;13313:22;13329:5;13313:22;:::i;:::-;13308:3;13301:35;13230:112;;:::o;13348:222::-;13441:4;13479:2;13468:9;13464:18;13456:26;;13492:71;13560:1;13549:9;13545:17;13536:6;13492:71;:::i;:::-;13348:222;;;;:::o;13576:254::-;13685:4;13723:2;13712:9;13708:18;13700:26;;13736:87;13820:1;13809:9;13805:17;13796:6;13736:87;:::i;:::-;13576:254;;;;:::o;13836:210::-;13923:4;13961:2;13950:9;13946:18;13938:26;;13974:65;14036:1;14025:9;14021:17;14012:6;13974:65;:::i;:::-;13836:210;;;;:::o;14052:276::-;14172:4;14210:2;14199:9;14195:18;14187:26;;14223:98;14318:1;14307:9;14303:17;14294:6;14223:98;:::i;:::-;14052:276;;;;:::o;14334:313::-;14447:4;14485:2;14474:9;14470:18;14462:26;;14534:9;14528:4;14524:20;14520:1;14509:9;14505:17;14498:47;14562:78;14635:4;14626:6;14562:78;:::i;:::-;14554:86;;14334:313;;;;:::o;14653:419::-;14819:4;14857:2;14846:9;14842:18;14834:26;;14906:9;14900:4;14896:20;14892:1;14881:9;14877:17;14870:47;14934:131;15060:4;14934:131;:::i;:::-;14926:139;;14653:419;;;:::o;15078:::-;15244:4;15282:2;15271:9;15267:18;15259:26;;15331:9;15325:4;15321:20;15317:1;15306:9;15302:17;15295:47;15359:131;15485:4;15359:131;:::i;:::-;15351:139;;15078:419;;;:::o;15503:::-;15669:4;15707:2;15696:9;15692:18;15684:26;;15756:9;15750:4;15746:20;15742:1;15731:9;15727:17;15720:47;15784:131;15910:4;15784:131;:::i;:::-;15776:139;;15503:419;;;:::o;15928:::-;16094:4;16132:2;16121:9;16117:18;16109:26;;16181:9;16175:4;16171:20;16167:1;16156:9;16152:17;16145:47;16209:131;16335:4;16209:131;:::i;:::-;16201:139;;15928:419;;;:::o;16353:::-;16519:4;16557:2;16546:9;16542:18;16534:26;;16606:9;16600:4;16596:20;16592:1;16581:9;16577:17;16570:47;16634:131;16760:4;16634:131;:::i;:::-;16626:139;;16353:419;;;:::o;16778:::-;16944:4;16982:2;16971:9;16967:18;16959:26;;17031:9;17025:4;17021:20;17017:1;17006:9;17002:17;16995:47;17059:131;17185:4;17059:131;:::i;:::-;17051:139;;16778:419;;;:::o;17203:::-;17369:4;17407:2;17396:9;17392:18;17384:26;;17456:9;17450:4;17446:20;17442:1;17431:9;17427:17;17420:47;17484:131;17610:4;17484:131;:::i;:::-;17476:139;;17203:419;;;:::o;17628:::-;17794:4;17832:2;17821:9;17817:18;17809:26;;17881:9;17875:4;17871:20;17867:1;17856:9;17852:17;17845:47;17909:131;18035:4;17909:131;:::i;:::-;17901:139;;17628:419;;;:::o;18053:::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:::-;18644:4;18682:2;18671:9;18667:18;18659:26;;18731:9;18725:4;18721:20;18717:1;18706:9;18702:17;18695:47;18759:131;18885:4;18759:131;:::i;:::-;18751:139;;18478:419;;;:::o;18903:::-;19069:4;19107:2;19096:9;19092:18;19084:26;;19156:9;19150:4;19146:20;19142:1;19131:9;19127:17;19120:47;19184:131;19310:4;19184:131;:::i;:::-;19176:139;;18903:419;;;:::o;19328:::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19328:419;;;:::o;19753:::-;19919:4;19957:2;19946:9;19942:18;19934:26;;20006:9;20000:4;19996:20;19992:1;19981:9;19977:17;19970:47;20034:131;20160:4;20034:131;:::i;:::-;20026:139;;19753:419;;;:::o;20178:::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20178:419;;;:::o;20603:::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20603:419;;;:::o;21028:::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21281:9;21275:4;21271:20;21267:1;21256:9;21252:17;21245:47;21309:131;21435:4;21309:131;:::i;:::-;21301:139;;21028:419;;;:::o;21453:222::-;21546:4;21584:2;21573:9;21569:18;21561:26;;21597:71;21665:1;21654:9;21650:17;21641:6;21597:71;:::i;:::-;21453:222;;;;:::o;21681:831::-;21944:4;21982:3;21971:9;21967:19;21959:27;;21996:71;22064:1;22053:9;22049:17;22040:6;21996:71;:::i;:::-;22077:80;22153:2;22142:9;22138:18;22129:6;22077:80;:::i;:::-;22204:9;22198:4;22194:20;22189:2;22178:9;22174:18;22167:48;22232:108;22335:4;22326:6;22232:108;:::i;:::-;22224:116;;22350:72;22418:2;22407:9;22403:18;22394:6;22350:72;:::i;:::-;22432:73;22500:3;22489:9;22485:19;22476:6;22432:73;:::i;:::-;21681:831;;;;;;;;:::o;22518:214::-;22607:4;22645:2;22634:9;22630:18;22622:26;;22658:67;22722:1;22711:9;22707:17;22698:6;22658:67;:::i;:::-;22518:214;;;;:::o;22819:132::-;22886:4;22909:3;22901:11;;22939:4;22934:3;22930:14;22922:22;;22819:132;;;:::o;22957:114::-;23024:6;23058:5;23052:12;23042:22;;22957:114;;;:::o;23077:99::-;23129:6;23163:5;23157:12;23147:22;;23077:99;;;:::o;23182:113::-;23252:4;23284;23279:3;23275:14;23267:22;;23182:113;;;:::o;23301:184::-;23400:11;23434:6;23429:3;23422:19;23474:4;23469:3;23465:14;23450:29;;23301:184;;;;:::o;23491:169::-;23575:11;23609:6;23604:3;23597:19;23649:4;23644:3;23640:14;23625:29;;23491:169;;;;:::o;23666:305::-;23706:3;23725:20;23743:1;23725:20;:::i;:::-;23720:25;;23759:20;23777:1;23759:20;:::i;:::-;23754:25;;23913:1;23845:66;23841:74;23838:1;23835:81;23832:107;;;23919:18;;:::i;:::-;23832:107;23963:1;23960;23956:9;23949:16;;23666:305;;;;:::o;23977:185::-;24017:1;24034:20;24052:1;24034:20;:::i;:::-;24029:25;;24068:20;24086:1;24068:20;:::i;:::-;24063:25;;24107:1;24097:35;;24112:18;;:::i;:::-;24097:35;24154:1;24151;24147:9;24142:14;;23977:185;;;;:::o;24168:348::-;24208:7;24231:20;24249:1;24231:20;:::i;:::-;24226:25;;24265:20;24283:1;24265:20;:::i;:::-;24260:25;;24453:1;24385:66;24381:74;24378:1;24375:81;24370:1;24363:9;24356:17;24352:105;24349:131;;;24460:18;;:::i;:::-;24349:131;24508:1;24505;24501:9;24490:20;;24168:348;;;;:::o;24522:191::-;24562:4;24582:20;24600:1;24582:20;:::i;:::-;24577:25;;24616:20;24634:1;24616:20;:::i;:::-;24611:25;;24655:1;24652;24649:8;24646:34;;;24660:18;;:::i;:::-;24646:34;24705:1;24702;24698:9;24690:17;;24522:191;;;;:::o;24719:96::-;24756:7;24785:24;24803:5;24785:24;:::i;:::-;24774:35;;24719:96;;;:::o;24821:104::-;24866:7;24895:24;24913:5;24895:24;:::i;:::-;24884:35;;24821:104;;;:::o;24931:90::-;24965:7;25008:5;25001:13;24994:21;24983:32;;24931:90;;;:::o;25027:126::-;25064:7;25104:42;25097:5;25093:54;25082:65;;25027:126;;;:::o;25159:77::-;25196:7;25225:5;25214:16;;25159:77;;;:::o;25242:86::-;25277:7;25317:4;25310:5;25306:16;25295:27;;25242:86;;;:::o;25334:153::-;25411:9;25444:37;25475:5;25444:37;:::i;:::-;25431:50;;25334:153;;;:::o;25493:121::-;25551:9;25584:24;25602:5;25584:24;:::i;:::-;25571:37;;25493:121;;;:::o;25620:126::-;25670:9;25703:37;25734:5;25703:37;:::i;:::-;25690:50;;25620:126;;;:::o;25752:113::-;25802:9;25835:24;25853:5;25835:24;:::i;:::-;25822:37;;25752:113;;;:::o;25871:307::-;25939:1;25949:113;25963:6;25960:1;25957:13;25949:113;;;26048:1;26043:3;26039:11;26033:18;26029:1;26024:3;26020:11;26013:39;25985:2;25982:1;25978:10;25973:15;;25949:113;;;26080:6;26077:1;26074:13;26071:101;;;26160:1;26151:6;26146:3;26142:16;26135:27;26071:101;25920:258;25871:307;;;:::o;26184:320::-;26228:6;26265:1;26259:4;26255:12;26245:22;;26312:1;26306:4;26302:12;26333:18;26323:81;;26389:4;26381:6;26377:17;26367:27;;26323:81;26451:2;26443:6;26440:14;26420:18;26417:38;26414:84;;;26470:18;;:::i;:::-;26414:84;26235:269;26184:320;;;:::o;26510:233::-;26549:3;26572:24;26590:5;26572:24;:::i;:::-;26563:33;;26618:66;26611:5;26608:77;26605:103;;;26688:18;;:::i;:::-;26605:103;26735:1;26728:5;26724:13;26717:20;;26510:233;;;:::o;26749:180::-;26797:77;26794:1;26787:88;26894:4;26891:1;26884:15;26918:4;26915:1;26908:15;26935:180;26983:77;26980:1;26973:88;27080:4;27077:1;27070:15;27104:4;27101:1;27094:15;27121:180;27169:77;27166:1;27159:88;27266:4;27263:1;27256:15;27290:4;27287:1;27280:15;27307:180;27355:77;27352:1;27345:88;27452:4;27449:1;27442:15;27476:4;27473:1;27466:15;27493:180;27541:77;27538:1;27531:88;27638:4;27635:1;27628:15;27662:4;27659:1;27652:15;27679:180;27727:77;27724:1;27717:88;27824:4;27821:1;27814:15;27848:4;27845:1;27838:15;27988:117;28097:1;28094;28087:12;28111:102;28152:6;28203:2;28199:7;28194:2;28187:5;28183:14;28179:28;28169:38;;28111:102;;;:::o;28219:222::-;28359:34;28355:1;28347:6;28343:14;28336:58;28428:5;28423:2;28415:6;28411:15;28404:30;28219:222;:::o;28447:229::-;28587:34;28583:1;28575:6;28571:14;28564:58;28656:12;28651:2;28643:6;28639:15;28632:37;28447:229;:::o;28682:225::-;28822:34;28818:1;28810:6;28806:14;28799:58;28891:8;28886:2;28878:6;28874:15;28867:33;28682:225;:::o;28913:221::-;29053:34;29049:1;29041:6;29037:14;29030:58;29122:4;29117:2;29109:6;29105:15;29098:29;28913:221;:::o;29140:177::-;29280:29;29276:1;29268:6;29264:14;29257:53;29140:177;:::o;29323:::-;29463:29;29459:1;29451:6;29447:14;29440:53;29323:177;:::o;29506:239::-;29646:34;29642:1;29634:6;29630:14;29623:58;29715:22;29710:2;29702:6;29698:15;29691:47;29506:239;:::o;29751:181::-;29891:33;29887:1;29879:6;29875:14;29868:57;29751:181;:::o;29938:227::-;30078:34;30074:1;30066:6;30062:14;30055:58;30147:10;30142:2;30134:6;30130:15;30123:35;29938:227;:::o;30171:182::-;30311:34;30307:1;30299:6;30295:14;30288:58;30171:182;:::o;30359:228::-;30499:34;30495:1;30487:6;30483:14;30476:58;30568:11;30563:2;30555:6;30551:15;30544:36;30359:228;:::o;30593:224::-;30733:34;30729:1;30721:6;30717:14;30710:58;30802:7;30797:2;30789:6;30785:15;30778:32;30593:224;:::o;30823:223::-;30963:34;30959:1;30951:6;30947:14;30940:58;31032:6;31027:2;31019:6;31015:15;31008:31;30823:223;:::o;31052:176::-;31192:28;31188:1;31180:6;31176:14;31169:52;31052:176;:::o;31234:221::-;31374:34;31370:1;31362:6;31358:14;31351:58;31443:4;31438:2;31430:6;31426:15;31419:29;31234:221;:::o;31461:231::-;31601:34;31597:1;31589:6;31585:14;31578:58;31670:14;31665:2;31657:6;31653:15;31646:39;31461:231;:::o;31698:122::-;31771:24;31789:5;31771:24;:::i;:::-;31764:5;31761:35;31751:63;;31810:1;31807;31800:12;31751:63;31698:122;:::o;31826:138::-;31907:32;31933:5;31907:32;:::i;:::-;31900:5;31897:43;31887:71;;31954:1;31951;31944:12;31887:71;31826:138;:::o;31970:116::-;32040:21;32055:5;32040:21;:::i;:::-;32033:5;32030:32;32020:60;;32076:1;32073;32066:12;32020:60;31970:116;:::o;32092:122::-;32165:24;32183:5;32165:24;:::i;:::-;32158:5;32155:35;32145:63;;32204:1;32201;32194:12;32145:63;32092:122;:::o
Swarm Source
ipfs://e12e97209c37e19317ba19ca3dd2f99f7b0a7f09b93d2b85d45939533c7fadb6
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.