Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 383 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15939900 | 662 days ago | IN | 0 ETH | 0.00500484 | ||||
Withdraw | 15354595 | 748 days ago | IN | 0 ETH | 0.00221764 | ||||
Withdraw | 15341519 | 750 days ago | IN | 0 ETH | 0.00141382 | ||||
Withdraw | 15205118 | 771 days ago | IN | 0 ETH | 0.00093908 | ||||
Transfer | 15125305 | 784 days ago | IN | 0 ETH | 0.0007735 | ||||
Withdraw | 14879042 | 825 days ago | IN | 0 ETH | 0.00369403 | ||||
Withdraw | 14856036 | 829 days ago | IN | 0 ETH | 0.00637441 | ||||
Withdraw | 14806089 | 837 days ago | IN | 0 ETH | 0.00343151 | ||||
Withdraw | 14756896 | 845 days ago | IN | 0 ETH | 0.01960485 | ||||
Deposit | 14736513 | 848 days ago | IN | 0 ETH | 0.00259625 | ||||
Deposit | 14716527 | 851 days ago | IN | 0 ETH | 0.00302896 | ||||
Deposit | 14704619 | 853 days ago | IN | 0 ETH | 0.0054191 | ||||
Withdraw | 14677013 | 858 days ago | IN | 0 ETH | 0.00528365 | ||||
Deposit | 14672845 | 858 days ago | IN | 0 ETH | 0.00525022 | ||||
Withdraw | 14451608 | 893 days ago | IN | 0 ETH | 0.00569002 | ||||
Deposit | 14422706 | 897 days ago | IN | 0 ETH | 0.0019043 | ||||
Deposit | 14290302 | 918 days ago | IN | 0 ETH | 0.01761722 | ||||
Deposit | 14290293 | 918 days ago | IN | 0 ETH | 0.01380682 | ||||
Withdraw | 14274868 | 920 days ago | IN | 0 ETH | 0.00409662 | ||||
Withdraw | 14262444 | 922 days ago | IN | 0 ETH | 0.00457157 | ||||
Deposit | 14259220 | 923 days ago | IN | 0 ETH | 0.01069435 | ||||
Deposit | 14179787 | 935 days ago | IN | 0 ETH | 0.01294304 | ||||
Withdraw | 14055798 | 954 days ago | IN | 0 ETH | 0.00657222 | ||||
Withdraw | 14055798 | 954 days ago | IN | 0 ETH | 0.01410563 | ||||
Withdraw | 13953450 | 970 days ago | IN | 0 ETH | 0.01684527 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
fUSDT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } // File: openzeppelin-solidity\contracts\token\ERC20\IERC20.sol /** * @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); } interface ERC20 { function totalSupply() external returns (uint); function balanceOf(address who) external returns (uint); function transferFrom(address from, address to, uint value) external; function transfer(address to, uint value) external; event Transfer(address indexed from, address indexed to, uint value); } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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); } } } } library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /* * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /* * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract fUSDT is IERC20, ReentrancyGuard { using Address for address; using SafeMath for uint256; using SafeERC20 for IERC20; enum TxType { FromExcluded, ToExcluded, BothExcluded, Standard } mapping (address => uint256) private rUsdtBalance; mapping (address => uint256) private tUsdtBalance; mapping (address => mapping (address => uint256)) private _allowances; EnumerableSet.AddressSet excluded; uint256 private tUsdtSupply; uint256 private rUsdtSupply; uint256 private feesAccrued; string private _name = 'FEG Wrapped USDT'; string private _symbol = 'fUSDT'; uint8 private _decimals = 6; address private op; address private op2; IERC20 public lpToken; event Deposit(address indexed dst, uint amount); event Withdrawal(address indexed src, uint amount); constructor (address _lpToken) { op = address(0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C); op2 = op; lpToken = IERC20(_lpToken); EnumerableSet.add(excluded, address(0)); // stablity - zen. emit Transfer(address(0), msg.sender, 0); } 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 tUsdtSupply; } function balanceOf(address account) public view override returns (uint256) { if (EnumerableSet.contains(excluded, account)) return tUsdtBalance[account]; (uint256 r, uint256 t) = currentSupply(); return (rUsdtBalance[account] * t) / r; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, 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(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue); return true; } function isExcluded(address account) public view returns (bool) { return EnumerableSet.contains(excluded, account); } function totalFees() public view returns (uint256) { return feesAccrued; } function deposit(uint256 _amount) public { require(_amount > 0, "can't deposit nothing"); lpToken.safeTransferFrom(msg.sender, address(this), _amount); (uint256 r, uint256 t) = currentSupply(); uint256 fee = _amount / 100; uint256 df = fee / 10; uint256 net = fee != 0 ? (_amount - (fee)) : _amount; tUsdtSupply += _amount; if(isExcluded(msg.sender)){ tUsdtBalance[msg.sender] += (_amount- fee); } feesAccrued += df; rUsdtBalance[op] += ((df * r) / t); rUsdtSupply += (((net + df) * r) / t); rUsdtBalance[msg.sender] += ((net * r) / t); emit Deposit(msg.sender, _amount); } function withdraw(uint256 _amount) public { require(balanceOf(msg.sender) >= _amount && _amount <= totalSupply(), "invalid _amount"); (uint256 r, uint256 t) = currentSupply(); uint256 fee = _amount / 100; uint256 wf = fee / 10; uint256 net = _amount - fee; if(isExcluded(msg.sender)) { tUsdtBalance[msg.sender] -= _amount; rUsdtBalance[msg.sender] -= ((_amount * r) / t); } else { rUsdtBalance[msg.sender] -= ((_amount * r) / t); } tUsdtSupply -= (net + wf); rUsdtSupply -= (((net + wf) * r ) / t); rUsdtBalance[op] += ((wf * r) / t); feesAccrued += wf; lpToken.safeTransfer(msg.sender, net); emit Withdrawal(msg.sender, net); } function rUsdtToEveryone(uint256 amt) public { require(!isExcluded(msg.sender), "not allowed"); (uint256 r, uint256 t) = currentSupply(); rUsdtBalance[msg.sender] -= ((amt * r) / t); rUsdtSupply -= ((amt * r) / t); feesAccrued += amt; } function excludeFromFees(address account) external { require(msg.sender == op2, "op only"); require(!EnumerableSet.contains(excluded, account), "address excluded"); if(rUsdtBalance[account] > 0) { (uint256 r, uint256 t) = currentSupply(); tUsdtBalance[account] = (rUsdtBalance[account] * (t)) / (r); } EnumerableSet.add(excluded, account); } function includeInFees(address account) external { require(msg.sender == op2, "op only"); require(EnumerableSet.contains(excluded, account), "address excluded"); tUsdtBalance[account] = 0; EnumerableSet.remove(excluded, account); } function tUsdtFromrUsdt(uint256 rUsdtAmount) external view returns (uint256) { (uint256 r, uint256 t) = currentSupply(); return (rUsdtAmount * t) / r; } 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 getTtype(address sender, address recipient) internal view returns (TxType t) { bool isSenderExcluded = EnumerableSet.contains(excluded, sender); bool isRecipientExcluded = EnumerableSet.contains(excluded, recipient); if (isSenderExcluded && !isRecipientExcluded) { t = TxType.FromExcluded; } else if (!isSenderExcluded && isRecipientExcluded) { t = TxType.ToExcluded; } else if (!isSenderExcluded && !isRecipientExcluded) { t = TxType.Standard; } else if (isSenderExcluded && isRecipientExcluded) { t = TxType.BothExcluded; } else { t = TxType.Standard; } return t; } function _transfer(address sender, address recipient, uint256 amt) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amt > 0, "Transfer amt must be greater than zero"); (uint256 r, uint256 t) = currentSupply(); uint256 fee = amt / 100; TxType tt = getTtype(sender, recipient); if (tt == TxType.ToExcluded) { rUsdtBalance[sender] -= ((amt * r) / t); tUsdtBalance[recipient] += (amt - fee); rUsdtBalance[recipient] += (((amt - fee) * r) / t); } else if (tt == TxType.FromExcluded) { tUsdtBalance[sender] -= (amt); rUsdtBalance[sender] -= ((amt * r) / t); rUsdtBalance[recipient] += (((amt - fee) * r) / t); } else if (tt == TxType.BothExcluded) { tUsdtBalance[sender] -= (amt); rUsdtBalance[sender] -= ((amt * r) / t); tUsdtBalance[recipient] += (amt - fee); rUsdtBalance[recipient] += (((amt - fee) * r) / t); } else { rUsdtBalance[sender] -= ((amt * r) / t); rUsdtBalance[recipient] += (((amt - fee) * r) / t); } rUsdtSupply -= ((fee * r) / t); feesAccrued += fee; emit Transfer(sender, recipient, amt - fee); } function currentSupply() public view returns(uint256, uint256) { if(rUsdtSupply == 0 || tUsdtSupply == 0) return (1000000000, 1); uint256 rSupply = rUsdtSupply; uint256 tSupply = tUsdtSupply; for (uint256 i = 0; i < EnumerableSet.length(excluded); i++) { if (rUsdtBalance[EnumerableSet.at(excluded, i)] > rSupply || tUsdtBalance[EnumerableSet.at(excluded, i)] > tSupply) return (rUsdtSupply, tUsdtSupply); rSupply -= (rUsdtBalance[EnumerableSet.at(excluded, i)]); tSupply -= (tUsdtBalance[EnumerableSet.at(excluded, i)]); } if (rSupply < rUsdtSupply / tUsdtSupply) return (rUsdtSupply, tUsdtSupply); return (rSupply, tSupply); } function setOp(address opper, address opper2) external { require(msg.sender == op, "only op can call"); op = opper; op2 = opper2; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"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":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"rUsdtToEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"opper","type":"address"},{"internalType":"address","name":"opper2","type":"address"}],"name":"setOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rUsdtAmount","type":"uint256"}],"name":"tUsdtFromrUsdt","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":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601081526020017f464547205772617070656420555344540000000000000000000000000000000081525060099080519060200190620000519291906200034f565b506040518060400160405280600581526020017f6655534454000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f9291906200034f565b506006600b60006101000a81548160ff021916908360ff160217905550348015620000c957600080fd5b5060405162003c4938038062003c498339818101604052810190620000ef919062000416565b6001600081905550734c9bc793716e8dc05d1f48d8ca8f84318ec3043c600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000209600460006200027a60201b620017521760201c565b503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516200026b919062000453565b60405180910390a35062000541565b6000620002aa836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002b260201b60201c565b905092915050565b6000620002c683836200032c60201b60201c565b6200032157826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000326565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200035d90620004c2565b90600052602060002090601f016020900481019282620003815760008555620003cd565b82601f106200039c57805160ff1916838001178555620003cd565b82800160010185558215620003cd579182015b82811115620003cc578251825591602001919060010190620003af565b5b509050620003dc9190620003e0565b5090565b5b80821115620003fb576000816000905550600101620003e1565b5090565b600081519050620004108162000527565b92915050565b6000602082840312156200042957600080fd5b60006200043984828501620003ff565b91505092915050565b6200044d81620004ae565b82525050565b60006020820190506200046a600083018462000442565b92915050565b60006200047d8262000484565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004bb82620004a4565b9050919050565b60006002820490506001821680620004db57607f821691505b60208210811415620004f257620004f1620004f8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005328162000470565b81146200053e57600080fd5b50565b6136f880620005516000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80635fcbd285116100b8578063a9059cbb1161007c578063a9059cbb1461038e578063b6b55f25146103be578063cba0e996146103da578063d2ac95a01461040a578063dd62ed3e14610426578063e57f14e11461045657610142565b80635fcbd285146102d357806370a08231146102f1578063771282f61461032157806395d89b4114610340578063a457c2d71461035e57610142565b806318160ddd1161010a57806318160ddd146101ff57806323b872dd1461021d5780632b4142641461024d5780632e1a7d4d14610269578063313ce5671461028557806339509351146102a357610142565b8063034f5d1b1461014757806306fdde0314610177578063095ea7b31461019557806313114a9d146101c557806316a2f82a146101e3575b600080fd5b610161600480360381019061015c9190612a73565b610472565b60405161016e9190612fca565b60405180910390f35b61017f6104a3565b60405161018c9190612de8565b60405180910390f35b6101af60048036038101906101aa9190612a0e565b610535565b6040516101bc9190612db2565b60405180910390f35b6101cd61054c565b6040516101da9190612fca565b60405180910390f35b6101fd60048036038101906101f8919061295a565b610556565b005b610207610684565b6040516102149190612fca565b60405180910390f35b610237600480360381019061023291906129bf565b61068e565b6040516102449190612db2565b60405180910390f35b61026760048036038101906102629190612983565b610738565b005b610283600480360381019061027e9190612a73565b61084e565b005b61028d610bd7565b60405161029a919061300e565b60405180910390f35b6102bd60048036038101906102b89190612a0e565b610bee565b6040516102ca9190612db2565b60405180910390f35b6102db610c8c565b6040516102e89190612dcd565b60405180910390f35b61030b6004803603810190610306919061295a565b610cb2565b6040516103189190612fca565b60405180910390f35b610329610d7a565b604051610337929190612fe5565b60405180910390f35b610348610f74565b6040516103559190612de8565b60405180910390f35b61037860048036038101906103739190612a0e565b611006565b6040516103859190612db2565b60405180910390f35b6103a860048036038101906103a39190612a0e565b6110a4565b6040516103b59190612db2565b60405180910390f35b6103d860048036038101906103d39190612a73565b6110bb565b005b6103f460048036038101906103ef919061295a565b6113c9565b6040516104019190612db2565b60405180910390f35b610424600480360381019061041f9190612a73565b6113dd565b005b610440600480360381019061043b9190612983565b6114ee565b60405161044d9190612fca565b60405180910390f35b610470600480360381019061046b919061295a565b611575565b005b600080600061047f610d7a565b9150915081818561049091906130e2565b61049a91906130b1565b92505050919050565b6060600980546104b29061321c565b80601f01602080910402602001604051908101604052809291908181526020018280546104de9061321c565b801561052b5780601f106105005761010080835404028352916020019161052b565b820191906000526020600020905b81548152906001019060200180831161050e57829003601f168201915b5050505050905090565b6000610542338484611782565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105dd90612eca565b60405180910390fd5b6105f160048261194d565b610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790612e8a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061068060048261197d565b5050565b6000600654905090565b600061069b8484846119ad565b61072d843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610728919061313c565b611782565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612f2a565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061085833610cb2565b1015801561086d5750610869610684565b8111155b6108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390612eea565b60405180910390fd5b6000806108b7610d7a565b9150915060006064846108ca91906130b1565b90506000600a826108db91906130b1565b9050600082866108eb919061313c565b90506108f6336113c9565b156109c25785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461094a919061313c565b9250508190555083858761095e91906130e2565b61096891906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b6919061313c565b92505081905550610a2f565b8385876109cf91906130e2565b6109d991906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a27919061313c565b925050819055505b8181610a3b919061305b565b60066000828254610a4c919061313c565b9250508190555083858383610a61919061305b565b610a6b91906130e2565b610a7591906130b1565b60076000828254610a86919061313c565b92505081905550838583610a9a91906130e2565b610aa491906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b14919061305b565b925050819055508160086000828254610b2d919061305b565b92505081905550610b813382600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610bc79190612fca565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610c82338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7d919061305b565b611782565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610cbf60048361194d565b15610d0b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610d75565b600080610d16610d7a565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d6691906130e2565b610d7091906130b1565b925050505b919050565b60008060006007541480610d9057506000600654145b15610da557633b9aca00600191509150610f70565b600060075490506000600654905060005b610dc060046122bc565b811015610f3e578260016000610dd76004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610e6657508160026000610e296004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610e7d5760075460065494509450505050610f70565b60016000610e8c6004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610ed2919061313c565b925060026000610ee36004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610f29919061313c565b91508080610f369061324e565b915050610db6565b50600654600754610f4f91906130b1565b821015610f6757600754600654935093505050610f70565b81819350935050505b9091565b6060600a8054610f839061321c565b80601f0160208091040260200160405190810160405280929190818152602001828054610faf9061321c565b8015610ffc5780601f10610fd157610100808354040283529160200191610ffc565b820191906000526020600020905b815481529060010190602001808311610fdf57829003601f168201915b5050505050905090565b600061109a338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095919061313c565b611782565b6001905092915050565b60006110b13384846119ad565b6001905092915050565b600081116110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612e4a565b60405180910390fd5b61114d333083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122eb909392919063ffffffff16565b600080611158610d7a565b91509150600060648461116b91906130b1565b90506000600a8261117c91906130b1565b905060008083141561118e578561119b565b828661119a919061313c565b5b905085600660008282546111af919061305b565b925050819055506111bf336113c9565b156112265782866111d0919061313c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121e919061305b565b925050819055505b8160086000828254611238919061305b565b9250508190555083858361124c91906130e2565b61125691906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c6919061305b565b92505081905550838583836112db919061305b565b6112e591906130e2565b6112ef91906130b1565b60076000828254611300919061305b565b9250508190555083858261131491906130e2565b61131e91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461136c919061305b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c876040516113b99190612fca565b60405180910390a2505050505050565b60006113d660048361194d565b9050919050565b6113e6336113c9565b15611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90612eaa565b60405180910390fd5b600080611431610d7a565b9150915080828461144291906130e2565b61144c91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149a919061313c565b925050819055508082846114ae91906130e2565b6114b891906130b1565b600760008282546114c9919061313c565b9250508190555082600860008282546114e2919061305b565b92505081905550505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90612eca565b60405180910390fd5b61161060048261194d565b15611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790612e8a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611743576000806116a3610d7a565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f391906130e2565b6116fd91906130b1565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61174e600482611752565b5050565b600061177a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612374565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990612f4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612e6a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119409190612fca565b60405180910390a3505050565b6000611975836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6123e4565b905092915050565b60006119a5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612407565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612e2a565b60405180910390fd5b60008111611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612faa565b60405180910390fd5b600080611adb610d7a565b915091506000606484611aee91906130b1565b90506000611afc8787612591565b905060016003811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cc057828486611b8491906130e2565b611b8e91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc919061313c565b925050819055508185611bef919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d919061305b565b9250508190555082848387611c52919061313c565b611c5c91906130e2565b611c6691906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb4919061305b565b92505081905550612175565b60006003811115611cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611d33577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e775784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d88919061313c565b92505081905550828486611d9c91906130e2565b611da691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df4919061313c565b9250508190555082848387611e09919061313c565b611e1391906130e2565b611e1d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6b919061305b565b92505081905550612174565b60026003811115611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561208f5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f919061313c565b92505081905550828486611f5391906130e2565b611f5d91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fab919061313c565b925050819055508185611fbe919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200c919061305b565b9250508190555082848387612021919061313c565b61202b91906130e2565b61203591906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612083919061305b565b92505081905550612173565b82848661209c91906130e2565b6120a691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f4919061313c565b9250508190555082848387612109919061313c565b61211391906130e2565b61211d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216b919061305b565b925050819055505b5b5b82848361218291906130e2565b61218c91906130b1565b6007600082825461219d919061313c565b9250508190555081600860008282546121b6919061305b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8488612218919061313c565b6040516122259190612fca565b60405180910390a350505050505050565b6122b78363a9059cbb60e01b8484604051602401612255929190612d89565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b505050565b60006122ca826000016126eb565b9050919050565b60006122e083600001836126fc565b60001c905092915050565b61236e846323b872dd60e01b85858560405160240161230c93929190612d52565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b50505050565b600061238083836123e4565b6123d95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506123de565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612585576000600182612439919061313c565b9050600060018660000180549050612451919061313c565b90506000866000018281548110612491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106124db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836124f6919061305b565b8760010160008381526020019081526020016000208190555086600001805480612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061258b565b60009150505b92915050565b60008061259f60048561194d565b905060006125ae60048561194d565b90508180156125bb575080155b156125c9576000925061261c565b811580156125d45750805b156125e2576001925061261b565b811580156125ee575080155b156125fc576003925061261a565b8180156126065750805b156126145760029250612619565b600392505b5b5b5b505092915050565b6000612686826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127969092919063ffffffff16565b90506000815111156126e657808060200190518101906126a69190612a4a565b6126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90612f8a565b60405180910390fd5b5b505050565b600081600001805490509050919050565b600081836000018054905011612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90612e0a565b60405180910390fd5b826000018281548110612783577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60606127a584846000856127ae565b90509392505050565b60606127b9856128d0565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90612f6a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128219190612d3b565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b509150915081156128785780925050506128c8565b60008151111561288b5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9190612de8565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561291257506000801b8214155b92505050919050565b60008135905061292a8161367d565b92915050565b60008151905061293f81613694565b92915050565b600081359050612954816136ab565b92915050565b60006020828403121561296c57600080fd5b600061297a8482850161291b565b91505092915050565b6000806040838503121561299657600080fd5b60006129a48582860161291b565b92505060206129b58582860161291b565b9150509250929050565b6000806000606084860312156129d457600080fd5b60006129e28682870161291b565b93505060206129f38682870161291b565b9250506040612a0486828701612945565b9150509250925092565b60008060408385031215612a2157600080fd5b6000612a2f8582860161291b565b9250506020612a4085828601612945565b9150509250929050565b600060208284031215612a5c57600080fd5b6000612a6a84828501612930565b91505092915050565b600060208284031215612a8557600080fd5b6000612a9384828501612945565b91505092915050565b612aa581613170565b82525050565b612ab481613182565b82525050565b6000612ac582613029565b612acf818561303f565b9350612adf8185602086016131e9565b80840191505092915050565b612af4816131c5565b82525050565b6000612b0582613034565b612b0f818561304a565b9350612b1f8185602086016131e9565b612b2881613324565b840191505092915050565b6000612b4060228361304a565b9150612b4b82613335565b604082019050919050565b6000612b6360238361304a565b9150612b6e82613384565b604082019050919050565b6000612b8660158361304a565b9150612b91826133d3565b602082019050919050565b6000612ba960228361304a565b9150612bb4826133fc565b604082019050919050565b6000612bcc60108361304a565b9150612bd78261344b565b602082019050919050565b6000612bef600b8361304a565b9150612bfa82613474565b602082019050919050565b6000612c1260078361304a565b9150612c1d8261349d565b602082019050919050565b6000612c35600f8361304a565b9150612c40826134c6565b602082019050919050565b6000612c5860258361304a565b9150612c63826134ef565b604082019050919050565b6000612c7b60108361304a565b9150612c868261353e565b602082019050919050565b6000612c9e60248361304a565b9150612ca982613567565b604082019050919050565b6000612cc1601d8361304a565b9150612ccc826135b6565b602082019050919050565b6000612ce4602a8361304a565b9150612cef826135df565b604082019050919050565b6000612d0760268361304a565b9150612d128261362e565b604082019050919050565b612d26816131ae565b82525050565b612d35816131b8565b82525050565b6000612d478284612aba565b915081905092915050565b6000606082019050612d676000830186612a9c565b612d746020830185612a9c565b612d816040830184612d1d565b949350505050565b6000604082019050612d9e6000830185612a9c565b612dab6020830184612d1d565b9392505050565b6000602082019050612dc76000830184612aab565b92915050565b6000602082019050612de26000830184612aeb565b92915050565b60006020820190508181036000830152612e028184612afa565b905092915050565b60006020820190508181036000830152612e2381612b33565b9050919050565b60006020820190508181036000830152612e4381612b56565b9050919050565b60006020820190508181036000830152612e6381612b79565b9050919050565b60006020820190508181036000830152612e8381612b9c565b9050919050565b60006020820190508181036000830152612ea381612bbf565b9050919050565b60006020820190508181036000830152612ec381612be2565b9050919050565b60006020820190508181036000830152612ee381612c05565b9050919050565b60006020820190508181036000830152612f0381612c28565b9050919050565b60006020820190508181036000830152612f2381612c4b565b9050919050565b60006020820190508181036000830152612f4381612c6e565b9050919050565b60006020820190508181036000830152612f6381612c91565b9050919050565b60006020820190508181036000830152612f8381612cb4565b9050919050565b60006020820190508181036000830152612fa381612cd7565b9050919050565b60006020820190508181036000830152612fc381612cfa565b9050919050565b6000602082019050612fdf6000830184612d1d565b92915050565b6000604082019050612ffa6000830185612d1d565b6130076020830184612d1d565b9392505050565b60006020820190506130236000830184612d2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613066826131ae565b9150613071836131ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a6576130a5613297565b5b828201905092915050565b60006130bc826131ae565b91506130c7836131ae565b9250826130d7576130d66132c6565b5b828204905092915050565b60006130ed826131ae565b91506130f8836131ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313157613130613297565b5b828202905092915050565b6000613147826131ae565b9150613152836131ae565b92508282101561316557613164613297565b5b828203905092915050565b600061317b8261318e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006131d0826131d7565b9050919050565b60006131e28261318e565b9050919050565b60005b838110156132075780820151818401526020810190506131ec565b83811115613216576000848401525b50505050565b6000600282049050600182168061323457607f821691505b60208210811415613248576132476132f5565b5b50919050565b6000613259826131ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328c5761328b613297565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61368681613170565b811461369157600080fd5b50565b61369d81613182565b81146136a857600080fd5b50565b6136b4816131ae565b81146136bf57600080fd5b5056fea26469706673582212206ae4bd9c94778c0c88194747201c993cd8ce97d9ef48c311bd7a2fbf2bd8246364736f6c63430008040033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80635fcbd285116100b8578063a9059cbb1161007c578063a9059cbb1461038e578063b6b55f25146103be578063cba0e996146103da578063d2ac95a01461040a578063dd62ed3e14610426578063e57f14e11461045657610142565b80635fcbd285146102d357806370a08231146102f1578063771282f61461032157806395d89b4114610340578063a457c2d71461035e57610142565b806318160ddd1161010a57806318160ddd146101ff57806323b872dd1461021d5780632b4142641461024d5780632e1a7d4d14610269578063313ce5671461028557806339509351146102a357610142565b8063034f5d1b1461014757806306fdde0314610177578063095ea7b31461019557806313114a9d146101c557806316a2f82a146101e3575b600080fd5b610161600480360381019061015c9190612a73565b610472565b60405161016e9190612fca565b60405180910390f35b61017f6104a3565b60405161018c9190612de8565b60405180910390f35b6101af60048036038101906101aa9190612a0e565b610535565b6040516101bc9190612db2565b60405180910390f35b6101cd61054c565b6040516101da9190612fca565b60405180910390f35b6101fd60048036038101906101f8919061295a565b610556565b005b610207610684565b6040516102149190612fca565b60405180910390f35b610237600480360381019061023291906129bf565b61068e565b6040516102449190612db2565b60405180910390f35b61026760048036038101906102629190612983565b610738565b005b610283600480360381019061027e9190612a73565b61084e565b005b61028d610bd7565b60405161029a919061300e565b60405180910390f35b6102bd60048036038101906102b89190612a0e565b610bee565b6040516102ca9190612db2565b60405180910390f35b6102db610c8c565b6040516102e89190612dcd565b60405180910390f35b61030b6004803603810190610306919061295a565b610cb2565b6040516103189190612fca565b60405180910390f35b610329610d7a565b604051610337929190612fe5565b60405180910390f35b610348610f74565b6040516103559190612de8565b60405180910390f35b61037860048036038101906103739190612a0e565b611006565b6040516103859190612db2565b60405180910390f35b6103a860048036038101906103a39190612a0e565b6110a4565b6040516103b59190612db2565b60405180910390f35b6103d860048036038101906103d39190612a73565b6110bb565b005b6103f460048036038101906103ef919061295a565b6113c9565b6040516104019190612db2565b60405180910390f35b610424600480360381019061041f9190612a73565b6113dd565b005b610440600480360381019061043b9190612983565b6114ee565b60405161044d9190612fca565b60405180910390f35b610470600480360381019061046b919061295a565b611575565b005b600080600061047f610d7a565b9150915081818561049091906130e2565b61049a91906130b1565b92505050919050565b6060600980546104b29061321c565b80601f01602080910402602001604051908101604052809291908181526020018280546104de9061321c565b801561052b5780601f106105005761010080835404028352916020019161052b565b820191906000526020600020905b81548152906001019060200180831161050e57829003601f168201915b5050505050905090565b6000610542338484611782565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105dd90612eca565b60405180910390fd5b6105f160048261194d565b610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790612e8a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061068060048261197d565b5050565b6000600654905090565b600061069b8484846119ad565b61072d843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610728919061313c565b611782565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612f2a565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061085833610cb2565b1015801561086d5750610869610684565b8111155b6108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390612eea565b60405180910390fd5b6000806108b7610d7a565b9150915060006064846108ca91906130b1565b90506000600a826108db91906130b1565b9050600082866108eb919061313c565b90506108f6336113c9565b156109c25785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461094a919061313c565b9250508190555083858761095e91906130e2565b61096891906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b6919061313c565b92505081905550610a2f565b8385876109cf91906130e2565b6109d991906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a27919061313c565b925050819055505b8181610a3b919061305b565b60066000828254610a4c919061313c565b9250508190555083858383610a61919061305b565b610a6b91906130e2565b610a7591906130b1565b60076000828254610a86919061313c565b92505081905550838583610a9a91906130e2565b610aa491906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b14919061305b565b925050819055508160086000828254610b2d919061305b565b92505081905550610b813382600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610bc79190612fca565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610c82338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7d919061305b565b611782565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610cbf60048361194d565b15610d0b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610d75565b600080610d16610d7a565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d6691906130e2565b610d7091906130b1565b925050505b919050565b60008060006007541480610d9057506000600654145b15610da557633b9aca00600191509150610f70565b600060075490506000600654905060005b610dc060046122bc565b811015610f3e578260016000610dd76004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610e6657508160026000610e296004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610e7d5760075460065494509450505050610f70565b60016000610e8c6004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610ed2919061313c565b925060026000610ee36004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482610f29919061313c565b91508080610f369061324e565b915050610db6565b50600654600754610f4f91906130b1565b821015610f6757600754600654935093505050610f70565b81819350935050505b9091565b6060600a8054610f839061321c565b80601f0160208091040260200160405190810160405280929190818152602001828054610faf9061321c565b8015610ffc5780601f10610fd157610100808354040283529160200191610ffc565b820191906000526020600020905b815481529060010190602001808311610fdf57829003601f168201915b5050505050905090565b600061109a338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611095919061313c565b611782565b6001905092915050565b60006110b13384846119ad565b6001905092915050565b600081116110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612e4a565b60405180910390fd5b61114d333083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122eb909392919063ffffffff16565b600080611158610d7a565b91509150600060648461116b91906130b1565b90506000600a8261117c91906130b1565b905060008083141561118e578561119b565b828661119a919061313c565b5b905085600660008282546111af919061305b565b925050819055506111bf336113c9565b156112265782866111d0919061313c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121e919061305b565b925050819055505b8160086000828254611238919061305b565b9250508190555083858361124c91906130e2565b61125691906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c6919061305b565b92505081905550838583836112db919061305b565b6112e591906130e2565b6112ef91906130b1565b60076000828254611300919061305b565b9250508190555083858261131491906130e2565b61131e91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461136c919061305b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c876040516113b99190612fca565b60405180910390a2505050505050565b60006113d660048361194d565b9050919050565b6113e6336113c9565b15611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90612eaa565b60405180910390fd5b600080611431610d7a565b9150915080828461144291906130e2565b61144c91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149a919061313c565b925050819055508082846114ae91906130e2565b6114b891906130b1565b600760008282546114c9919061313c565b9250508190555082600860008282546114e2919061305b565b92505081905550505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90612eca565b60405180910390fd5b61161060048261194d565b15611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790612e8a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611743576000806116a3610d7a565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f391906130e2565b6116fd91906130b1565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61174e600482611752565b5050565b600061177a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612374565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990612f4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612e6a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119409190612fca565b60405180910390a3505050565b6000611975836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6123e4565b905092915050565b60006119a5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612407565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612e2a565b60405180910390fd5b60008111611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612faa565b60405180910390fd5b600080611adb610d7a565b915091506000606484611aee91906130b1565b90506000611afc8787612591565b905060016003811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cc057828486611b8491906130e2565b611b8e91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc919061313c565b925050819055508185611bef919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d919061305b565b9250508190555082848387611c52919061313c565b611c5c91906130e2565b611c6691906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb4919061305b565b92505081905550612175565b60006003811115611cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611d33577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e775784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d88919061313c565b92505081905550828486611d9c91906130e2565b611da691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df4919061313c565b9250508190555082848387611e09919061313c565b611e1391906130e2565b611e1d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6b919061305b565b92505081905550612174565b60026003811115611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561208f5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f919061313c565b92505081905550828486611f5391906130e2565b611f5d91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fab919061313c565b925050819055508185611fbe919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200c919061305b565b9250508190555082848387612021919061313c565b61202b91906130e2565b61203591906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612083919061305b565b92505081905550612173565b82848661209c91906130e2565b6120a691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f4919061313c565b9250508190555082848387612109919061313c565b61211391906130e2565b61211d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216b919061305b565b925050819055505b5b5b82848361218291906130e2565b61218c91906130b1565b6007600082825461219d919061313c565b9250508190555081600860008282546121b6919061305b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8488612218919061313c565b6040516122259190612fca565b60405180910390a350505050505050565b6122b78363a9059cbb60e01b8484604051602401612255929190612d89565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b505050565b60006122ca826000016126eb565b9050919050565b60006122e083600001836126fc565b60001c905092915050565b61236e846323b872dd60e01b85858560405160240161230c93929190612d52565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b50505050565b600061238083836123e4565b6123d95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506123de565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612585576000600182612439919061313c565b9050600060018660000180549050612451919061313c565b90506000866000018281548110612491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106124db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836124f6919061305b565b8760010160008381526020019081526020016000208190555086600001805480612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061258b565b60009150505b92915050565b60008061259f60048561194d565b905060006125ae60048561194d565b90508180156125bb575080155b156125c9576000925061261c565b811580156125d45750805b156125e2576001925061261b565b811580156125ee575080155b156125fc576003925061261a565b8180156126065750805b156126145760029250612619565b600392505b5b5b5b505092915050565b6000612686826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127969092919063ffffffff16565b90506000815111156126e657808060200190518101906126a69190612a4a565b6126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90612f8a565b60405180910390fd5b5b505050565b600081600001805490509050919050565b600081836000018054905011612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90612e0a565b60405180910390fd5b826000018281548110612783577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60606127a584846000856127ae565b90509392505050565b60606127b9856128d0565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90612f6a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128219190612d3b565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b509150915081156128785780925050506128c8565b60008151111561288b5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9190612de8565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561291257506000801b8214155b92505050919050565b60008135905061292a8161367d565b92915050565b60008151905061293f81613694565b92915050565b600081359050612954816136ab565b92915050565b60006020828403121561296c57600080fd5b600061297a8482850161291b565b91505092915050565b6000806040838503121561299657600080fd5b60006129a48582860161291b565b92505060206129b58582860161291b565b9150509250929050565b6000806000606084860312156129d457600080fd5b60006129e28682870161291b565b93505060206129f38682870161291b565b9250506040612a0486828701612945565b9150509250925092565b60008060408385031215612a2157600080fd5b6000612a2f8582860161291b565b9250506020612a4085828601612945565b9150509250929050565b600060208284031215612a5c57600080fd5b6000612a6a84828501612930565b91505092915050565b600060208284031215612a8557600080fd5b6000612a9384828501612945565b91505092915050565b612aa581613170565b82525050565b612ab481613182565b82525050565b6000612ac582613029565b612acf818561303f565b9350612adf8185602086016131e9565b80840191505092915050565b612af4816131c5565b82525050565b6000612b0582613034565b612b0f818561304a565b9350612b1f8185602086016131e9565b612b2881613324565b840191505092915050565b6000612b4060228361304a565b9150612b4b82613335565b604082019050919050565b6000612b6360238361304a565b9150612b6e82613384565b604082019050919050565b6000612b8660158361304a565b9150612b91826133d3565b602082019050919050565b6000612ba960228361304a565b9150612bb4826133fc565b604082019050919050565b6000612bcc60108361304a565b9150612bd78261344b565b602082019050919050565b6000612bef600b8361304a565b9150612bfa82613474565b602082019050919050565b6000612c1260078361304a565b9150612c1d8261349d565b602082019050919050565b6000612c35600f8361304a565b9150612c40826134c6565b602082019050919050565b6000612c5860258361304a565b9150612c63826134ef565b604082019050919050565b6000612c7b60108361304a565b9150612c868261353e565b602082019050919050565b6000612c9e60248361304a565b9150612ca982613567565b604082019050919050565b6000612cc1601d8361304a565b9150612ccc826135b6565b602082019050919050565b6000612ce4602a8361304a565b9150612cef826135df565b604082019050919050565b6000612d0760268361304a565b9150612d128261362e565b604082019050919050565b612d26816131ae565b82525050565b612d35816131b8565b82525050565b6000612d478284612aba565b915081905092915050565b6000606082019050612d676000830186612a9c565b612d746020830185612a9c565b612d816040830184612d1d565b949350505050565b6000604082019050612d9e6000830185612a9c565b612dab6020830184612d1d565b9392505050565b6000602082019050612dc76000830184612aab565b92915050565b6000602082019050612de26000830184612aeb565b92915050565b60006020820190508181036000830152612e028184612afa565b905092915050565b60006020820190508181036000830152612e2381612b33565b9050919050565b60006020820190508181036000830152612e4381612b56565b9050919050565b60006020820190508181036000830152612e6381612b79565b9050919050565b60006020820190508181036000830152612e8381612b9c565b9050919050565b60006020820190508181036000830152612ea381612bbf565b9050919050565b60006020820190508181036000830152612ec381612be2565b9050919050565b60006020820190508181036000830152612ee381612c05565b9050919050565b60006020820190508181036000830152612f0381612c28565b9050919050565b60006020820190508181036000830152612f2381612c4b565b9050919050565b60006020820190508181036000830152612f4381612c6e565b9050919050565b60006020820190508181036000830152612f6381612c91565b9050919050565b60006020820190508181036000830152612f8381612cb4565b9050919050565b60006020820190508181036000830152612fa381612cd7565b9050919050565b60006020820190508181036000830152612fc381612cfa565b9050919050565b6000602082019050612fdf6000830184612d1d565b92915050565b6000604082019050612ffa6000830185612d1d565b6130076020830184612d1d565b9392505050565b60006020820190506130236000830184612d2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613066826131ae565b9150613071836131ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a6576130a5613297565b5b828201905092915050565b60006130bc826131ae565b91506130c7836131ae565b9250826130d7576130d66132c6565b5b828204905092915050565b60006130ed826131ae565b91506130f8836131ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313157613130613297565b5b828202905092915050565b6000613147826131ae565b9150613152836131ae565b92508282101561316557613164613297565b5b828203905092915050565b600061317b8261318e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006131d0826131d7565b9050919050565b60006131e28261318e565b9050919050565b60005b838110156132075780820151818401526020810190506131ec565b83811115613216576000848401525b50505050565b6000600282049050600182168061323457607f821691505b60208210811415613248576132476132f5565b5b50919050565b6000613259826131ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328c5761328b613297565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61368681613170565b811461369157600080fd5b50565b61369d81613182565b81146136a857600080fd5b50565b6136b4816131ae565b81146136bf57600080fd5b5056fea26469706673582212206ae4bd9c94778c0c88194747201c993cd8ce97d9ef48c311bd7a2fbf2bd8246364736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
-----Decoded View---------------
Arg [0] : _lpToken (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Deployed Bytecode Sourcemap
26709:9427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32540:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27884:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28870:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32256:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28161:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29037:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35970:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30726:799;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28070:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29307:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27445:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28268:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35223:735;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27975:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29526:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28546:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29994:720;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29755:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31537:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28719:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31831:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32540:175;32608:7;32629:9;32640;32653:15;:13;:15::i;:::-;32628:40;;;;32706:1;32701;32687:11;:15;;;;:::i;:::-;32686:21;;;;:::i;:::-;32679:28;;;;32540:175;;;:::o;27884:83::-;27921:13;27954:5;27947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27884:83;:::o;28870:159::-;28945:4;28962:37;28971:10;28983:7;28992:6;28962:8;:37::i;:::-;29017:4;29010:11;;28870:159;;;;:::o;29894:88::-;29936:7;29963:11;;29956:18;;29894:88;:::o;32256:272::-;32338:3;;;;;;;;;;;32324:17;;:10;:17;;;32316:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;32372:41;32395:8;32405:7;32372:22;:41::i;:::-;32364:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32469:1;32445:12;:21;32458:7;32445:21;;;;;;;;;;;;;;;:25;;;;32481:39;32502:8;32512:7;32481:20;:39::i;:::-;;32256:272;:::o;28161:99::-;28214:7;28241:11;;28234:18;;28161:99;:::o;29037:262::-;29135:4;29152:36;29162:6;29170:9;29181:6;29152:9;:36::i;:::-;29199:70;29208:6;29216:10;29262:6;29228:11;:19;29240:6;29228:19;;;;;;;;;;;;;;;:31;29248:10;29228:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;29199:8;:70::i;:::-;29287:4;29280:11;;29037:262;;;;;:::o;35970:163::-;36058:2;;;;;;;;;;;36044:16;;:10;:16;;;36036:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:5;36092:2;;:10;;;;;;;;;;;;;;;;;;36119:6;36113:3;;:12;;;;;;;;;;;;;;;;;;35970:163;;:::o;30726:799::-;30813:7;30788:21;30798:10;30788:9;:21::i;:::-;:32;;:60;;;;;30835:13;:11;:13::i;:::-;30824:7;:24;;30788:60;30780:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30880:9;30891;30904:15;:13;:15::i;:::-;30879:40;;;;30930:11;30954:3;30944:7;:13;;;;:::i;:::-;30930:27;;30968:10;30987:2;30981:3;:8;;;;:::i;:::-;30968:21;;31000:11;31024:3;31014:7;:13;;;;:::i;:::-;31000:27;;31041:22;31052:10;31041;:22::i;:::-;31038:231;;;31108:7;31080:12;:24;31093:10;31080:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31175:1;31170;31160:7;:11;;;;:::i;:::-;31159:17;;;;:::i;:::-;31130:12;:24;31143:10;31130:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;31038:231;;;31255:1;31250;31240:7;:11;;;;:::i;:::-;31239:17;;;;:::i;:::-;31210:12;:24;31223:10;31210:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;31038:231;31301:2;31295:3;:8;;;;:::i;:::-;31279:11;;:25;;;;;;;:::i;:::-;;;;;;;;31351:1;31345;31339:2;31333:3;:8;;;;:::i;:::-;31332:14;;;;:::i;:::-;31331:21;;;;:::i;:::-;31315:11;;:38;;;;;;;:::i;:::-;;;;;;;;31396:1;31391;31386:2;:6;;;;:::i;:::-;31385:12;;;;:::i;:::-;31364;:16;31377:2;;;;;;;;;;;31364:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;31424:2;31409:11;;:17;;;;;;;:::i;:::-;;;;;;;;31437:37;31458:10;31470:3;31437:7;;;;;;;;;;;:20;;;;:37;;;;;:::i;:::-;31501:10;31490:27;;;31513:3;31490:27;;;;;;:::i;:::-;;;;;;;;30726:799;;;;;;:::o;28070:83::-;28111:5;28136:9;;;;;;;;;;;28129:16;;28070:83;:::o;29307:211::-;29395:4;29412:76;29421:10;29433:7;29477:10;29442:11;:23;29454:10;29442:23;;;;;;;;;;;;;;;:32;29466:7;29442:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;29412:8;:76::i;:::-;29506:4;29499:11;;29307:211;;;;:::o;27445:21::-;;;;;;;;;;;;;:::o;28268:270::-;28334:7;28358:41;28381:8;28391:7;28358:22;:41::i;:::-;28354:75;;;28408:12;:21;28421:7;28408:21;;;;;;;;;;;;;;;;28401:28;;;;28354:75;28441:9;28452;28465:15;:13;:15::i;:::-;28440:40;;;;28529:1;28523;28499:12;:21;28512:7;28499:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28498:32;;;;:::i;:::-;28491:39;;;;28268:270;;;;:::o;35223:735::-;35268:7;35277;35315:1;35300:11;;:16;:36;;;;35335:1;35320:11;;:16;35300:36;35297:63;;;35346:10;35358:1;35338:22;;;;;;35297:63;35371:15;35389:11;;35371:29;;35411:15;35429:11;;35411:29;;35456:9;35451:379;35475:30;35496:8;35475:20;:30::i;:::-;35471:1;:34;35451:379;;;35577:7;35531:12;:43;35544:29;35561:8;35571:1;35544:16;:29::i;:::-;35531:43;;;;;;;;;;;;;;;;:53;:110;;;;35634:7;35588:12;:43;35601:29;35618:8;35628:1;35601:16;:29::i;:::-;35588:43;;;;;;;;;;;;;;;;:53;35531:110;35527:149;;;35651:11;;35664;;35643:33;;;;;;;;;35527:149;35703:12;:43;35716:29;35733:8;35743:1;35716:16;:29::i;:::-;35703:43;;;;;;;;;;;;;;;;35691:56;;;;;:::i;:::-;;;35774:12;:43;35787:29;35804:8;35814:1;35787:16;:29::i;:::-;35774:43;;;;;;;;;;;;;;;;35762:56;;;;;:::i;:::-;;;35507:3;;;;;:::i;:::-;;;;35451:379;;;;35868:11;;35854;;:25;;;;:::i;:::-;35844:7;:35;35840:74;;;35889:11;;35902;;35881:33;;;;;;;;35840:74;35933:7;35942;35925:25;;;;;;35223:735;;;:::o;27975:87::-;28014:13;28047:7;28040:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:87;:::o;29526:221::-;29619:4;29636:81;29645:10;29657:7;29701:15;29666:11;:23;29678:10;29666:23;;;;;;;;;;;;;;;:32;29690:7;29666:32;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;29636:8;:81::i;:::-;29735:4;29728:11;;29526:221;;;;:::o;28546:165::-;28624:4;28641:40;28651:10;28663:9;28674:6;28641:9;:40::i;:::-;28699:4;28692:11;;28546:165;;;;:::o;29994:720::-;30065:1;30055:7;:11;30047:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;30103:60;30128:10;30148:4;30155:7;30103;;;;;;;;;;;:24;;;;:60;;;;;;:::i;:::-;30175:9;30186;30199:15;:13;:15::i;:::-;30174:40;;;;30225:11;30249:3;30239:7;:13;;;;:::i;:::-;30225:27;;30264:10;30283:2;30277:3;:8;;;;:::i;:::-;30264:21;;30296:11;30317:1;30310:3;:8;;:38;;30341:7;30310:38;;;30333:3;30322:7;:15;;;;:::i;:::-;30310:38;30296:52;;30374:7;30359:11;;:22;;;;;;;:::i;:::-;;;;;;;;30395;30406:10;30395;:22::i;:::-;30392:95;;;30471:3;30462:7;:12;;;;:::i;:::-;30433;:24;30446:10;30433:24;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;30392:95;30513:2;30498:11;;:17;;;;;;;:::i;:::-;;;;;;;;30558:1;30553;30548:2;:6;;;;:::i;:::-;30547:12;;;;:::i;:::-;30526;:16;30539:2;;;;;;;;;;;30526:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;30606:1;30601;30595:2;30589:3;:8;;;;:::i;:::-;30588:14;;;;:::i;:::-;30587:20;;;;:::i;:::-;30571:11;;:37;;;;;;;:::i;:::-;;;;;;;;30660:1;30655;30649:3;:7;;;;:::i;:::-;30648:13;;;;:::i;:::-;30619:12;:24;30632:10;30619:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;30686:10;30678:28;;;30698:7;30678:28;;;;;;:::i;:::-;;;;;;;;29994:720;;;;;;:::o;29755:131::-;29813:4;29837:41;29860:8;29870:7;29837:22;:41::i;:::-;29830:48;;29755:131;;;:::o;31537:286::-;31602:22;31613:10;31602;:22::i;:::-;31601:23;31593:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31652:9;31663;31676:15;:13;:15::i;:::-;31651:40;;;;31743:1;31738;31732:3;:7;;;;:::i;:::-;31731:13;;;;:::i;:::-;31702:12;:24;31715:10;31702:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;31784:1;31779;31773:3;:7;;;;:::i;:::-;31772:13;;;;:::i;:::-;31756:11;;:30;;;;;;;:::i;:::-;;;;;;;;31812:3;31797:11;;:18;;;;;;;:::i;:::-;;;;;;;;31537:286;;;:::o;28719:143::-;28800:7;28827:11;:18;28839:5;28827:18;;;;;;;;;;;;;;;:27;28846:7;28827:27;;;;;;;;;;;;;;;;28820:34;;28719:143;;;;:::o;31831:417::-;31915:3;;;;;;;;;;;31901:17;;:10;:17;;;31893:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;31950:41;31973:8;31983:7;31950:22;:41::i;:::-;31949:42;31941:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32050:1;32026:12;:21;32039:7;32026:21;;;;;;;;;;;;;;;;:25;32023:171;;;32069:9;32080;32093:15;:13;:15::i;:::-;32068:40;;;;32180:1;32173;32148:12;:21;32161:7;32148:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;32147:35;;;;:::i;:::-;32123:12;:21;32136:7;32123:21;;;;;;;;;;;;;;;:59;;;;32023:171;;;32204:36;32222:8;32232:7;32204:17;:36::i;:::-;;31831:417;:::o;5912:152::-;5982:4;6006:50;6011:3;:10;;6047:5;6031:23;;6023:32;;6006:4;:50::i;:::-;5999:57;;5912:152;;;;:::o;32725:337::-;32835:1;32818:19;;:5;:19;;;;32810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32916:1;32897:21;;:7;:21;;;;32889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33000:6;32970:11;:18;32982:5;32970:18;;;;;;;;;;;;;;;:27;32989:7;32970:27;;;;;;;;;;;;;;;:36;;;;33038:7;33022:32;;33031:5;33022:32;;;33047:6;33022:32;;;;;;:::i;:::-;;;;;;;;32725:337;;;:::o;6484:167::-;6564:4;6588:55;6598:3;:10;;6634:5;6618:23;;6610:32;;6588:9;:55::i;:::-;6581:62;;6484:167;;;;:::o;6240:158::-;6313:4;6337:53;6345:3;:10;;6381:5;6365:23;;6357:32;;6337:7;:53::i;:::-;6330:60;;6240:158;;;;:::o;33803:1412::-;33915:1;33897:20;;:6;:20;;;;33889:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33999:1;33978:23;;:9;:23;;;;33970:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34066:1;34060:3;:7;34052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34122:9;34133;34146:15;:13;:15::i;:::-;34121:40;;;;34172:11;34192:3;34186;:9;;;;:::i;:::-;34172:23;;34206:9;34218:27;34227:6;34235:9;34218:8;:27::i;:::-;34206:39;;34266:17;34260:23;;;;;;;;;;;;;;;;:2;:23;;;;;;;;;;;;;;;;;34256:827;;;34337:1;34332;34326:3;:7;;;;:::i;:::-;34325:13;;;;:::i;:::-;34300:12;:20;34313:6;34300:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34388:3;34382;:9;;;;:::i;:::-;34354:12;:23;34367:9;34354:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34455:1;34450;34443:3;34437;:9;;;;:::i;:::-;34436:15;;;;:::i;:::-;34435:21;;;;:::i;:::-;34407:12;:23;34420:9;34407:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34256:827;;;34485:19;34479:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;34475:608;;;34546:3;34521:12;:20;34534:6;34521:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;34602:1;34597;34591:3;:7;;;;:::i;:::-;34590:13;;;;:::i;:::-;34565:12;:20;34578:6;34565:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34667:1;34662;34655:3;34649;:9;;;;:::i;:::-;34648:15;;;;:::i;:::-;34647:21;;;;:::i;:::-;34619:12;:23;34632:9;34619:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34475:608;;;34697:19;34691:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;34687:396;;;34758:3;34733:12;:20;34746:6;34733:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;34814:1;34809;34803:3;:7;;;;:::i;:::-;34802:13;;;;:::i;:::-;34777:12;:20;34790:6;34777:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34865:3;34859;:9;;;;:::i;:::-;34831:12;:23;34844:9;34831:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34932:1;34927;34920:3;34914;:9;;;;:::i;:::-;34913:15;;;;:::i;:::-;34912:21;;;;:::i;:::-;34884:12;:23;34897:9;34884:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34687:396;;;35004:1;34999;34993:3;:7;;;;:::i;:::-;34992:13;;;;:::i;:::-;34967:12;:20;34980:6;34967:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;35069:1;35064;35057:3;35051;:9;;;;:::i;:::-;35050:15;;;;:::i;:::-;35049:21;;;;:::i;:::-;35021:12;:23;35034:9;35021:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34687:396;34475:608;34256:827;35122:1;35117;35111:3;:7;;;;:::i;:::-;35110:13;;;;:::i;:::-;35093:11;;:31;;;;;;;:::i;:::-;;;;;;;;35150:3;35135:11;;:18;;;;;;;:::i;:::-;;;;;;;;35186:9;35169:38;;35178:6;35169:38;;;35203:3;35197;:9;;;;:::i;:::-;35169:38;;;;;;:::i;:::-;;;;;;;;33803:1412;;;;;;;:::o;23638:177::-;23721:86;23741:5;23771:23;;;23796:2;23800:5;23748:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23721:19;:86::i;:::-;23638:177;;;:::o;6737:117::-;6800:7;6827:19;6835:3;:10;;6827:7;:19::i;:::-;6820:26;;6737:117;;;:::o;7198:158::-;7272:7;7323:22;7327:3;:10;;7339:5;7323:3;:22::i;:::-;7315:31;;7292:56;;7198:158;;;;:::o;23823:205::-;23924:96;23944:5;23974:27;;;24003:4;24009:2;24013:5;23951:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23924:19;:96::i;:::-;23823:205;;;;:::o;976:414::-;1039:4;1061:21;1071:3;1076:5;1061:9;:21::i;:::-;1056:327;;1099:3;:11;;1116:5;1099:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1282:3;:11;;:18;;;;1260:3;:12;;:19;1273:5;1260:19;;;;;;;;;;;:40;;;;1322:4;1315:11;;;;1056:327;1366:5;1359:12;;976:414;;;;;:::o;3196:129::-;3269:4;3316:1;3293:3;:12;;:19;3306:5;3293:19;;;;;;;;;;;;:24;;3286:31;;3196:129;;;;:::o;1566:1544::-;1632:4;1750:18;1771:3;:12;;:19;1784:5;1771:19;;;;;;;;;;;;1750:40;;1821:1;1807:10;:15;1803:1300;;2169:21;2206:1;2193:10;:14;;;;:::i;:::-;2169:38;;2222:17;2263:1;2242:3;:11;;:18;;;;:22;;;;:::i;:::-;2222:42;;2509:17;2529:3;:11;;2541:9;2529:22;;;;;;;;;;;;;;;;;;;;;;;;2509:42;;2675:9;2646:3;:11;;2658:13;2646:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;2794:1;2778:13;:17;;;;:::i;:::-;2752:3;:12;;:23;2765:9;2752:23;;;;;;;;;;;:43;;;;2904:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:3;:12;;:19;3012:5;2999:19;;;;;;;;;;;2992:26;;;3042:4;3035:11;;;;;;;;1803:1300;3086:5;3079:12;;;1566:1544;;;;;:::o;33070:727::-;33146:8;33167:21;33191:40;33214:8;33224:6;33191:22;:40::i;:::-;33167:64;;33242:24;33269:43;33292:8;33302:9;33269:22;:43::i;:::-;33242:70;;33327:16;:40;;;;;33348:19;33347:20;33327:40;33323:448;;;33388:19;33384:23;;33323:448;;;33430:16;33429:17;:40;;;;;33450:19;33429:40;33425:346;;;33490:17;33486:21;;33425:346;;;33530:16;33529:17;:41;;;;;33551:19;33550:20;33529:41;33525:246;;;33591:15;33587:19;;33525:246;;;33628:16;:39;;;;;33648:19;33628:39;33624:147;;;33688:19;33684:23;;33624:147;;;33744:15;33740:19;;33624:147;33525:246;33425:346;33323:448;33781:8;;33070:727;;;;:::o;25941:761::-;26365:23;26391:69;26419:4;26391:69;;;;;;;;;;;;;;;;;26399:5;26391:27;;;;:69;;;;;:::i;:::-;26365:95;;26495:1;26475:10;:17;:21;26471:224;;;26617:10;26606:30;;;;;;;;;;;;:::i;:::-;26598:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26471:224;25941:761;;;:::o;3411:109::-;3467:7;3494:3;:11;;:18;;;;3487:25;;3411:109;;;:::o;3864:204::-;3931:7;3980:5;3959:3;:11;;:18;;;;:26;3951:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4042:3;:11;;4054:5;4042:18;;;;;;;;;;;;;;;;;;;;;;;;4035:25;;3864:204;;;;:::o;16342:196::-;16445:12;16477:53;16500:6;16508:4;16514:1;16517:12;16477:22;:53::i;:::-;16470:60;;16342:196;;;;;:::o;17719:979::-;17849:12;17882:18;17893:6;17882:10;:18::i;:::-;17874:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18008:12;18022:23;18049:6;:11;;18069:8;18080:4;18049:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18007:78;;;;18100:7;18096:595;;;18131:10;18124:17;;;;;;18096:595;18265:1;18245:10;:17;:21;18241:439;;;18508:10;18502:17;18569:15;18556:10;18552:2;18548:19;18541:44;18456:148;18651:12;18644:20;;;;;;;;;;;:::i;:::-;;;;;;;;17719:979;;;;;;;:::o;13217:619::-;13277:4;13539:16;13566:19;13588:66;13566:88;;;;13757:7;13745:20;13733:32;;13797:11;13785:8;:23;;:42;;;;;13824:3;13812:15;;:8;:15;;13785:42;13777:51;;;;13217:619;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:262::-;499:6;548:2;536:9;527:7;523:23;519:32;516:2;;;564:1;561;554:12;516:2;607:1;632:53;677:7;668:6;657:9;653:22;632:53;:::i;:::-;622:63;;578:117;506:196;;;;:::o;708:407::-;776:6;784;833:2;821:9;812:7;808:23;804:32;801:2;;;849:1;846;839:12;801:2;892:1;917:53;962:7;953:6;942:9;938:22;917:53;:::i;:::-;907:63;;863:117;1019:2;1045:53;1090:7;1081:6;1070:9;1066:22;1045:53;:::i;:::-;1035:63;;990:118;791:324;;;;;:::o;1121:552::-;1198:6;1206;1214;1263:2;1251:9;1242:7;1238:23;1234:32;1231:2;;;1279:1;1276;1269:12;1231:2;1322:1;1347:53;1392:7;1383:6;1372:9;1368:22;1347:53;:::i;:::-;1337:63;;1293:117;1449:2;1475:53;1520:7;1511:6;1500:9;1496:22;1475:53;:::i;:::-;1465:63;;1420:118;1577:2;1603:53;1648:7;1639:6;1628:9;1624:22;1603:53;:::i;:::-;1593:63;;1548:118;1221:452;;;;;:::o;1679:407::-;1747:6;1755;1804:2;1792:9;1783:7;1779:23;1775:32;1772:2;;;1820:1;1817;1810:12;1772:2;1863:1;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1834:117;1990:2;2016:53;2061:7;2052:6;2041:9;2037:22;2016:53;:::i;:::-;2006:63;;1961:118;1762:324;;;;;:::o;2092:278::-;2159:6;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2224:1;2221;2214:12;2176:2;2267:1;2292:61;2345:7;2336:6;2325:9;2321:22;2292:61;:::i;:::-;2282:71;;2238:125;2166:204;;;;:::o;2376:262::-;2435:6;2484:2;2472:9;2463:7;2459:23;2455:32;2452:2;;;2500:1;2497;2490:12;2452:2;2543:1;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2514:117;2442:196;;;;:::o;2644:118::-;2731:24;2749:5;2731:24;:::i;:::-;2726:3;2719:37;2709:53;;:::o;2768:109::-;2849:21;2864:5;2849:21;:::i;:::-;2844:3;2837:34;2827:50;;:::o;2883:373::-;2987:3;3015:38;3047:5;3015:38;:::i;:::-;3069:88;3150:6;3145:3;3069:88;:::i;:::-;3062:95;;3166:52;3211:6;3206:3;3199:4;3192:5;3188:16;3166:52;:::i;:::-;3243:6;3238:3;3234:16;3227:23;;2991:265;;;;;:::o;3262:159::-;3363:51;3408:5;3363:51;:::i;:::-;3358:3;3351:64;3341:80;;:::o;3427:364::-;3515:3;3543:39;3576:5;3543:39;:::i;:::-;3598:71;3662:6;3657:3;3598:71;:::i;:::-;3591:78;;3678:52;3723:6;3718:3;3711:4;3704:5;3700:16;3678:52;:::i;:::-;3755:29;3777:6;3755:29;:::i;:::-;3750:3;3746:39;3739:46;;3519:272;;;;;:::o;3797:366::-;3939:3;3960:67;4024:2;4019:3;3960:67;:::i;:::-;3953:74;;4036:93;4125:3;4036:93;:::i;:::-;4154:2;4149:3;4145:12;4138:19;;3943:220;;;:::o;4169:366::-;4311:3;4332:67;4396:2;4391:3;4332:67;:::i;:::-;4325:74;;4408:93;4497:3;4408:93;:::i;:::-;4526:2;4521:3;4517:12;4510:19;;4315:220;;;:::o;4541:366::-;4683:3;4704:67;4768:2;4763:3;4704:67;:::i;:::-;4697:74;;4780:93;4869:3;4780:93;:::i;:::-;4898:2;4893:3;4889:12;4882:19;;4687:220;;;:::o;4913:366::-;5055:3;5076:67;5140:2;5135:3;5076:67;:::i;:::-;5069:74;;5152:93;5241:3;5152:93;:::i;:::-;5270:2;5265:3;5261:12;5254:19;;5059:220;;;:::o;5285:366::-;5427:3;5448:67;5512:2;5507:3;5448:67;:::i;:::-;5441:74;;5524:93;5613:3;5524:93;:::i;:::-;5642:2;5637:3;5633:12;5626:19;;5431:220;;;:::o;5657:366::-;5799:3;5820:67;5884:2;5879:3;5820:67;:::i;:::-;5813:74;;5896:93;5985:3;5896:93;:::i;:::-;6014:2;6009:3;6005:12;5998:19;;5803:220;;;:::o;6029:365::-;6171:3;6192:66;6256:1;6251:3;6192:66;:::i;:::-;6185:73;;6267:93;6356:3;6267:93;:::i;:::-;6385:2;6380:3;6376:12;6369:19;;6175:219;;;:::o;6400:366::-;6542:3;6563:67;6627:2;6622:3;6563:67;:::i;:::-;6556:74;;6639:93;6728:3;6639:93;:::i;:::-;6757:2;6752:3;6748:12;6741:19;;6546:220;;;:::o;6772:366::-;6914:3;6935:67;6999:2;6994:3;6935:67;:::i;:::-;6928:74;;7011:93;7100:3;7011:93;:::i;:::-;7129:2;7124:3;7120:12;7113:19;;6918:220;;;:::o;7144:366::-;7286:3;7307:67;7371:2;7366:3;7307:67;:::i;:::-;7300:74;;7383:93;7472:3;7383:93;:::i;:::-;7501:2;7496:3;7492:12;7485:19;;7290:220;;;:::o;7516:366::-;7658:3;7679:67;7743:2;7738:3;7679:67;:::i;:::-;7672:74;;7755:93;7844:3;7755:93;:::i;:::-;7873:2;7868:3;7864:12;7857:19;;7662:220;;;:::o;7888:366::-;8030:3;8051:67;8115:2;8110:3;8051:67;:::i;:::-;8044:74;;8127:93;8216:3;8127:93;:::i;:::-;8245:2;8240:3;8236:12;8229:19;;8034:220;;;:::o;8260:366::-;8402:3;8423:67;8487:2;8482:3;8423:67;:::i;:::-;8416:74;;8499:93;8588:3;8499:93;:::i;:::-;8617:2;8612:3;8608:12;8601:19;;8406:220;;;:::o;8632:366::-;8774:3;8795:67;8859:2;8854:3;8795:67;:::i;:::-;8788:74;;8871:93;8960:3;8871:93;:::i;:::-;8989:2;8984:3;8980:12;8973:19;;8778:220;;;:::o;9004:118::-;9091:24;9109:5;9091:24;:::i;:::-;9086:3;9079:37;9069:53;;:::o;9128:112::-;9211:22;9227:5;9211:22;:::i;:::-;9206:3;9199:35;9189:51;;:::o;9246:271::-;9376:3;9398:93;9487:3;9478:6;9398:93;:::i;:::-;9391:100;;9508:3;9501:10;;9380:137;;;;:::o;9523:442::-;9672:4;9710:2;9699:9;9695:18;9687:26;;9723:71;9791:1;9780:9;9776:17;9767:6;9723:71;:::i;:::-;9804:72;9872:2;9861:9;9857:18;9848:6;9804:72;:::i;:::-;9886;9954:2;9943:9;9939:18;9930:6;9886:72;:::i;:::-;9677:288;;;;;;:::o;9971:332::-;10092:4;10130:2;10119:9;10115:18;10107:26;;10143:71;10211:1;10200:9;10196:17;10187:6;10143:71;:::i;:::-;10224:72;10292:2;10281:9;10277:18;10268:6;10224:72;:::i;:::-;10097:206;;;;;:::o;10309:210::-;10396:4;10434:2;10423:9;10419:18;10411:26;;10447:65;10509:1;10498:9;10494:17;10485:6;10447:65;:::i;:::-;10401:118;;;;:::o;10525:250::-;10632:4;10670:2;10659:9;10655:18;10647:26;;10683:85;10765:1;10754:9;10750:17;10741:6;10683:85;:::i;:::-;10637:138;;;;:::o;10781:313::-;10894:4;10932:2;10921:9;10917:18;10909:26;;10981:9;10975:4;10971:20;10967:1;10956:9;10952:17;10945:47;11009:78;11082:4;11073:6;11009:78;:::i;:::-;11001:86;;10899:195;;;;:::o;11100:419::-;11266:4;11304:2;11293:9;11289:18;11281:26;;11353:9;11347:4;11343:20;11339:1;11328:9;11324:17;11317:47;11381:131;11507:4;11381:131;:::i;:::-;11373:139;;11271:248;;;:::o;11525:419::-;11691:4;11729:2;11718:9;11714:18;11706:26;;11778:9;11772:4;11768:20;11764:1;11753:9;11749:17;11742:47;11806:131;11932:4;11806:131;:::i;:::-;11798:139;;11696:248;;;:::o;11950:419::-;12116:4;12154:2;12143:9;12139:18;12131:26;;12203:9;12197:4;12193:20;12189:1;12178:9;12174:17;12167:47;12231:131;12357:4;12231:131;:::i;:::-;12223:139;;12121:248;;;:::o;12375:419::-;12541:4;12579:2;12568:9;12564:18;12556:26;;12628:9;12622:4;12618:20;12614:1;12603:9;12599:17;12592:47;12656:131;12782:4;12656:131;:::i;:::-;12648:139;;12546:248;;;:::o;12800:419::-;12966:4;13004:2;12993:9;12989:18;12981:26;;13053:9;13047:4;13043:20;13039:1;13028:9;13024:17;13017:47;13081:131;13207:4;13081:131;:::i;:::-;13073:139;;12971:248;;;:::o;13225:419::-;13391:4;13429:2;13418:9;13414:18;13406:26;;13478:9;13472:4;13468:20;13464:1;13453:9;13449:17;13442:47;13506:131;13632:4;13506:131;:::i;:::-;13498:139;;13396:248;;;:::o;13650:419::-;13816:4;13854:2;13843:9;13839:18;13831:26;;13903:9;13897:4;13893:20;13889:1;13878:9;13874:17;13867:47;13931:131;14057:4;13931:131;:::i;:::-;13923:139;;13821:248;;;:::o;14075:419::-;14241:4;14279:2;14268:9;14264:18;14256:26;;14328:9;14322:4;14318:20;14314:1;14303:9;14299:17;14292:47;14356:131;14482:4;14356:131;:::i;:::-;14348:139;;14246:248;;;:::o;14500:419::-;14666:4;14704:2;14693:9;14689:18;14681:26;;14753:9;14747:4;14743:20;14739:1;14728:9;14724:17;14717:47;14781:131;14907:4;14781:131;:::i;:::-;14773:139;;14671:248;;;:::o;14925:419::-;15091:4;15129:2;15118:9;15114:18;15106:26;;15178:9;15172:4;15168:20;15164:1;15153:9;15149:17;15142:47;15206:131;15332:4;15206:131;:::i;:::-;15198:139;;15096:248;;;:::o;15350:419::-;15516:4;15554:2;15543:9;15539:18;15531:26;;15603:9;15597:4;15593:20;15589:1;15578:9;15574:17;15567:47;15631:131;15757:4;15631:131;:::i;:::-;15623:139;;15521:248;;;:::o;15775:419::-;15941:4;15979:2;15968:9;15964:18;15956:26;;16028:9;16022:4;16018:20;16014:1;16003:9;15999:17;15992:47;16056:131;16182:4;16056:131;:::i;:::-;16048:139;;15946:248;;;:::o;16200:419::-;16366:4;16404:2;16393:9;16389:18;16381:26;;16453:9;16447:4;16443:20;16439:1;16428:9;16424:17;16417:47;16481:131;16607:4;16481:131;:::i;:::-;16473:139;;16371:248;;;:::o;16625:419::-;16791:4;16829:2;16818:9;16814:18;16806:26;;16878:9;16872:4;16868:20;16864:1;16853:9;16849:17;16842:47;16906:131;17032:4;16906:131;:::i;:::-;16898:139;;16796:248;;;:::o;17050:222::-;17143:4;17181:2;17170:9;17166:18;17158:26;;17194:71;17262:1;17251:9;17247:17;17238:6;17194:71;:::i;:::-;17148:124;;;;:::o;17278:332::-;17399:4;17437:2;17426:9;17422:18;17414:26;;17450:71;17518:1;17507:9;17503:17;17494:6;17450:71;:::i;:::-;17531:72;17599:2;17588:9;17584:18;17575:6;17531:72;:::i;:::-;17404:206;;;;;:::o;17616:214::-;17705:4;17743:2;17732:9;17728:18;17720:26;;17756:67;17820:1;17809:9;17805:17;17796:6;17756:67;:::i;:::-;17710:120;;;;:::o;17836:98::-;17887:6;17921:5;17915:12;17905:22;;17894:40;;;:::o;17940:99::-;17992:6;18026:5;18020:12;18010:22;;17999:40;;;:::o;18045:147::-;18146:11;18183:3;18168:18;;18158:34;;;;:::o;18198:169::-;18282:11;18316:6;18311:3;18304:19;18356:4;18351:3;18347:14;18332:29;;18294:73;;;;:::o;18373:305::-;18413:3;18432:20;18450:1;18432:20;:::i;:::-;18427:25;;18466:20;18484:1;18466:20;:::i;:::-;18461:25;;18620:1;18552:66;18548:74;18545:1;18542:81;18539:2;;;18626:18;;:::i;:::-;18539:2;18670:1;18667;18663:9;18656:16;;18417:261;;;;:::o;18684:185::-;18724:1;18741:20;18759:1;18741:20;:::i;:::-;18736:25;;18775:20;18793:1;18775:20;:::i;:::-;18770:25;;18814:1;18804:2;;18819:18;;:::i;:::-;18804:2;18861:1;18858;18854:9;18849:14;;18726:143;;;;:::o;18875:348::-;18915:7;18938:20;18956:1;18938:20;:::i;:::-;18933:25;;18972:20;18990:1;18972:20;:::i;:::-;18967:25;;19160:1;19092:66;19088:74;19085:1;19082:81;19077:1;19070:9;19063:17;19059:105;19056:2;;;19167:18;;:::i;:::-;19056:2;19215:1;19212;19208:9;19197:20;;18923:300;;;;:::o;19229:191::-;19269:4;19289:20;19307:1;19289:20;:::i;:::-;19284:25;;19323:20;19341:1;19323:20;:::i;:::-;19318:25;;19362:1;19359;19356:8;19353:2;;;19367:18;;:::i;:::-;19353:2;19412:1;19409;19405:9;19397:17;;19274:146;;;;:::o;19426:96::-;19463:7;19492:24;19510:5;19492:24;:::i;:::-;19481:35;;19471:51;;;:::o;19528:90::-;19562:7;19605:5;19598:13;19591:21;19580:32;;19570:48;;;:::o;19624:126::-;19661:7;19701:42;19694:5;19690:54;19679:65;;19669:81;;;:::o;19756:77::-;19793:7;19822:5;19811:16;;19801:32;;;:::o;19839:86::-;19874:7;19914:4;19907:5;19903:16;19892:27;;19882:43;;;:::o;19931:154::-;19995:9;20028:51;20073:5;20028:51;:::i;:::-;20015:64;;20005:80;;;:::o;20091:127::-;20155:9;20188:24;20206:5;20188:24;:::i;:::-;20175:37;;20165:53;;;:::o;20224:307::-;20292:1;20302:113;20316:6;20313:1;20310:13;20302:113;;;20401:1;20396:3;20392:11;20386:18;20382:1;20377:3;20373:11;20366:39;20338:2;20335:1;20331:10;20326:15;;20302:113;;;20433:6;20430:1;20427:13;20424:2;;;20513:1;20504:6;20499:3;20495:16;20488:27;20424:2;20273:258;;;;:::o;20537:320::-;20581:6;20618:1;20612:4;20608:12;20598:22;;20665:1;20659:4;20655:12;20686:18;20676:2;;20742:4;20734:6;20730:17;20720:27;;20676:2;20804;20796:6;20793:14;20773:18;20770:38;20767:2;;;20823:18;;:::i;:::-;20767:2;20588:269;;;;:::o;20863:233::-;20902:3;20925:24;20943:5;20925:24;:::i;:::-;20916:33;;20971:66;20964:5;20961:77;20958:2;;;21041:18;;:::i;:::-;20958:2;21088:1;21081:5;21077:13;21070:20;;20906:190;;;:::o;21102:180::-;21150:77;21147:1;21140:88;21247:4;21244:1;21237:15;21271:4;21268:1;21261:15;21288:180;21336:77;21333:1;21326:88;21433:4;21430:1;21423:15;21457:4;21454:1;21447:15;21474:180;21522:77;21519:1;21512:88;21619:4;21616:1;21609:15;21643:4;21640:1;21633:15;21660:102;21701:6;21752:2;21748:7;21743:2;21736:5;21732:14;21728:28;21718:38;;21708:54;;;:::o;21768:221::-;21908:34;21904:1;21896:6;21892:14;21885:58;21977:4;21972:2;21964:6;21960:15;21953:29;21874:115;:::o;21995:222::-;22135:34;22131:1;22123:6;22119:14;22112:58;22204:5;22199:2;22191:6;22187:15;22180:30;22101:116;:::o;22223:171::-;22363:23;22359:1;22351:6;22347:14;22340:47;22329:65;:::o;22400:221::-;22540:34;22536:1;22528:6;22524:14;22517:58;22609:4;22604:2;22596:6;22592:15;22585:29;22506:115;:::o;22627:166::-;22767:18;22763:1;22755:6;22751:14;22744:42;22733:60;:::o;22799:161::-;22939:13;22935:1;22927:6;22923:14;22916:37;22905:55;:::o;22966:157::-;23106:9;23102:1;23094:6;23090:14;23083:33;23072:51;:::o;23129:165::-;23269:17;23265:1;23257:6;23253:14;23246:41;23235:59;:::o;23300:224::-;23440:34;23436:1;23428:6;23424:14;23417:58;23509:7;23504:2;23496:6;23492:15;23485:32;23406:118;:::o;23530:166::-;23670:18;23666:1;23658:6;23654:14;23647:42;23636:60;:::o;23702:223::-;23842:34;23838:1;23830:6;23826:14;23819:58;23911:6;23906:2;23898:6;23894:15;23887:31;23808:117;:::o;23931:179::-;24071:31;24067:1;24059:6;24055:14;24048:55;24037:73;:::o;24116:229::-;24256:34;24252:1;24244:6;24240:14;24233:58;24325:12;24320:2;24312:6;24308:15;24301:37;24222:123;:::o;24351:225::-;24491:34;24487:1;24479:6;24475:14;24468:58;24560:8;24555:2;24547:6;24543:15;24536:33;24457:119;:::o;24582:122::-;24655:24;24673:5;24655:24;:::i;:::-;24648:5;24645:35;24635:2;;24694:1;24691;24684:12;24635:2;24625:79;:::o;24710:116::-;24780:21;24795:5;24780:21;:::i;:::-;24773:5;24770:32;24760:2;;24816:1;24813;24806:12;24760:2;24750:76;:::o;24832:122::-;24905:24;24923:5;24905:24;:::i;:::-;24898:5;24895:35;24885:2;;24944:1;24941;24934:12;24885:2;24875:79;:::o
Swarm Source
ipfs://6ae4bd9c94778c0c88194747201c993cd8ce97d9ef48c311bd7a2fbf2bd82463
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1 | 59,997.0695 | $59,997.07 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.