Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 SP
Holders
125
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
2,070,192,169.201971154 SPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SOUTHPARK
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-29 */ pragma solidity ^0.8.3; // SPDX-License-Identifier: Unlicensed /** * @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); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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; } // contract implementation contract SOUTHPARK is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; // string private _name = "SOUTH PARK"; string private _symbol = "SP"; uint256 private _tTotal = 1000 * 10**9 * 10**uint256(_decimals); // uint256 public defaultTaxFee = 0; uint256 public _taxFee = defaultTaxFee; uint256 private _previousTaxFee = _taxFee; // uint256 public defaultMarketingFee = 9; uint256 public _marketingFee = defaultMarketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _marketingFee4Sellers = 9; uint256 public _marketingFee4Buyers = 0; bool public feesOnSellersAndBuyers = true; uint256 public _maxTxAmount = _tTotal.div(1).div(100); uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); address payable public marketingWallet = payable(0xe3f5594E28E0c5311D8Af9320e739CfE5FbFB9dE); // 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 _tFeeTotal; uint256 private _rTotal = (MAX - (MAX % _tTotal)); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndSend; bool public SwapAndSendEnabled = true; event SwapAndSendEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndSend = true; _; inSwapAndSend = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } 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 excludeFromReward(address account) public 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 includeInReward(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 excludeFromFee(address account) public onlyOwner() { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner() { _isExcludedFromFee[account] = false; } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; } //to recieve ETH receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing); 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 _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } 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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != 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 + send lock? // also, don't get caught in a circular sending event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToExchangeForMarketing; if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if ( overMinTokenBalance && !inSwapAndSend && from != uniswapV2Pair && SwapAndSendEnabled ) { SwapAndSend(contractTokenBalance); } if(feesOnSellersAndBuyers) { setFees(to); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function setFees(address recipient) private { _taxFee = defaultTaxFee; _marketingFee = defaultMarketingFee; if (recipient == uniswapV2Pair) { // sell _marketingFee = _marketingFee4Sellers + _marketingFee4Buyers; } } function SwapAndSend(uint256 contractTokenBalance) 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), contractTokenBalance); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp ); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { marketingWallet.transfer(contractETHBalance); } } //this method is responsible for taking all fee, if takeFee is true 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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _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 tMarketing) = _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); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() { defaultMarketingFee = marketingFee; } function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() { _marketingFee4Sellers = marketingFee4Sellers; } function setMarketingFee4Buyers(uint256 marketingFee4Buyers) external onlyOwner() { _marketingFee4Buyers = marketingFee4Buyers; } function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() { feesOnSellersAndBuyers = _enabled; } function setSwapAndSendEnabled(bool _enabled) public onlyOwner() { SwapAndSendEnabled = _enabled; emit SwapAndSendEnabledUpdated(_enabled); } function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() { numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing; } function _setMarketingWallet(address payable wallet) external onlyOwner() { marketingWallet = wallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"SwapAndSendEnabledUpdated","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":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Buyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Buyers","type":"uint256"}],"name":"setMarketingFee4Buyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","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
60c06040526009600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600a81526020017f534f555448205041524b00000000000000000000000000000000000000000000815250600190805190602001906200006d92919062000711565b506040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000bb92919062000711565b50600060149054906101000a900460ff1660ff16600a620000dd919062000903565b64e8d4a51000620000ef919062000a40565b600355600060045560045460055560055460065560096007556007546008556008546009556009600a556000600b556001600c60006101000a81548160ff0219169083151502179055506200017060646200015c6001600354620006c860201b620022141790919060201c565b620006c860201b620022141790919060201c565b600d55620001aa6064620001966064600354620006c860201b620022141790919060201c565b620006c860201b620022141790919060201c565b600e5573e3f5594e28e0c5311d8af9320e739cfe5fbfb9de600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035460001962000214919062000b50565b60001962000223919062000aa1565b6017556001601860016101000a81548160ff0219169083151502179055503480156200024e57600080fd5b506200025f620006e060201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36017546010600062000330620006e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ce57600080fd5b505afa158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004099190620007d8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046c57600080fd5b505afa15801562000481573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a79190620007d8565b6040518363ffffffff1660e01b8152600401620004c692919062000826565b602060405180830381600087803b158015620004e157600080fd5b505af1158015620004f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051c9190620007d8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001601360006200059f620006e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000658620006e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051620006b9919062000853565b60405180910390a35062000c3c565b60008183620006d8919062000870565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200071f9062000b1a565b90600052602060002090601f0160209004810192826200074357600085556200078f565b82601f106200075e57805160ff19168380011785556200078f565b828001600101855582156200078f579182015b828111156200078e57825182559160200191906001019062000771565b5b5090506200079e9190620007a2565b5090565b5b80821115620007bd576000816000905550600101620007a3565b5090565b600081519050620007d28162000c22565b92915050565b600060208284031215620007eb57600080fd5b6000620007fb84828501620007c1565b91505092915050565b6200080f8162000adc565b82525050565b620008208162000b10565b82525050565b60006040820190506200083d600083018562000804565b6200084c602083018462000804565b9392505050565b60006020820190506200086a600083018462000815565b92915050565b60006200087d8262000b10565b91506200088a8362000b10565b9250826200089d576200089c62000bb7565b5b828204905092915050565b6000808291508390505b6001851115620008fa57808604811115620008d257620008d162000b88565b5b6001851615620008e25780820291505b8081029050620008f28562000c15565b9450620008b2565b94509492505050565b6000620009108262000b10565b91506200091d8362000b10565b92506200094c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000954565b905092915050565b60008262000966576001905062000a39565b8162000976576000905062000a39565b81600181146200098f57600281146200099a57620009d0565b600191505062000a39565b60ff841115620009af57620009ae62000b88565b5b8360020a915084821115620009c957620009c862000b88565b5b5062000a39565b5060208310610133831016604e8410600b841016171562000a0a5782820a90508381111562000a045762000a0362000b88565b5b62000a39565b62000a198484846001620008a8565b9250905081840481111562000a335762000a3262000b88565b5b81810290505b9392505050565b600062000a4d8262000b10565b915062000a5a8362000b10565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a965762000a9562000b88565b5b828202905092915050565b600062000aae8262000b10565b915062000abb8362000b10565b92508282101562000ad15762000ad062000b88565b5b828203905092915050565b600062000ae98262000af0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000b3357607f821691505b6020821081141562000b4a5762000b4962000be6565b5b50919050565b600062000b5d8262000b10565b915062000b6a8362000b10565b92508262000b7d5762000b7c62000bb7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000c2d8162000adc565b811462000c3957600080fd5b50565b60805160601c60a05160601c614e6a62000c8b600039600081816114b80152818161262a0152612bf7015260008181610b2f0152818161297c01528181612a920152612ab90152614e6a6000f3fe60806040526004361061026b5760003560e01c806370a0823111610144578063a457c2d7116100b6578063cba851b31161007a578063cba851b314610967578063d54994db14610992578063dab522a8146109bb578063dd62ed3e146109e4578063ea2f0b3714610a21578063f2fde38b14610a4a57610272565b8063a457c2d71461086c578063a9059cbb146108a9578063af7671cc146108e6578063bc951f9814610911578063c537bd8f1461093c57610272565b80638da5cb5b116101085780638da5cb5b1461076c57806395d89b41146107975780639f646214146107c2578063a062e3ba146107ed578063a08f676014610818578063a38644301461084157610272565b806370a0823114610685578063715018a6146106c257806375f0a874146106d95780637d1db4a51461070457806388f820201461072f57610272565b8063313ce567116101dd5780634549b039116101a15780634549b0391461056557806349bd5a5e146105a257806352390c02146105cd5780635342acb4146105f657806357e0a1d0146106335780636b5afb501461065c57610272565b8063313ce567146104805780633685d419146104ab57806339509351146104d45780633b124fe714610511578063437823ec1461053c57610272565b80631bbae6e01161022f5780631bbae6e0146103605780631ff53b601461038957806322976e0d146103b257806323b872dd146103dd5780632663236f1461041a5780632d8381191461044357610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a73565b6040516102999190614533565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614155565b610b05565b6040516102d691906144fd565b60405180910390f35b3480156102eb57600080fd5b506102f4610b23565b60405161030191906146b5565b60405180910390f35b34801561031657600080fd5b5061031f610b2d565b60405161032c9190614518565b60405180910390f35b34801561034157600080fd5b5061034a610b51565b60405161035791906146b5565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906141ba565b610b5b565b005b34801561039557600080fd5b506103b060048036038101906103ab91906140a1565b610be1565b005b3480156103be57600080fd5b506103c7610ca1565b6040516103d491906146b5565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614106565b610ca7565b60405161041191906144fd565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614191565b610d80565b005b34801561044f57600080fd5b5061046a600480360381019061046591906141ba565b610e50565b60405161047791906146b5565b60405180910390f35b34801561048c57600080fd5b50610495610ebe565b6040516104a2919061472a565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd919061404f565b610ed4565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190614155565b6112a2565b60405161050891906144fd565b60405180910390f35b34801561051d57600080fd5b50610526611355565b60405161053391906146b5565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061404f565b61135b565b005b34801561057157600080fd5b5061058c600480360381019061058791906141e3565b611432565b60405161059991906146b5565b60405180910390f35b3480156105ae57600080fd5b506105b76114b6565b6040516105c491906144c7565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef919061404f565b6114da565b005b34801561060257600080fd5b5061061d6004803603810190610618919061404f565b611775565b60405161062a91906144fd565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614191565b6117cb565b005b34801561066857600080fd5b50610683600480360381019061067e91906141ba565b611864565b005b34801561069157600080fd5b506106ac60048036038101906106a7919061404f565b6118ea565b6040516106b991906146b5565b60405180910390f35b3480156106ce57600080fd5b506106d76119d5565b005b3480156106e557600080fd5b506106ee611b0f565b6040516106fb91906144e2565b60405180910390f35b34801561071057600080fd5b50610719611b35565b60405161072691906146b5565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061404f565b611b3b565b60405161076391906144fd565b60405180910390f35b34801561077857600080fd5b50610781611b91565b60405161078e91906144c7565b60405180910390f35b3480156107a357600080fd5b506107ac611bba565b6040516107b99190614533565b60405180910390f35b3480156107ce57600080fd5b506107d7611c4c565b6040516107e491906146b5565b60405180910390f35b3480156107f957600080fd5b50610802611c52565b60405161080f91906144fd565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906141ba565b611c65565b005b34801561084d57600080fd5b50610856611ceb565b60405161086391906146b5565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614155565b611cf1565b6040516108a091906144fd565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614155565b611dbe565b6040516108dd91906144fd565b60405180910390f35b3480156108f257600080fd5b506108fb611ddc565b60405161090891906146b5565b60405180910390f35b34801561091d57600080fd5b50610926611de2565b60405161093391906146b5565b60405180910390f35b34801561094857600080fd5b50610951611de8565b60405161095e91906144fd565b60405180910390f35b34801561097357600080fd5b5061097c611dfb565b60405161098991906146b5565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b491906141ba565b611e01565b005b3480156109c757600080fd5b506109e260048036038101906109dd91906141ba565b611e87565b005b3480156109f057600080fd5b50610a0b6004803603810190610a0691906140ca565b611f0d565b604051610a1891906146b5565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a43919061404f565b611f94565b005b348015610a5657600080fd5b50610a716004803603810190610a6c919061404f565b61206b565b005b606060018054610a829061497f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aae9061497f565b8015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b19610b1261222a565b8484612232565b6001905092915050565b6000601654905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b610b6361222a565b73ffffffffffffffffffffffffffffffffffffffff16610b81611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90614635565b60405180910390fd5b80600d8190555050565b610be961222a565b73ffffffffffffffffffffffffffffffffffffffff16610c07611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614635565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610cb48484846123fd565b610d7584610cc061222a565b610d7085604051806060016040528060288152602001614de860289139601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d2661222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127849092919063ffffffff16565b612232565b600190509392505050565b610d8861222a565b73ffffffffffffffffffffffffffffffffffffffff16610da6611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614635565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610e4591906144fd565b60405180910390a150565b6000601754821115610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614575565b60405180910390fd5b6000610ea16127d9565b9050610eb6818461221490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610edc61222a565b73ffffffffffffffffffffffffffffffffffffffff16610efa611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614635565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906145d5565b60405180910390fd5b60005b60158054905081101561129e578173ffffffffffffffffffffffffffffffffffffffff166015828154811061103d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128b5760156001601580549050611098919061487b565b815481106110cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660158281548110611134577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015805480611251577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561129e565b8080611296906149b1565b915050610fdf565b5050565b600061134b6112af61222a565b8461134685601260006112c061222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b612232565b6001905092915050565b60055481565b61136361222a565b73ffffffffffffffffffffffffffffffffffffffff16611381611b91565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90614635565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906145f5565b60405180910390fd5b816114995760006114898461281a565b50505050509050809150506114b0565b60006114a48461281a565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6114e261222a565b73ffffffffffffffffffffffffffffffffffffffff16611500611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614635565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da906145d5565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116b757611673601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e50565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117d361222a565b73ffffffffffffffffffffffffffffffffffffffff166117f1611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614635565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b61186c61222a565b73ffffffffffffffffffffffffffffffffffffffff1661188a611b91565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790614635565b60405180910390fd5b80600b8190555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e50565b90505b919050565b6119dd61222a565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611bc99061497f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf59061497f565b8015611c425780601f10611c1757610100808354040283529160200191611c42565b820191906000526020600020905b815481529060010190602001808311611c2557829003601f168201915b5050505050905090565b60075481565b601860019054906101000a900460ff1681565b611c6d61222a565b73ffffffffffffffffffffffffffffffffffffffff16611c8b611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614635565b60405180910390fd5b80600a8190555050565b600e5481565b6000611db4611cfe61222a565b84611daf85604051806060016040528060258152602001614e106025913960126000611d2861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127849092919063ffffffff16565b612232565b6001905092915050565b6000611dd2611dcb61222a565b84846123fd565b6001905092915050565b600b5481565b600a5481565b600c60009054906101000a900460ff1681565b60045481565b611e0961222a565b73ffffffffffffffffffffffffffffffffffffffff16611e27611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490614635565b60405180910390fd5b8060078190555050565b611e8f61222a565b73ffffffffffffffffffffffffffffffffffffffff16611ead611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614635565b60405180910390fd5b80600e8190555050565b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f9c61222a565b73ffffffffffffffffffffffffffffffffffffffff16611fba611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614635565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61207361222a565b73ffffffffffffffffffffffffffffffffffffffff16612091611b91565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818361222291906147f0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614695565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612309906145b5565b60405180910390fd5b80601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f091906146b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614555565b60405180910390fd5b60008111612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614655565b60405180910390fd5b612528611b91565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125965750612566611b91565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125e157600d548111156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614615565b60405180910390fd5b5b60006125ec306118ea565b90506000600e548210159050600d54821061260757600d5491505b8080156126215750601860009054906101000a900460ff16155b801561267957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126915750601860019054906101000a900460ff165b156126a05761269f82612876565b5b600c60009054906101000a900460ff16156126bf576126be84612be3565b5b600060019050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127665750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561277057600090505b61277c86868684612c63565b505050505050565b60008383111582906127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c39190614533565b60405180910390fd5b5082840390509392505050565b60008060006127e6612f74565b915091506127fd818361221490919063ffffffff16565b9250505090565b60008183612812919061479a565b905092915050565b60008060008060008060008060006128318a6132bf565b925092509250600080600061284f8d868661284a6127d9565b613319565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156129025781602001602082028036833780820191505090505b5090503081600081518110612940577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129e057600080fd5b505afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a189190614078565b81600181518110612a52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ab7307f000000000000000000000000000000000000000000000000000000000000000084612232565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b199594939291906146d0565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b5050505060004790506000811115612bc357600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612bc1573d6000803e3d6000fd5b505b50506000601860006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c6057600b54600a54612c59919061479a565b6008819055505b50565b80612c7157612c706133a2565b5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2957612d248484846133e5565b612f60565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dcc5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de157612ddc848484613645565b612f5f565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e855750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9a57612e958484846138a5565b612f5e565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f5157612f4c848484613a70565b612f5d565b612f5c8484846138a5565b5b5b5b5b80612f6e57612f6d613d65565b5b50505050565b600080600060175490506000600354905060005b60158054905081101561328257826010600060158481548110612fd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130e85750816011600060158481548110613080577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156130ff57601754600354945094505050506132bb565b6131b56010600060158481548110613140577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613d7990919063ffffffff16565b925061326d60116000601584815481106131f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d7990919063ffffffff16565b9150808061327a906149b1565b915050612f88565b5061329a60035460175461221490919063ffffffff16565b8210156132b2576017546003549350935050506132bb565b81819350935050505b9091565b6000806000806132ce85613d8f565b905060006132db86613dc0565b90506000613304826132f6858a613d7990919063ffffffff16565b613d7990919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806133328589613df190919063ffffffff16565b905060006133498689613df190919063ffffffff16565b905060006133608789613df190919063ffffffff16565b905060006133898261337b8587613d7990919063ffffffff16565b613d7990919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156133b657506000600854145b156133c0576133e3565b600554600681905550600854600981905550600060058190555060006008819055505b565b6000806000806000806133f78761281a565b95509550955095509550955061345587601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ea86601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357f85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135cb81613e07565b6135d58483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161363291906146b5565b60405180910390a3505050505050505050565b6000806000806000806136578761281a565b9550955095509550955095506136b586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374a83601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137df85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061382b81613e07565b6138358483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161389291906146b5565b60405180910390a3505050505050505050565b6000806000806000806138b78761281a565b95509550955095509550955061391586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139aa85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f681613e07565b613a008483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a5d91906146b5565b60405180910390a3505050505050505050565b600080600080600080613a828761281a565b955095509550955095509550613ae087601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0a83601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9f85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ceb81613e07565b613cf58483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d5291906146b5565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613d87919061487b565b905092915050565b6000613db96064613dab60055485613df190919063ffffffff16565b61221490919063ffffffff16565b9050919050565b6000613dea6064613ddc60085485613df190919063ffffffff16565b61221490919063ffffffff16565b9050919050565b60008183613dff9190614821565b905092915050565b6000613e116127d9565b90506000613e288284613df190919063ffffffff16565b9050613e7c81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fa757613f6383601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613fc182601754613d7990919063ffffffff16565b601781905550613fdc8160165461280490919063ffffffff16565b6016819055505050565b600081359050613ff581614d8b565b92915050565b60008151905061400a81614d8b565b92915050565b60008135905061401f81614da2565b92915050565b60008135905061403481614db9565b92915050565b60008135905061404981614dd0565b92915050565b60006020828403121561406157600080fd5b600061406f84828501613fe6565b91505092915050565b60006020828403121561408a57600080fd5b600061409884828501613ffb565b91505092915050565b6000602082840312156140b357600080fd5b60006140c184828501614010565b91505092915050565b600080604083850312156140dd57600080fd5b60006140eb85828601613fe6565b92505060206140fc85828601613fe6565b9150509250929050565b60008060006060848603121561411b57600080fd5b600061412986828701613fe6565b935050602061413a86828701613fe6565b925050604061414b8682870161403a565b9150509250925092565b6000806040838503121561416857600080fd5b600061417685828601613fe6565b92505060206141878582860161403a565b9150509250929050565b6000602082840312156141a357600080fd5b60006141b184828501614025565b91505092915050565b6000602082840312156141cc57600080fd5b60006141da8482850161403a565b91505092915050565b600080604083850312156141f657600080fd5b60006142048582860161403a565b925050602061421585828601614025565b9150509250929050565b600061422b8383614246565b60208301905092915050565b614240816148c1565b82525050565b61424f816148af565b82525050565b61425e816148af565b82525050565b600061426f82614755565b6142798185614778565b935061428483614745565b8060005b838110156142b557815161429c888261421f565b97506142a78361476b565b925050600181019050614288565b5085935050505092915050565b6142cb816148d3565b82525050565b6142da81614916565b82525050565b6142e98161493a565b82525050565b60006142fa82614760565b6143048185614789565b935061431481856020860161494c565b61431d81614a87565b840191505092915050565b6000614335602383614789565b915061434082614a98565b604082019050919050565b6000614358602a83614789565b915061436382614ae7565b604082019050919050565b600061437b602683614789565b915061438682614b36565b604082019050919050565b600061439e602283614789565b91506143a982614b85565b604082019050919050565b60006143c1601b83614789565b91506143cc82614bd4565b602082019050919050565b60006143e4601f83614789565b91506143ef82614bfd565b602082019050919050565b6000614407602883614789565b915061441282614c26565b604082019050919050565b600061442a602083614789565b915061443582614c75565b602082019050919050565b600061444d602983614789565b915061445882614c9e565b604082019050919050565b6000614470602583614789565b915061447b82614ced565b604082019050919050565b6000614493602483614789565b915061449e82614d3c565b604082019050919050565b6144b2816148ff565b82525050565b6144c181614909565b82525050565b60006020820190506144dc6000830184614255565b92915050565b60006020820190506144f76000830184614237565b92915050565b600060208201905061451260008301846142c2565b92915050565b600060208201905061452d60008301846142d1565b92915050565b6000602082019050818103600083015261454d81846142ef565b905092915050565b6000602082019050818103600083015261456e81614328565b9050919050565b6000602082019050818103600083015261458e8161434b565b9050919050565b600060208201905081810360008301526145ae8161436e565b9050919050565b600060208201905081810360008301526145ce81614391565b9050919050565b600060208201905081810360008301526145ee816143b4565b9050919050565b6000602082019050818103600083015261460e816143d7565b9050919050565b6000602082019050818103600083015261462e816143fa565b9050919050565b6000602082019050818103600083015261464e8161441d565b9050919050565b6000602082019050818103600083015261466e81614440565b9050919050565b6000602082019050818103600083015261468e81614463565b9050919050565b600060208201905081810360008301526146ae81614486565b9050919050565b60006020820190506146ca60008301846144a9565b92915050565b600060a0820190506146e560008301886144a9565b6146f260208301876142e0565b81810360408301526147048186614264565b90506147136060830185614255565b61472060808301846144a9565b9695505050505050565b600060208201905061473f60008301846144b8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006147a5826148ff565b91506147b0836148ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e5576147e46149fa565b5b828201905092915050565b60006147fb826148ff565b9150614806836148ff565b92508261481657614815614a29565b5b828204905092915050565b600061482c826148ff565b9150614837836148ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148705761486f6149fa565b5b828202905092915050565b6000614886826148ff565b9150614891836148ff565b9250828210156148a4576148a36149fa565b5b828203905092915050565b60006148ba826148df565b9050919050565b60006148cc826148df565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061492182614928565b9050919050565b6000614933826148df565b9050919050565b6000614945826148ff565b9050919050565b60005b8381101561496a57808201518184015260208101905061494f565b83811115614979576000848401525b50505050565b6000600282049050600182168061499757607f821691505b602082108114156149ab576149aa614a58565b5b50919050565b60006149bc826148ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149ef576149ee6149fa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614d94816148af565b8114614d9f57600080fd5b50565b614dab816148c1565b8114614db657600080fd5b50565b614dc2816148d3565b8114614dcd57600080fd5b50565b614dd9816148ff565b8114614de457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220977f6acc4d0a02cf7003cd62aefc6a340b007b38f65c6178f09aa881e3d6518c64736f6c63430008030033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c806370a0823111610144578063a457c2d7116100b6578063cba851b31161007a578063cba851b314610967578063d54994db14610992578063dab522a8146109bb578063dd62ed3e146109e4578063ea2f0b3714610a21578063f2fde38b14610a4a57610272565b8063a457c2d71461086c578063a9059cbb146108a9578063af7671cc146108e6578063bc951f9814610911578063c537bd8f1461093c57610272565b80638da5cb5b116101085780638da5cb5b1461076c57806395d89b41146107975780639f646214146107c2578063a062e3ba146107ed578063a08f676014610818578063a38644301461084157610272565b806370a0823114610685578063715018a6146106c257806375f0a874146106d95780637d1db4a51461070457806388f820201461072f57610272565b8063313ce567116101dd5780634549b039116101a15780634549b0391461056557806349bd5a5e146105a257806352390c02146105cd5780635342acb4146105f657806357e0a1d0146106335780636b5afb501461065c57610272565b8063313ce567146104805780633685d419146104ab57806339509351146104d45780633b124fe714610511578063437823ec1461053c57610272565b80631bbae6e01161022f5780631bbae6e0146103605780631ff53b601461038957806322976e0d146103b257806323b872dd146103dd5780632663236f1461041a5780632d8381191461044357610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a73565b6040516102999190614533565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614155565b610b05565b6040516102d691906144fd565b60405180910390f35b3480156102eb57600080fd5b506102f4610b23565b60405161030191906146b5565b60405180910390f35b34801561031657600080fd5b5061031f610b2d565b60405161032c9190614518565b60405180910390f35b34801561034157600080fd5b5061034a610b51565b60405161035791906146b5565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906141ba565b610b5b565b005b34801561039557600080fd5b506103b060048036038101906103ab91906140a1565b610be1565b005b3480156103be57600080fd5b506103c7610ca1565b6040516103d491906146b5565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614106565b610ca7565b60405161041191906144fd565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614191565b610d80565b005b34801561044f57600080fd5b5061046a600480360381019061046591906141ba565b610e50565b60405161047791906146b5565b60405180910390f35b34801561048c57600080fd5b50610495610ebe565b6040516104a2919061472a565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd919061404f565b610ed4565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190614155565b6112a2565b60405161050891906144fd565b60405180910390f35b34801561051d57600080fd5b50610526611355565b60405161053391906146b5565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061404f565b61135b565b005b34801561057157600080fd5b5061058c600480360381019061058791906141e3565b611432565b60405161059991906146b5565b60405180910390f35b3480156105ae57600080fd5b506105b76114b6565b6040516105c491906144c7565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef919061404f565b6114da565b005b34801561060257600080fd5b5061061d6004803603810190610618919061404f565b611775565b60405161062a91906144fd565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614191565b6117cb565b005b34801561066857600080fd5b50610683600480360381019061067e91906141ba565b611864565b005b34801561069157600080fd5b506106ac60048036038101906106a7919061404f565b6118ea565b6040516106b991906146b5565b60405180910390f35b3480156106ce57600080fd5b506106d76119d5565b005b3480156106e557600080fd5b506106ee611b0f565b6040516106fb91906144e2565b60405180910390f35b34801561071057600080fd5b50610719611b35565b60405161072691906146b5565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061404f565b611b3b565b60405161076391906144fd565b60405180910390f35b34801561077857600080fd5b50610781611b91565b60405161078e91906144c7565b60405180910390f35b3480156107a357600080fd5b506107ac611bba565b6040516107b99190614533565b60405180910390f35b3480156107ce57600080fd5b506107d7611c4c565b6040516107e491906146b5565b60405180910390f35b3480156107f957600080fd5b50610802611c52565b60405161080f91906144fd565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a91906141ba565b611c65565b005b34801561084d57600080fd5b50610856611ceb565b60405161086391906146b5565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614155565b611cf1565b6040516108a091906144fd565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614155565b611dbe565b6040516108dd91906144fd565b60405180910390f35b3480156108f257600080fd5b506108fb611ddc565b60405161090891906146b5565b60405180910390f35b34801561091d57600080fd5b50610926611de2565b60405161093391906146b5565b60405180910390f35b34801561094857600080fd5b50610951611de8565b60405161095e91906144fd565b60405180910390f35b34801561097357600080fd5b5061097c611dfb565b60405161098991906146b5565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b491906141ba565b611e01565b005b3480156109c757600080fd5b506109e260048036038101906109dd91906141ba565b611e87565b005b3480156109f057600080fd5b50610a0b6004803603810190610a0691906140ca565b611f0d565b604051610a1891906146b5565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a43919061404f565b611f94565b005b348015610a5657600080fd5b50610a716004803603810190610a6c919061404f565b61206b565b005b606060018054610a829061497f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aae9061497f565b8015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b19610b1261222a565b8484612232565b6001905092915050565b6000601654905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b610b6361222a565b73ffffffffffffffffffffffffffffffffffffffff16610b81611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90614635565b60405180910390fd5b80600d8190555050565b610be961222a565b73ffffffffffffffffffffffffffffffffffffffff16610c07611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614635565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610cb48484846123fd565b610d7584610cc061222a565b610d7085604051806060016040528060288152602001614de860289139601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d2661222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127849092919063ffffffff16565b612232565b600190509392505050565b610d8861222a565b73ffffffffffffffffffffffffffffffffffffffff16610da6611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614635565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610e4591906144fd565b60405180910390a150565b6000601754821115610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614575565b60405180910390fd5b6000610ea16127d9565b9050610eb6818461221490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610edc61222a565b73ffffffffffffffffffffffffffffffffffffffff16610efa611b91565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614635565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906145d5565b60405180910390fd5b60005b60158054905081101561129e578173ffffffffffffffffffffffffffffffffffffffff166015828154811061103d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128b5760156001601580549050611098919061487b565b815481106110cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660158281548110611134577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015805480611251577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561129e565b8080611296906149b1565b915050610fdf565b5050565b600061134b6112af61222a565b8461134685601260006112c061222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b612232565b6001905092915050565b60055481565b61136361222a565b73ffffffffffffffffffffffffffffffffffffffff16611381611b91565b73ffffffffffffffffffffffffffffffffffffffff16146113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90614635565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906145f5565b60405180910390fd5b816114995760006114898461281a565b50505050509050809150506114b0565b60006114a48461281a565b50505050915050809150505b92915050565b7f00000000000000000000000045fc872d91a60a8a98fee4daca23ca0b78cd7b2d81565b6114e261222a565b73ffffffffffffffffffffffffffffffffffffffff16611500611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614635565b60405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da906145d5565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116b757611673601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e50565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117d361222a565b73ffffffffffffffffffffffffffffffffffffffff166117f1611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614635565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b61186c61222a565b73ffffffffffffffffffffffffffffffffffffffff1661188a611b91565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790614635565b60405180910390fd5b80600b8190555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198557601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119d0565b6119cd601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e50565b90505b919050565b6119dd61222a565b73ffffffffffffffffffffffffffffffffffffffff166119fb611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611bc99061497f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf59061497f565b8015611c425780601f10611c1757610100808354040283529160200191611c42565b820191906000526020600020905b815481529060010190602001808311611c2557829003601f168201915b5050505050905090565b60075481565b601860019054906101000a900460ff1681565b611c6d61222a565b73ffffffffffffffffffffffffffffffffffffffff16611c8b611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614635565b60405180910390fd5b80600a8190555050565b600e5481565b6000611db4611cfe61222a565b84611daf85604051806060016040528060258152602001614e106025913960126000611d2861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127849092919063ffffffff16565b612232565b6001905092915050565b6000611dd2611dcb61222a565b84846123fd565b6001905092915050565b600b5481565b600a5481565b600c60009054906101000a900460ff1681565b60045481565b611e0961222a565b73ffffffffffffffffffffffffffffffffffffffff16611e27611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7490614635565b60405180910390fd5b8060078190555050565b611e8f61222a565b73ffffffffffffffffffffffffffffffffffffffff16611ead611b91565b73ffffffffffffffffffffffffffffffffffffffff1614611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90614635565b60405180910390fd5b80600e8190555050565b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f9c61222a565b73ffffffffffffffffffffffffffffffffffffffff16611fba611b91565b73ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614635565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61207361222a565b73ffffffffffffffffffffffffffffffffffffffff16612091611b91565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614635565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818361222291906147f0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614695565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612309906145b5565b60405180910390fd5b80601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f091906146b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614555565b60405180910390fd5b60008111612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614655565b60405180910390fd5b612528611b91565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125965750612566611b91565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125e157600d548111156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614615565b60405180910390fd5b5b60006125ec306118ea565b90506000600e548210159050600d54821061260757600d5491505b8080156126215750601860009054906101000a900460ff16155b801561267957507f00000000000000000000000045fc872d91a60a8a98fee4daca23ca0b78cd7b2d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126915750601860019054906101000a900460ff165b156126a05761269f82612876565b5b600c60009054906101000a900460ff16156126bf576126be84612be3565b5b600060019050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127665750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561277057600090505b61277c86868684612c63565b505050505050565b60008383111582906127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c39190614533565b60405180910390fd5b5082840390509392505050565b60008060006127e6612f74565b915091506127fd818361221490919063ffffffff16565b9250505090565b60008183612812919061479a565b905092915050565b60008060008060008060008060006128318a6132bf565b925092509250600080600061284f8d868661284a6127d9565b613319565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156129025781602001602082028036833780820191505090505b5090503081600081518110612940577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129e057600080fd5b505afa1580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a189190614078565b81600181518110612a52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ab7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612232565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b199594939291906146d0565b600060405180830381600087803b158015612b3357600080fd5b505af1158015612b47573d6000803e3d6000fd5b5050505060004790506000811115612bc357600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612bc1573d6000803e3d6000fd5b505b50506000601860006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f00000000000000000000000045fc872d91a60a8a98fee4daca23ca0b78cd7b2d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c6057600b54600a54612c59919061479a565b6008819055505b50565b80612c7157612c706133a2565b5b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d145750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2957612d248484846133e5565b612f60565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dcc5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de157612ddc848484613645565b612f5f565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e855750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9a57612e958484846138a5565b612f5e565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f5157612f4c848484613a70565b612f5d565b612f5c8484846138a5565b5b5b5b5b80612f6e57612f6d613d65565b5b50505050565b600080600060175490506000600354905060005b60158054905081101561328257826010600060158481548110612fd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130e85750816011600060158481548110613080577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156130ff57601754600354945094505050506132bb565b6131b56010600060158481548110613140577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613d7990919063ffffffff16565b925061326d60116000601584815481106131f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d7990919063ffffffff16565b9150808061327a906149b1565b915050612f88565b5061329a60035460175461221490919063ffffffff16565b8210156132b2576017546003549350935050506132bb565b81819350935050505b9091565b6000806000806132ce85613d8f565b905060006132db86613dc0565b90506000613304826132f6858a613d7990919063ffffffff16565b613d7990919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806133328589613df190919063ffffffff16565b905060006133498689613df190919063ffffffff16565b905060006133608789613df190919063ffffffff16565b905060006133898261337b8587613d7990919063ffffffff16565b613d7990919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156133b657506000600854145b156133c0576133e3565b600554600681905550600854600981905550600060058190555060006008819055505b565b6000806000806000806133f78761281a565b95509550955095509550955061345587601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ea86601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357f85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135cb81613e07565b6135d58483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161363291906146b5565b60405180910390a3505050505050505050565b6000806000806000806136578761281a565b9550955095509550955095506136b586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061374a83601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137df85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061382b81613e07565b6138358483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161389291906146b5565b60405180910390a3505050505050505050565b6000806000806000806138b78761281a565b95509550955095509550955061391586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139aa85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f681613e07565b613a008483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a5d91906146b5565b60405180910390a3505050505050505050565b600080600080600080613a828761281a565b955095509550955095509550613ae087601160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7586601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7990919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0a83601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9f85601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ceb81613e07565b613cf58483613fac565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d5291906146b5565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613d87919061487b565b905092915050565b6000613db96064613dab60055485613df190919063ffffffff16565b61221490919063ffffffff16565b9050919050565b6000613dea6064613ddc60085485613df190919063ffffffff16565b61221490919063ffffffff16565b9050919050565b60008183613dff9190614821565b905092915050565b6000613e116127d9565b90506000613e288284613df190919063ffffffff16565b9050613e7c81601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fa757613f6383601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461280490919063ffffffff16565b601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613fc182601754613d7990919063ffffffff16565b601781905550613fdc8160165461280490919063ffffffff16565b6016819055505050565b600081359050613ff581614d8b565b92915050565b60008151905061400a81614d8b565b92915050565b60008135905061401f81614da2565b92915050565b60008135905061403481614db9565b92915050565b60008135905061404981614dd0565b92915050565b60006020828403121561406157600080fd5b600061406f84828501613fe6565b91505092915050565b60006020828403121561408a57600080fd5b600061409884828501613ffb565b91505092915050565b6000602082840312156140b357600080fd5b60006140c184828501614010565b91505092915050565b600080604083850312156140dd57600080fd5b60006140eb85828601613fe6565b92505060206140fc85828601613fe6565b9150509250929050565b60008060006060848603121561411b57600080fd5b600061412986828701613fe6565b935050602061413a86828701613fe6565b925050604061414b8682870161403a565b9150509250925092565b6000806040838503121561416857600080fd5b600061417685828601613fe6565b92505060206141878582860161403a565b9150509250929050565b6000602082840312156141a357600080fd5b60006141b184828501614025565b91505092915050565b6000602082840312156141cc57600080fd5b60006141da8482850161403a565b91505092915050565b600080604083850312156141f657600080fd5b60006142048582860161403a565b925050602061421585828601614025565b9150509250929050565b600061422b8383614246565b60208301905092915050565b614240816148c1565b82525050565b61424f816148af565b82525050565b61425e816148af565b82525050565b600061426f82614755565b6142798185614778565b935061428483614745565b8060005b838110156142b557815161429c888261421f565b97506142a78361476b565b925050600181019050614288565b5085935050505092915050565b6142cb816148d3565b82525050565b6142da81614916565b82525050565b6142e98161493a565b82525050565b60006142fa82614760565b6143048185614789565b935061431481856020860161494c565b61431d81614a87565b840191505092915050565b6000614335602383614789565b915061434082614a98565b604082019050919050565b6000614358602a83614789565b915061436382614ae7565b604082019050919050565b600061437b602683614789565b915061438682614b36565b604082019050919050565b600061439e602283614789565b91506143a982614b85565b604082019050919050565b60006143c1601b83614789565b91506143cc82614bd4565b602082019050919050565b60006143e4601f83614789565b91506143ef82614bfd565b602082019050919050565b6000614407602883614789565b915061441282614c26565b604082019050919050565b600061442a602083614789565b915061443582614c75565b602082019050919050565b600061444d602983614789565b915061445882614c9e565b604082019050919050565b6000614470602583614789565b915061447b82614ced565b604082019050919050565b6000614493602483614789565b915061449e82614d3c565b604082019050919050565b6144b2816148ff565b82525050565b6144c181614909565b82525050565b60006020820190506144dc6000830184614255565b92915050565b60006020820190506144f76000830184614237565b92915050565b600060208201905061451260008301846142c2565b92915050565b600060208201905061452d60008301846142d1565b92915050565b6000602082019050818103600083015261454d81846142ef565b905092915050565b6000602082019050818103600083015261456e81614328565b9050919050565b6000602082019050818103600083015261458e8161434b565b9050919050565b600060208201905081810360008301526145ae8161436e565b9050919050565b600060208201905081810360008301526145ce81614391565b9050919050565b600060208201905081810360008301526145ee816143b4565b9050919050565b6000602082019050818103600083015261460e816143d7565b9050919050565b6000602082019050818103600083015261462e816143fa565b9050919050565b6000602082019050818103600083015261464e8161441d565b9050919050565b6000602082019050818103600083015261466e81614440565b9050919050565b6000602082019050818103600083015261468e81614463565b9050919050565b600060208201905081810360008301526146ae81614486565b9050919050565b60006020820190506146ca60008301846144a9565b92915050565b600060a0820190506146e560008301886144a9565b6146f260208301876142e0565b81810360408301526147048186614264565b90506147136060830185614255565b61472060808301846144a9565b9695505050505050565b600060208201905061473f60008301846144b8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006147a5826148ff565b91506147b0836148ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147e5576147e46149fa565b5b828201905092915050565b60006147fb826148ff565b9150614806836148ff565b92508261481657614815614a29565b5b828204905092915050565b600061482c826148ff565b9150614837836148ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148705761486f6149fa565b5b828202905092915050565b6000614886826148ff565b9150614891836148ff565b9250828210156148a4576148a36149fa565b5b828203905092915050565b60006148ba826148df565b9050919050565b60006148cc826148df565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061492182614928565b9050919050565b6000614933826148df565b9050919050565b6000614945826148ff565b9050919050565b60005b8381101561496a57808201518184015260208101905061494f565b83811115614979576000848401525b50505050565b6000600282049050600182168061499757607f821691505b602082108114156149ab576149aa614a58565b5b50919050565b60006149bc826148ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149ef576149ee6149fa565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614d94816148af565b8114614d9f57600080fd5b50565b614dab816148c1565b8114614db657600080fd5b50565b614dc2816148d3565b8114614dcd57600080fd5b50565b614dd9816148ff565b8114614de457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220977f6acc4d0a02cf7003cd62aefc6a340b007b38f65c6178f09aa881e3d6518c64736f6c63430008030033
Deployed Bytecode Sourcemap
28503:17402:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31029:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31941:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33062:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30001:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31306:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45790:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45665:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29014:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32110:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45295:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33601:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31215:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34317:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32431:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28866:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34804:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33157:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30059:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33862:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38269:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45166:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45011:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31409:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19961:148;;;;;;;;;;;;;:::i;:::-;;29419:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29278:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32934:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19318:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28969:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30131:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44856:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29338:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32657:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31615:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29180:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29133:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29228:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28827:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44720:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45467:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31790:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34925:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20261:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31029:83;31066:13;31099:5;31092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31029:83;:::o;31941:161::-;32016:4;32033:39;32042:12;:10;:12::i;:::-;32056:7;32065:6;32033:8;:39::i;:::-;32090:4;32083:11;;31941:161;;;;:::o;33062:87::-;33104:7;33131:10;;33124:17;;33062:87;:::o;30001:51::-;;;:::o;31306:95::-;31359:7;31386;;31379:14;;31306:95;:::o;45790:112::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45883:11:::1;45868:12;:26;;;;45790:112:::0;:::o;45665:117::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45768:6:::1;45750:15;;:24;;;;;;;;;;;;;;;;;;45665:117:::0;:::o;29014:50::-;;;;:::o;32110:313::-;32208:4;32225:36;32235:6;32243:9;32254:6;32225:9;:36::i;:::-;32272:121;32281:6;32289:12;:10;:12::i;:::-;32303:89;32341:6;32303:89;;;;;;;;;;;;;;;;;:11;:19;32315:6;32303:19;;;;;;;;;;;;;;;:33;32323:12;:10;:12::i;:::-;32303:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32272:8;:121::i;:::-;32411:4;32404:11;;32110:313;;;;;:::o;45295:164::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45392:8:::1;45371:18;;:29;;;;;;;;;;;;;;;;;;45416:35;45442:8;45416:35;;;;;;:::i;:::-;;;;;;;;45295:164:::0;:::o;33601:253::-;33667:7;33706;;33695;:18;;33687:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33771:19;33794:10;:8;:10::i;:::-;33771:33;;33822:24;33834:11;33822:7;:11;;:24;;;;:::i;:::-;33815:31;;;33601:253;;;:::o;31215:83::-;31256:5;31281:9;;;;;;;;;;;31274:16;;31215:83;:::o;34317:479::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34399:11:::1;:20;34411:7;34399:20;;;;;;;;;;;;;;;;;;;;;;;;;34391:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34467:9;34462:327;34486:9;:16;;;;34482:1;:20;34462:327;;;34544:7;34528:23;;:9;34538:1;34528:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;34524:254;;;34587:9;34616:1;34597:9;:16;;;;:20;;;;:::i;:::-;34587:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34572:9;34582:1;34572:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34656:1;34637:7;:16;34645:7;34637:16;;;;;;;;;;;;;;;:20;;;;34699:5;34676:11;:20;34688:7;34676:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34723:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34757:5;;34524:254;34504:3;;;;;:::i;:::-;;;;34462:327;;;;34317:479:::0;:::o;32431:218::-;32519:4;32536:83;32545:12;:10;:12::i;:::-;32559:7;32568:50;32607:10;32568:11;:25;32580:12;:10;:12::i;:::-;32568:25;;;;;;;;;;;;;;;:34;32594:7;32568:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32536:8;:83::i;:::-;32637:4;32630:11;;32431:218;;;;:::o;28866:38::-;;;;:::o;34804:113::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34905:4:::1;34875:18;:27;34894:7;34875:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34804:113:::0;:::o;33157:436::-;33247:7;33286;;33275;:18;;33267:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33345:17;33340:246;;33380:15;33404:19;33415:7;33404:10;:19::i;:::-;33379:44;;;;;;;33445:7;33438:14;;;;;33340:246;33487:23;33518:19;33529:7;33518:10;:19::i;:::-;33485:52;;;;;;;33559:15;33552:22;;;33157:436;;;;;:::o;30059:38::-;;;:::o;33862:447::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34059:11:::1;:20;34071:7;34059:20;;;;;;;;;;;;;;;;;;;;;;;;;34058:21;34050:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34144:1;34125:7;:16;34133:7;34125:16;;;;;;;;;;;;;;;;:20;34122:108;;;34181:37;34201:7;:16;34209:7;34201:16;;;;;;;;;;;;;;;;34181:19;:37::i;:::-;34162:7;:16;34170:7;34162:16;;;;;;;;;;;;;;;:56;;;;34122:108;34263:4;34240:11;:20;34252:7;34240:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34278:9;34293:7;34278:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33862:447:::0;:::o;38269:123::-;38333:4;38357:18;:27;38376:7;38357:27;;;;;;;;;;;;;;;;;;;;;;;;;38350:34;;38269:123;;;:::o;45166:121::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45271:8:::1;45246:22;;:33;;;;;;;;;;;;;;;;;;45166:121:::0;:::o;45011:143::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45127:19:::1;45104:20;:42;;;;45011:143:::0;:::o;31409:198::-;31475:7;31499:11;:20;31511:7;31499:20;;;;;;;;;;;;;;;;;;;;;;;;;31495:49;;;31528:7;:16;31536:7;31528:16;;;;;;;;;;;;;;;;31521:23;;;;31495:49;31562:37;31582:7;:16;31590:7;31582:16;;;;;;;;;;;;;;;;31562:19;:37::i;:::-;31555:44;;31409:198;;;;:::o;19961:148::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20068:1:::1;20031:40;;20052:6;::::0;::::1;;;;;;;;20031:40;;;;;;;;;;;;20099:1;20082:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19961:148::o:0;29419:92::-;;;;;;;;;;;;;:::o;29278:53::-;;;;:::o;32934:120::-;33002:4;33026:11;:20;33038:7;33026:20;;;;;;;;;;;;;;;;;;;;;;;;;33019:27;;32934:120;;;:::o;19318:87::-;19364:7;19391:6;;;;;;;;;;;19384:13;;19318:87;:::o;31120:::-;31159:13;31192:7;31185:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31120:87;:::o;28969:38::-;;;;:::o;30131:37::-;;;;;;;;;;;;;:::o;44856:147::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44975:20:::1;44951:21;:44;;;;44856:147:::0;:::o;29338:74::-;;;;:::o;32657:269::-;32750:4;32767:129;32776:12;:10;:12::i;:::-;32790:7;32799:96;32838:15;32799:96;;;;;;;;;;;;;;;;;:11;:25;32811:12;:10;:12::i;:::-;32799:25;;;;;;;;;;;;;;;:34;32825:7;32799:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32767:8;:129::i;:::-;32914:4;32907:11;;32657:269;;;;:::o;31615:167::-;31693:4;31710:42;31720:12;:10;:12::i;:::-;31734:9;31745:6;31710:9;:42::i;:::-;31770:4;31763:11;;31615:167;;;;:::o;29180:39::-;;;;:::o;29133:40::-;;;;:::o;29228:41::-;;;;;;;;;;;;;:::o;28827:32::-;;;;:::o;44720:128::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44828:12:::1;44806:19;:34;;;;44720:128:::0;:::o;45467:190::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45617:32:::1;45583:31;:66;;;;45467:190:::0;:::o;31790:143::-;31871:7;31898:11;:18;31910:5;31898:18;;;;;;;;;;;;;;;:27;31917:7;31898:27;;;;;;;;;;;;;;;;31891:34;;31790:143;;;;:::o;34925:112::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35024:5:::1;34994:18;:27;35013:7;34994:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34925:112:::0;:::o;20261:244::-;19547:12;:10;:12::i;:::-;19536:23;;:7;:5;:7::i;:::-;:23;;;19528:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20370:1:::1;20350:22;;:8;:22;;;;20342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20460:8;20431:38;;20452:6;::::0;::::1;;;;;;;;20431:38;;;;;;;;;;;;20489:8;20480:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20261:244:::0;:::o;6517:98::-;6575:7;6606:1;6602;:5;;;;:::i;:::-;6595:12;;6517:98;;;;:::o;10157:::-;10210:7;10237:10;10230:17;;10157:98;:::o;38400:337::-;38510:1;38493:19;;:5;:19;;;;38485:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38591:1;38572:21;;:7;:21;;;;38564:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38675:6;38645:11;:18;38657:5;38645:18;;;;;;;;;;;;;;;:27;38664:7;38645:27;;;;;;;;;;;;;;;:36;;;;38713:7;38697:32;;38706:5;38697:32;;;38722:6;38697:32;;;;;;:::i;:::-;;;;;;;;38400:337;;;:::o;38745:1677::-;38883:1;38867:18;;:4;:18;;;;38859:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38960:1;38946:16;;:2;:16;;;;38938:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39030:1;39021:6;:10;39013:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39101:7;:5;:7::i;:::-;39093:15;;:4;:15;;;;:32;;;;;39118:7;:5;:7::i;:::-;39112:13;;:2;:13;;;;39093:32;39090:125;;;39158:12;;39148:6;:22;;39140:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39090:125;39503:28;39534:24;39552:4;39534:9;:24::i;:::-;39503:55;;39569:24;39620:31;;39596:20;:55;;39569:82;;39691:12;;39667:20;:36;39664:112;;39752:12;;39729:35;;39664:112;39806:19;:50;;;;;39843:13;;;;;;;;;;;39842:14;39806:50;:88;;;;;39881:13;39873:21;;:4;:21;;;;39806:88;:123;;;;;39911:18;;;;;;;;;;;39806:123;39788:213;;;39956:33;39968:20;39956:11;:33::i;:::-;39788:213;40016:22;;;;;;;;;;;40013:65;;;40055:11;40063:2;40055:7;:11::i;:::-;40013:65;40151:12;40166:4;40151:19;;40270:18;:24;40289:4;40270:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40298:18;:22;40317:2;40298:22;;;;;;;;;;;;;;;;;;;;;;;;;40270:50;40267:97;;;40347:5;40337:15;;40267:97;40376:38;40391:4;40396:2;40399:6;40406:7;40376:14;:38::i;:::-;38745:1677;;;;;;:::o;7636:206::-;7722:7;7780:1;7775;:6;;7783:12;7767:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7822:1;7818;:5;7811:12;;7636:206;;;;;:::o;36836:163::-;36877:7;36898:15;36915;36934:19;:17;:19::i;:::-;36897:56;;;;36971:20;36983:7;36971;:11;;:20;;;;:::i;:::-;36964:27;;;;36836:163;:::o;5407:98::-;5465:7;5496:1;5492;:5;;;;:::i;:::-;5485:12;;5407:98;;;;:::o;35634:419::-;35693:7;35702;35711;35720;35729;35738;35759:23;35784:12;35798:18;35820:20;35832:7;35820:11;:20::i;:::-;35758:82;;;;;;35852:15;35869:23;35894:12;35910:50;35922:7;35931:4;35937:10;35949;:8;:10::i;:::-;35910:11;:50::i;:::-;35851:109;;;;;;35979:7;35988:15;36005:4;36011:15;36028:4;36034:10;35971:74;;;;;;;;;;;;;;;;;;35634:419;;;;;;;:::o;40713:794::-;30279:4;30263:13;;:20;;;;;;;;;;;;;;;;;;40855:21:::1;40893:1;40879:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40855:40;;40924:4;40906;40911:1;40906:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;40950:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40940:4;40945:1;40940:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;40985:71;41002:4;41017:15;41035:20;40985:8;:71::i;:::-;41095:15;:66;;;41176:20;41211:1;41255:4;41282;41302:15;41095:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41341:26;41370:21;41341:50;;41426:1;41405:18;:22;41402:98;;;41444:15;;;;;;;;;;;:24;;:44;41469:18;41444:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41402:98;30294:1;;30322:5:::0;30306:13;;:21;;;;;;;;;;;;;;;;;;40713:794;:::o;40430:269::-;40495:13;;40485:7;:23;;;;40535:19;;40519:13;:35;;;;40582:13;40569:26;;:9;:26;;;40565:127;;;40660:20;;40636:21;;:44;;;;:::i;:::-;40620:13;:60;;;;40565:127;40430:269;:::o;41588:818::-;41699:7;41695:40;;41721:14;:12;:14::i;:::-;41695:40;41752:11;:19;41764:6;41752:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41776:11;:22;41788:9;41776:22;;;;;;;;;;;;;;;;;;;;;;;;;41775:23;41752:46;41748:597;;;41815:48;41837:6;41845:9;41856:6;41815:21;:48::i;:::-;41748:597;;;41886:11;:19;41898:6;41886:19;;;;;;;;;;;;;;;;;;;;;;;;;41885:20;:46;;;;;41909:11;:22;41921:9;41909:22;;;;;;;;;;;;;;;;;;;;;;;;;41885:46;41881:464;;;41948:46;41968:6;41976:9;41987:6;41948:19;:46::i;:::-;41881:464;;;42017:11;:19;42029:6;42017:19;;;;;;;;;;;;;;;;;;;;;;;;;42016:20;:47;;;;;42041:11;:22;42053:9;42041:22;;;;;;;;;;;;;;;;;;;;;;;;;42040:23;42016:47;42012:333;;;42080:44;42098:6;42106:9;42117:6;42080:17;:44::i;:::-;42012:333;;;42146:11;:19;42158:6;42146:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42169:11;:22;42181:9;42169:22;;;;;;;;;;;;;;;;;;;;;;;;;42146:45;42142:203;;;42208:48;42230:6;42238:9;42249:6;42208:21;:48::i;:::-;42142:203;;;42289:44;42307:6;42315:9;42326:6;42289:17;:44::i;:::-;42142:203;42012:333;41881:464;41748:597;42361:7;42357:41;;42383:15;:13;:15::i;:::-;42357:41;41588:818;;;;:::o;37007:555::-;37057:7;37066;37086:15;37104:7;;37086:25;;37122:15;37140:7;;37122:25;;37163:9;37158:289;37182:9;:16;;;;37178:1;:20;37158:289;;;37248:7;37224;:21;37232:9;37242:1;37232:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37224:21;;;;;;;;;;;;;;;;:31;:66;;;;37283:7;37259;:21;37267:9;37277:1;37267:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37259:21;;;;;;;;;;;;;;;;:31;37224:66;37220:97;;;37300:7;;37309;;37292:25;;;;;;;;;37220:97;37342:34;37354:7;:21;37362:9;37372:1;37362:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37354:21;;;;;;;;;;;;;;;;37342:7;:11;;:34;;;;:::i;:::-;37332:44;;37401:34;37413:7;:21;37421:9;37431:1;37421:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37413:21;;;;;;;;;;;;;;;;37401:7;:11;;:34;;;;:::i;:::-;37391:44;;37200:3;;;;;:::i;:::-;;;;37158:289;;;;37471:20;37483:7;;37471;;:11;;:20;;;;:::i;:::-;37461:7;:30;37457:61;;;37501:7;;37510;;37493:25;;;;;;;;37457:61;37537:7;37546;37529:25;;;;;;37007:555;;;:::o;36061:330::-;36121:7;36130;36139;36159:12;36174:24;36190:7;36174:15;:24::i;:::-;36159:39;;36209:18;36230:30;36252:7;36230:21;:30::i;:::-;36209:51;;36271:23;36297:33;36319:10;36297:17;36309:4;36297:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36271:59;;36349:15;36366:4;36372:10;36341:42;;;;;;;;;36061:330;;;;;:::o;36399:429::-;36514:7;36523;36532;36552:15;36570:24;36582:11;36570:7;:11;;:24;;;;:::i;:::-;36552:42;;36605:12;36620:21;36629:11;36620:4;:8;;:21;;;;:::i;:::-;36605:36;;36652:18;36673:27;36688:11;36673:10;:14;;:27;;;;:::i;:::-;36652:48;;36711:23;36737:33;36759:10;36737:17;36749:4;36737:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36711:59;;36789:7;36798:15;36815:4;36781:39;;;;;;;;;;36399:429;;;;;;;;:::o;35045:234::-;35102:1;35091:7;;:12;:34;;;;;35124:1;35107:13;;:18;35091:34;35088:46;;;35127:7;;35088:46;35164:7;;35146:15;:25;;;;35206:13;;35182:21;:37;;;;35242:1;35232:7;:11;;;;35270:1;35254:13;:17;;;;35045:234;:::o;43507:563::-;43610:15;43627:23;43652:12;43666:23;43691:12;43705:18;43727:19;43738:7;43727:10;:19::i;:::-;43609:137;;;;;;;;;;;;43775:28;43795:7;43775;:15;43783:6;43775:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43757:7;:15;43765:6;43757:15;;;;;;;;;;;;;;;:46;;;;43832:28;43852:7;43832;:15;43840:6;43832:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43814:7;:15;43822:6;43814:15;;;;;;;;;;;;;;;:46;;;;43892:39;43915:15;43892:7;:18;43900:9;43892:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43871:7;:18;43879:9;43871:18;;;;;;;;;;;;;;;:60;;;;43942:26;43957:10;43942:14;:26::i;:::-;43979:23;43991:4;43997;43979:11;:23::i;:::-;44035:9;44018:44;;44027:6;44018:44;;;44046:15;44018:44;;;;;;:::i;:::-;;;;;;;;43507:563;;;;;;;;;:::o;42924:575::-;43025:15;43042:23;43067:12;43081:23;43106:12;43120:18;43142:19;43153:7;43142:10;:19::i;:::-;43024:137;;;;;;;;;;;;43190:28;43210:7;43190;:15;43198:6;43190:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43172:7;:15;43180:6;43172:15;;;;;;;;;;;;;;;:46;;;;43250:39;43273:15;43250:7;:18;43258:9;43250:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43229:7;:18;43237:9;43229:18;;;;;;;;;;;;;;;:60;;;;43321:39;43344:15;43321:7;:18;43329:9;43321:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43300:7;:18;43308:9;43300:18;;;;;;;;;;;;;;;:60;;;;43371:26;43386:10;43371:14;:26::i;:::-;43408:23;43420:4;43426;43408:11;:23::i;:::-;43464:9;43447:44;;43456:6;43447:44;;;43475:15;43447:44;;;;;;:::i;:::-;;;;;;;;42924:575;;;;;;;;;:::o;42414:502::-;42513:15;42530:23;42555:12;42569:23;42594:12;42608:18;42630:19;42641:7;42630:10;:19::i;:::-;42512:137;;;;;;;;;;;;42678:28;42698:7;42678;:15;42686:6;42678:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42660:7;:15;42668:6;42660:15;;;;;;;;;;;;;;;:46;;;;42738:39;42761:15;42738:7;:18;42746:9;42738:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42717:7;:18;42725:9;42717:18;;;;;;;;;;;;;;;:60;;;;42788:26;42803:10;42788:14;:26::i;:::-;42825:23;42837:4;42843;42825:11;:23::i;:::-;42881:9;42864:44;;42873:6;42864:44;;;42892:15;42864:44;;;;;;:::i;:::-;;;;;;;;42414:502;;;;;;;;;:::o;44078:634::-;44181:15;44198:23;44223:12;44237:23;44262:12;44276:18;44298:19;44309:7;44298:10;:19::i;:::-;44180:137;;;;;;;;;;;;44346:28;44366:7;44346;:15;44354:6;44346:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44328:7;:15;44336:6;44328:15;;;;;;;;;;;;;;;:46;;;;44403:28;44423:7;44403;:15;44411:6;44403:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44385:7;:15;44393:6;44385:15;;;;;;;;;;;;;;;:46;;;;44463:39;44486:15;44463:7;:18;44471:9;44463:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44442:7;:18;44450:9;44442:18;;;;;;;;;;;;;;;:60;;;;44534:39;44557:15;44534:7;:18;44542:9;44534:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44513:7;:18;44521:9;44513:18;;;;;;;;;;;;;;;:60;;;;44584:26;44599:10;44584:14;:26::i;:::-;44621:23;44633:4;44639;44621:11;:23::i;:::-;44677:9;44660:44;;44669:6;44660:44;;;44688:15;44660:44;;;;;;:::i;:::-;;;;;;;;44078:634;;;;;;;;;:::o;35287:125::-;35341:15;;35331:7;:25;;;;35383:21;;35367:13;:37;;;;35287:125::o;5779:98::-;5837:7;5868:1;5864;:5;;;;:::i;:::-;5857:12;;5779:98;;;;:::o;37933:154::-;37997:7;38024:55;38063:5;38024:20;38036:7;;38024;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38017:62;;37933:154;;;:::o;38095:166::-;38165:7;38192:61;38237:5;38192:26;38204:13;;38192:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38185:68;;38095:166;;;:::o;6127:98::-;6185:7;6216:1;6212;:5;;;;:::i;:::-;6205:12;;6127:98;;;;:::o;37570:355::-;37633:19;37656:10;:8;:10::i;:::-;37633:33;;37677:18;37698:27;37713:11;37698:10;:14;;:27;;;;:::i;:::-;37677:48;;37761:38;37788:10;37761:7;:22;37777:4;37761:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37736:7;:22;37752:4;37736:22;;;;;;;;;;;;;;;:63;;;;37813:11;:26;37833:4;37813:26;;;;;;;;;;;;;;;;;;;;;;;;;37810:107;;;37879:38;37906:10;37879:7;:22;37895:4;37879:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37854:7;:22;37870:4;37854:22;;;;;;;;;;;;;;;:63;;;;37810:107;37570:355;;;:::o;35479:147::-;35557:17;35569:4;35557:7;;:11;;:17;;;;:::i;:::-;35547:7;:27;;;;35598:20;35613:4;35598:10;;:14;;:20;;;;:::i;:::-;35585:10;:33;;;;35479:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:139::-;;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;653:87;;;;:::o;746:262::-;;854:2;842:9;833:7;829:23;825:32;822:2;;;870:1;867;860:12;822:2;913:1;938:53;983:7;974:6;963:9;959:22;938:53;:::i;:::-;928:63;;884:117;812:196;;;;:::o;1014:284::-;;1133:2;1121:9;1112:7;1108:23;1104:32;1101:2;;;1149:1;1146;1139:12;1101:2;1192:1;1217:64;1273:7;1264:6;1253:9;1249:22;1217:64;:::i;:::-;1207:74;;1163:128;1091:207;;;;:::o;1304:278::-;;1420:2;1408:9;1399:7;1395:23;1391:32;1388:2;;;1436:1;1433;1426:12;1388:2;1479:1;1504:61;1557:7;1548:6;1537:9;1533:22;1504:61;:::i;:::-;1494:71;;1450:125;1378:204;;;;:::o;1588:407::-;;;1713:2;1701:9;1692:7;1688:23;1684:32;1681:2;;;1729:1;1726;1719:12;1681:2;1772:1;1797:53;1842:7;1833:6;1822:9;1818:22;1797:53;:::i;:::-;1787:63;;1743:117;1899:2;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1870:118;1671:324;;;;;:::o;2001:552::-;;;;2143:2;2131:9;2122:7;2118:23;2114:32;2111:2;;;2159:1;2156;2149:12;2111:2;2202:1;2227:53;2272:7;2263:6;2252:9;2248:22;2227:53;:::i;:::-;2217:63;;2173:117;2329:2;2355:53;2400:7;2391:6;2380:9;2376:22;2355:53;:::i;:::-;2345:63;;2300:118;2457:2;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2428:118;2101:452;;;;;:::o;2559:407::-;;;2684:2;2672:9;2663:7;2659:23;2655:32;2652:2;;;2700:1;2697;2690:12;2652:2;2743:1;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2714:117;2870:2;2896:53;2941:7;2932:6;2921:9;2917:22;2896:53;:::i;:::-;2886:63;;2841:118;2642:324;;;;;:::o;2972:256::-;;3077:2;3065:9;3056:7;3052:23;3048:32;3045:2;;;3093:1;3090;3083:12;3045:2;3136:1;3161:50;3203:7;3194:6;3183:9;3179:22;3161:50;:::i;:::-;3151:60;;3107:114;3035:193;;;;:::o;3234:262::-;;3342:2;3330:9;3321:7;3317:23;3313:32;3310:2;;;3358:1;3355;3348:12;3310:2;3401:1;3426:53;3471:7;3462:6;3451:9;3447:22;3426:53;:::i;:::-;3416:63;;3372:117;3300:196;;;;:::o;3502:401::-;;;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;3640:1;3637;3630:12;3592:2;3683:1;3708:53;3753:7;3744:6;3733:9;3729:22;3708:53;:::i;:::-;3698:63;;3654:117;3810:2;3836:50;3878:7;3869:6;3858:9;3854:22;3836:50;:::i;:::-;3826:60;;3781:115;3582:321;;;;;:::o;3909:179::-;;3999:46;4041:3;4033:6;3999:46;:::i;:::-;4077:4;4072:3;4068:14;4054:28;;3989:99;;;;:::o;4094:142::-;4197:32;4223:5;4197:32;:::i;:::-;4192:3;4185:45;4175:61;;:::o;4242:108::-;4319:24;4337:5;4319:24;:::i;:::-;4314:3;4307:37;4297:53;;:::o;4356:118::-;4443:24;4461:5;4443:24;:::i;:::-;4438:3;4431:37;4421:53;;:::o;4510:732::-;;4658:54;4706:5;4658:54;:::i;:::-;4728:86;4807:6;4802:3;4728:86;:::i;:::-;4721:93;;4838:56;4888:5;4838:56;:::i;:::-;4917:7;4948:1;4933:284;4958:6;4955:1;4952:13;4933:284;;;5034:6;5028:13;5061:63;5120:3;5105:13;5061:63;:::i;:::-;5054:70;;5147:60;5200:6;5147:60;:::i;:::-;5137:70;;4993:224;4980:1;4977;4973:9;4968:14;;4933:284;;;4937:14;5233:3;5226:10;;4634:608;;;;;;;:::o;5248:109::-;5329:21;5344:5;5329:21;:::i;:::-;5324:3;5317:34;5307:50;;:::o;5363:185::-;5477:64;5535:5;5477:64;:::i;:::-;5472:3;5465:77;5455:93;;:::o;5554:147::-;5649:45;5688:5;5649:45;:::i;:::-;5644:3;5637:58;5627:74;;:::o;5707:364::-;;5823:39;5856:5;5823:39;:::i;:::-;5878:71;5942:6;5937:3;5878:71;:::i;:::-;5871:78;;5958:52;6003:6;5998:3;5991:4;5984:5;5980:16;5958:52;:::i;:::-;6035:29;6057:6;6035:29;:::i;:::-;6030:3;6026:39;6019:46;;5799:272;;;;;:::o;6077:366::-;;6240:67;6304:2;6299:3;6240:67;:::i;:::-;6233:74;;6316:93;6405:3;6316:93;:::i;:::-;6434:2;6429:3;6425:12;6418:19;;6223:220;;;:::o;6449:366::-;;6612:67;6676:2;6671:3;6612:67;:::i;:::-;6605:74;;6688:93;6777:3;6688:93;:::i;:::-;6806:2;6801:3;6797:12;6790:19;;6595:220;;;:::o;6821:366::-;;6984:67;7048:2;7043:3;6984:67;:::i;:::-;6977:74;;7060:93;7149:3;7060:93;:::i;:::-;7178:2;7173:3;7169:12;7162:19;;6967:220;;;:::o;7193:366::-;;7356:67;7420:2;7415:3;7356:67;:::i;:::-;7349:74;;7432:93;7521:3;7432:93;:::i;:::-;7550:2;7545:3;7541:12;7534:19;;7339:220;;;:::o;7565:366::-;;7728:67;7792:2;7787:3;7728:67;:::i;:::-;7721:74;;7804:93;7893:3;7804:93;:::i;:::-;7922:2;7917:3;7913:12;7906:19;;7711:220;;;:::o;7937:366::-;;8100:67;8164:2;8159:3;8100:67;:::i;:::-;8093:74;;8176:93;8265:3;8176:93;:::i;:::-;8294:2;8289:3;8285:12;8278:19;;8083:220;;;:::o;8309:366::-;;8472:67;8536:2;8531:3;8472:67;:::i;:::-;8465:74;;8548:93;8637:3;8548:93;:::i;:::-;8666:2;8661:3;8657:12;8650:19;;8455:220;;;:::o;8681:366::-;;8844:67;8908:2;8903:3;8844:67;:::i;:::-;8837:74;;8920:93;9009:3;8920:93;:::i;:::-;9038:2;9033:3;9029:12;9022:19;;8827:220;;;:::o;9053:366::-;;9216:67;9280:2;9275:3;9216:67;:::i;:::-;9209:74;;9292:93;9381:3;9292:93;:::i;:::-;9410:2;9405:3;9401:12;9394:19;;9199:220;;;:::o;9425:366::-;;9588:67;9652:2;9647:3;9588:67;:::i;:::-;9581:74;;9664:93;9753:3;9664:93;:::i;:::-;9782:2;9777:3;9773:12;9766:19;;9571:220;;;:::o;9797:366::-;;9960:67;10024:2;10019:3;9960:67;:::i;:::-;9953:74;;10036:93;10125:3;10036:93;:::i;:::-;10154:2;10149:3;10145:12;10138:19;;9943:220;;;:::o;10169:118::-;10256:24;10274:5;10256:24;:::i;:::-;10251:3;10244:37;10234:53;;:::o;10293:112::-;10376:22;10392:5;10376:22;:::i;:::-;10371:3;10364:35;10354:51;;:::o;10411:222::-;;10542:2;10531:9;10527:18;10519:26;;10555:71;10623:1;10612:9;10608:17;10599:6;10555:71;:::i;:::-;10509:124;;;;:::o;10639:254::-;;10786:2;10775:9;10771:18;10763:26;;10799:87;10883:1;10872:9;10868:17;10859:6;10799:87;:::i;:::-;10753:140;;;;:::o;10899:210::-;;11024:2;11013:9;11009:18;11001:26;;11037:65;11099:1;11088:9;11084:17;11075:6;11037:65;:::i;:::-;10991:118;;;;:::o;11115:276::-;;11273:2;11262:9;11258:18;11250:26;;11286:98;11381:1;11370:9;11366:17;11357:6;11286:98;:::i;:::-;11240:151;;;;:::o;11397:313::-;;11548:2;11537:9;11533:18;11525:26;;11597:9;11591:4;11587:20;11583:1;11572:9;11568:17;11561:47;11625:78;11698:4;11689:6;11625:78;:::i;:::-;11617:86;;11515:195;;;;:::o;11716:419::-;;11920:2;11909:9;11905:18;11897:26;;11969:9;11963:4;11959:20;11955:1;11944:9;11940:17;11933:47;11997:131;12123:4;11997:131;:::i;:::-;11989:139;;11887:248;;;:::o;12141:419::-;;12345:2;12334:9;12330:18;12322:26;;12394:9;12388:4;12384:20;12380:1;12369:9;12365:17;12358:47;12422:131;12548:4;12422:131;:::i;:::-;12414:139;;12312:248;;;:::o;12566:419::-;;12770:2;12759:9;12755:18;12747:26;;12819:9;12813:4;12809:20;12805:1;12794:9;12790:17;12783:47;12847:131;12973:4;12847:131;:::i;:::-;12839:139;;12737:248;;;:::o;12991:419::-;;13195:2;13184:9;13180:18;13172:26;;13244:9;13238:4;13234:20;13230:1;13219:9;13215:17;13208:47;13272:131;13398:4;13272:131;:::i;:::-;13264:139;;13162:248;;;:::o;13416:419::-;;13620:2;13609:9;13605:18;13597:26;;13669:9;13663:4;13659:20;13655:1;13644:9;13640:17;13633:47;13697:131;13823:4;13697:131;:::i;:::-;13689:139;;13587:248;;;:::o;13841:419::-;;14045:2;14034:9;14030:18;14022:26;;14094:9;14088:4;14084:20;14080:1;14069:9;14065:17;14058:47;14122:131;14248:4;14122:131;:::i;:::-;14114:139;;14012:248;;;:::o;14266:419::-;;14470:2;14459:9;14455:18;14447:26;;14519:9;14513:4;14509:20;14505:1;14494:9;14490:17;14483:47;14547:131;14673:4;14547:131;:::i;:::-;14539:139;;14437:248;;;:::o;14691:419::-;;14895:2;14884:9;14880:18;14872:26;;14944:9;14938:4;14934:20;14930:1;14919:9;14915:17;14908:47;14972:131;15098:4;14972:131;:::i;:::-;14964:139;;14862:248;;;:::o;15116:419::-;;15320:2;15309:9;15305:18;15297:26;;15369:9;15363:4;15359:20;15355:1;15344:9;15340:17;15333:47;15397:131;15523:4;15397:131;:::i;:::-;15389:139;;15287:248;;;:::o;15541:419::-;;15745:2;15734:9;15730:18;15722:26;;15794:9;15788:4;15784:20;15780:1;15769:9;15765:17;15758:47;15822:131;15948:4;15822:131;:::i;:::-;15814:139;;15712:248;;;:::o;15966:419::-;;16170:2;16159:9;16155:18;16147:26;;16219:9;16213:4;16209:20;16205:1;16194:9;16190:17;16183:47;16247:131;16373:4;16247:131;:::i;:::-;16239:139;;16137:248;;;:::o;16391:222::-;;16522:2;16511:9;16507:18;16499:26;;16535:71;16603:1;16592:9;16588:17;16579:6;16535:71;:::i;:::-;16489:124;;;;:::o;16619:831::-;;16920:3;16909:9;16905:19;16897:27;;16934:71;17002:1;16991:9;16987:17;16978:6;16934:71;:::i;:::-;17015:80;17091:2;17080:9;17076:18;17067:6;17015:80;:::i;:::-;17142:9;17136:4;17132:20;17127:2;17116:9;17112:18;17105:48;17170:108;17273:4;17264:6;17170:108;:::i;:::-;17162:116;;17288:72;17356:2;17345:9;17341:18;17332:6;17288:72;:::i;:::-;17370:73;17438:3;17427:9;17423:19;17414:6;17370:73;:::i;:::-;16887:563;;;;;;;;:::o;17456:214::-;;17583:2;17572:9;17568:18;17560:26;;17596:67;17660:1;17649:9;17645:17;17636:6;17596:67;:::i;:::-;17550:120;;;;:::o;17676:132::-;;17766:3;17758:11;;17796:4;17791:3;17787:14;17779:22;;17748:60;;;:::o;17814:114::-;;17915:5;17909:12;17899:22;;17888:40;;;:::o;17934:99::-;;18020:5;18014:12;18004:22;;17993:40;;;:::o;18039:113::-;;18141:4;18136:3;18132:14;18124:22;;18114:38;;;:::o;18158:184::-;;18291:6;18286:3;18279:19;18331:4;18326:3;18322:14;18307:29;;18269:73;;;;:::o;18348:169::-;;18466:6;18461:3;18454:19;18506:4;18501:3;18497:14;18482:29;;18444:73;;;;:::o;18523:305::-;;18582:20;18600:1;18582:20;:::i;:::-;18577:25;;18616:20;18634:1;18616:20;:::i;:::-;18611:25;;18770:1;18702:66;18698:74;18695:1;18692:81;18689:2;;;18776:18;;:::i;:::-;18689:2;18820:1;18817;18813:9;18806:16;;18567:261;;;;:::o;18834:185::-;;18891:20;18909:1;18891:20;:::i;:::-;18886:25;;18925:20;18943:1;18925:20;:::i;:::-;18920:25;;18964:1;18954:2;;18969:18;;:::i;:::-;18954:2;19011:1;19008;19004:9;18999:14;;18876:143;;;;:::o;19025:348::-;;19088:20;19106:1;19088:20;:::i;:::-;19083:25;;19122:20;19140:1;19122:20;:::i;:::-;19117:25;;19310:1;19242:66;19238:74;19235:1;19232:81;19227:1;19220:9;19213:17;19209:105;19206:2;;;19317:18;;:::i;:::-;19206:2;19365:1;19362;19358:9;19347:20;;19073:300;;;;:::o;19379:191::-;;19439:20;19457:1;19439:20;:::i;:::-;19434:25;;19473:20;19491:1;19473:20;:::i;:::-;19468:25;;19512:1;19509;19506:8;19503:2;;;19517:18;;:::i;:::-;19503:2;19562:1;19559;19555:9;19547:17;;19424:146;;;;:::o;19576:96::-;;19642:24;19660:5;19642:24;:::i;:::-;19631:35;;19621:51;;;:::o;19678:104::-;;19752:24;19770:5;19752:24;:::i;:::-;19741:35;;19731:51;;;:::o;19788:90::-;;19865:5;19858:13;19851:21;19840:32;;19830:48;;;:::o;19884:126::-;;19961:42;19954:5;19950:54;19939:65;;19929:81;;;:::o;20016:77::-;;20082:5;20071:16;;20061:32;;;:::o;20099:86::-;;20174:4;20167:5;20163:16;20152:27;;20142:43;;;:::o;20191:180::-;;20301:64;20359:5;20301:64;:::i;:::-;20288:77;;20278:93;;;:::o;20377:140::-;;20487:24;20505:5;20487:24;:::i;:::-;20474:37;;20464:53;;;:::o;20523:121::-;;20614:24;20632:5;20614:24;:::i;:::-;20601:37;;20591:53;;;:::o;20650:307::-;20718:1;20728:113;20742:6;20739:1;20736:13;20728:113;;;20827:1;20822:3;20818:11;20812:18;20808:1;20803:3;20799:11;20792:39;20764:2;20761:1;20757:10;20752:15;;20728:113;;;20859:6;20856:1;20853:13;20850:2;;;20939:1;20930:6;20925:3;20921:16;20914:27;20850:2;20699:258;;;;:::o;20963:320::-;;21044:1;21038:4;21034:12;21024:22;;21091:1;21085:4;21081:12;21112:18;21102:2;;21168:4;21160:6;21156:17;21146:27;;21102:2;21230;21222:6;21219:14;21199:18;21196:38;21193:2;;;21249:18;;:::i;:::-;21193:2;21014:269;;;;:::o;21289:233::-;;21351:24;21369:5;21351:24;:::i;:::-;21342:33;;21397:66;21390:5;21387:77;21384:2;;;21467:18;;:::i;:::-;21384:2;21514:1;21507:5;21503:13;21496:20;;21332:190;;;:::o;21528:180::-;21576:77;21573:1;21566:88;21673:4;21670:1;21663:15;21697:4;21694:1;21687:15;21714:180;21762:77;21759:1;21752:88;21859:4;21856:1;21849:15;21883:4;21880:1;21873:15;21900:180;21948:77;21945:1;21938:88;22045:4;22042:1;22035:15;22069:4;22066:1;22059:15;22086:102;;22178:2;22174:7;22169:2;22162:5;22158:14;22154:28;22144:38;;22134:54;;;:::o;22194:222::-;22334:34;22330:1;22322:6;22318:14;22311:58;22403:5;22398:2;22390:6;22386:15;22379:30;22300:116;:::o;22422:229::-;22562:34;22558:1;22550:6;22546:14;22539:58;22631:12;22626:2;22618:6;22614:15;22607:37;22528:123;:::o;22657:225::-;22797:34;22793:1;22785:6;22781:14;22774:58;22866:8;22861:2;22853:6;22849:15;22842:33;22763:119;:::o;22888:221::-;23028:34;23024:1;23016:6;23012:14;23005:58;23097:4;23092:2;23084:6;23080:15;23073:29;22994:115;:::o;23115:177::-;23255:29;23251:1;23243:6;23239:14;23232:53;23221:71;:::o;23298:181::-;23438:33;23434:1;23426:6;23422:14;23415:57;23404:75;:::o;23485:227::-;23625:34;23621:1;23613:6;23609:14;23602:58;23694:10;23689:2;23681:6;23677:15;23670:35;23591:121;:::o;23718:182::-;23858:34;23854:1;23846:6;23842:14;23835:58;23824:76;:::o;23906:228::-;24046:34;24042:1;24034:6;24030:14;24023:58;24115:11;24110:2;24102:6;24098:15;24091:36;24012:122;:::o;24140:224::-;24280:34;24276:1;24268:6;24264:14;24257:58;24349:7;24344:2;24336:6;24332:15;24325:32;24246:118;:::o;24370:223::-;24510:34;24506:1;24498:6;24494:14;24487:58;24579:6;24574:2;24566:6;24562:15;24555:31;24476:117;:::o;24599:122::-;24672:24;24690:5;24672:24;:::i;:::-;24665:5;24662:35;24652:2;;24711:1;24708;24701:12;24652:2;24642:79;:::o;24727:138::-;24808:32;24834:5;24808:32;:::i;:::-;24801:5;24798:43;24788:2;;24855:1;24852;24845:12;24788:2;24778:87;:::o;24871:116::-;24941:21;24956:5;24941:21;:::i;:::-;24934:5;24931:32;24921:2;;24977:1;24974;24967:12;24921:2;24911:76;:::o;24993:122::-;25066:24;25084:5;25066:24;:::i;:::-;25059:5;25056:35;25046:2;;25105:1;25102;25095:12;25046:2;25036:79;:::o
Swarm Source
ipfs://977f6acc4d0a02cf7003cd62aefc6a340b007b38f65c6178f09aa881e3d6518c
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.