More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,304 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20984564 | 59 days ago | IN | 0 ETH | 0.00029605 | ||||
Approve | 20845611 | 79 days ago | IN | 0 ETH | 0.00032827 | ||||
Approve | 20545169 | 121 days ago | IN | 0 ETH | 0.00002573 | ||||
Approve | 20545168 | 121 days ago | IN | 0 ETH | 0.00003252 | ||||
Approve | 19840381 | 219 days ago | IN | 0 ETH | 0.00037176 | ||||
Approve | 19077044 | 326 days ago | IN | 0 ETH | 0.00042292 | ||||
Approve | 18945367 | 345 days ago | IN | 0 ETH | 0.00065964 | ||||
Approve | 18945367 | 345 days ago | IN | 0 ETH | 0.00065927 | ||||
Approve | 18578575 | 396 days ago | IN | 0 ETH | 0.00121876 | ||||
Permit | 18422101 | 418 days ago | IN | 0 ETH | 0.001262 | ||||
Permit | 18274461 | 439 days ago | IN | 0 ETH | 0.00033826 | ||||
Permit | 18173589 | 453 days ago | IN | 0 ETH | 0.00052272 | ||||
Approve | 17433847 | 556 days ago | IN | 0 ETH | 0.00048874 | ||||
Approve | 17011227 | 616 days ago | IN | 0 ETH | 0.00050692 | ||||
Approve | 16463431 | 693 days ago | IN | 0 ETH | 0.00040184 | ||||
Approve | 16463431 | 693 days ago | IN | 0 ETH | 0.00040184 | ||||
Transfer | 16411844 | 700 days ago | IN | 0 ETH | 0.00074857 | ||||
Transfer | 16369235 | 706 days ago | IN | 0 ETH | 0.0008071 | ||||
Transfer | 16290624 | 717 days ago | IN | 0 ETH | 0.00182797 | ||||
Approve | 16012759 | 756 days ago | IN | 0 ETH | 0.00033439 | ||||
Approve | 15911142 | 770 days ago | IN | 0 ETH | 0.00026934 | ||||
Approve | 15911133 | 770 days ago | IN | 0 ETH | 0.00029547 | ||||
Approve | 15363242 | 850 days ago | IN | 0 ETH | 0.00012936 | ||||
Approve | 15062147 | 897 days ago | IN | 0 ETH | 0.00049804 | ||||
Approve | 15062077 | 897 days ago | IN | 0 ETH | 0.00042887 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GenerationalWealthSocietyERC20Token
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-18 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.5; 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]; } function _getValues(Set storage set_) private view returns (bytes32[] storage) { return set_._values; } // TODO needs insert function that maintains order. // TODO needs NatSpec documentation comment. /** * Inserts new value by moving existing value at provided index to end of array and setting provided value at provided index */ function _insert(Set storage set_, uint256 index_, bytes32 valueToInsert_) private returns (bool) { require(set_._values.length > index_); require(!_contains(set_, valueToInsert_), "Remove value you wish to insert if you wish to reorder array."); bytes32 existingValue_ = _at(set_, index_); set_._values[index_] = valueToInsert_; return _add(set_, existingValue_); } struct Bytes4Set { 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(Bytes4Set storage set, bytes4 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(Bytes4Set storage set, bytes4 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes4Set storage set, bytes4 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values on the set. O(1). */ function length(Bytes4Set 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(Bytes4Set storage set, uint256 index) internal view returns (bytes4) { return bytes4(_at(set._inner, index)); } function getValues(Bytes4Set storage set_) internal view returns (bytes4[] memory) { bytes4[] memory bytes4Array_; for (uint256 iteration_ = 0; _length(set_._inner) > iteration_; iteration_++) { bytes4Array_[iteration_] = bytes4(_at(set_._inner, iteration_)); } return bytes4Array_; } function insert(Bytes4Set storage set_, uint256 index_, bytes4 valueToInsert_) internal returns (bool) { return _insert(set_._inner, index_, valueToInsert_); } 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 on 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); } function getValues(Bytes32Set storage set_) internal view returns (bytes4[] memory) { bytes4[] memory bytes4Array_; for (uint256 iteration_ = 0; _length(set_._inner) >= iteration_; iteration_++) { bytes4Array_[iteration_] = bytes4(at(set_, iteration_)); } return bytes4Array_; } function insert(Bytes32Set storage set_, uint256 index_, bytes32 valueToInsert_) internal returns (bool) { return _insert(set_._inner, index_, valueToInsert_); } // 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(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(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(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(uint256(_at(set._inner, index))); } /** * TODO Might require explicit conversion of bytes32[] to address[]. * Might require iteration. */ function getValues(AddressSet storage set_) internal view returns (address[] memory) { address[] memory addressArray; for (uint256 iteration_ = 0; _length(set_._inner) >= iteration_; iteration_++) { addressArray[iteration_] = at(set_, iteration_); } return addressArray; } function insert(AddressSet storage set_, uint256 index_, address valueToInsert_) internal returns (bool) { return _insert(set_._inner, index_, bytes32(uint256(valueToInsert_))); } // 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)); } struct UInt256Set { 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(UInt256Set 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(UInt256Set 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(UInt256Set 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(UInt256Set 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(UInt256Set storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } 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); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add(div(a, 2), 1); while (b < c) { c = b; b = div(add(div(a, b), b), 2); } } else if (a != 0) { c = 1; } } function percentageAmount(uint256 total_, uint8 percentage_) internal pure returns (uint256 percentAmount_) { return div(mul(total_, percentage_), 1000); } function substractPercentage(uint256 total_, uint8 percentageToSub_) internal pure returns (uint256 result_) { return sub(total_, div(mul(total_, percentageToSub_), 1000)); } function percentageOfTotal(uint256 part_, uint256 total_) internal pure returns (uint256 percent_) { return div(mul(part_, 100), total_); } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } function quadraticPricing(uint256 payment_, uint256 multiplier_) internal pure returns (uint256) { return sqrrt(mul(multiplier_, payment_)); } function bondingCurve(uint256 supply_, uint256 multiplier_) internal pure returns (uint256) { return mul(multiplier_, supply_); } } abstract contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256("ERC20Token"); // Present in ERC777 mapping(address => uint256) internal _balances; // Present in ERC777 mapping(address => mapping(address => uint256)) internal _allowances; // Present in ERC777 uint256 internal _totalSupply; // Present in ERC777 string internal _name; // Present in ERC777 string internal _symbol; // Present in ERC777 uint8 internal _decimals; constructor (string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } 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 _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account_, uint256 amount_) internal virtual { require(account_ != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(this), account_, amount_); _totalSupply = _totalSupply.add(amount_); _balances[account_] = _balances[account_].add(amount_); emit Transfer(address(this), account_, amount_); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer(address from_, address to_, uint256 amount_) internal virtual {} } library Counters { using SafeMath for uint256; struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } interface IERC2612Permit { function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); } abstract contract ERC20Permit is ERC20, IERC2612Permit { using Counters for Counters.Counter; mapping(address => Counters.Counter) private _nonces; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; bytes32 public DOMAIN_SEPARATOR; constructor() { uint256 chainID; assembly { chainID := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name())), keccak256(bytes("1")), // Version chainID, address(this) ) ); } function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual override { require(block.timestamp <= deadline, "Permit: expired deadline"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline)); bytes32 _hash = keccak256(abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct)); address signer = ecrecover(_hash, v, r, s); require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature"); _nonces[owner].increment(); _approve(owner, spender, amount); } function nonces(address owner) public view override returns (uint256) { return _nonces[owner].current(); } } interface IOwnable { function owner() external view returns (address); function renounceOwnership() external; function transferOwnership(address newOwner_) external; } contract Ownable is IOwnable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view override returns (address) { return _owner; } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual override onlyOwner() { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner_) public virtual override onlyOwner() { require(newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner_); _owner = newOwner_; } } contract VaultOwned is Ownable { address internal _vault; constructor() { _vault = msg.sender; } function setVault(address vault_) external onlyOwner() returns (bool) { _vault = vault_; return true; } function vault() public view returns (address) { return _vault; } modifier onlyVault() { require(_vault == msg.sender, "VaultOwned: caller is not the Vault"); _; } } contract GenerationalWealthSocietyERC20Token is ERC20Permit, VaultOwned { using SafeMath for uint256; event UpdateTeamTaxFee(uint teamTaxFee_); event UpdateTeamTaxFeeAddress(address teamTaxFeeAddress_); event UpdateBurnTaxFee(uint burnTaxFee_); event UpdateBurnTaxFeeAddress(address burnTaxFeeAddress_); event UpdateMaxTxAmount(uint256 maxTxAmount_); event UpdateTaxesDisabled(bool disableTaxes_); event UpdateMaxTxAmountDisabled(bool maxTxAmountDisabled_); event UpdateExcludedFromMaxTransactionAmount(address addr_, bool isExcl_); event UpdateExcludedFromMultipleMaxTransactionAmount(address[] accounts, bool isExcluded); event UpdateAutomatedMarketMakerPair(address pair_, bool value_); mapping (address => bool) public isExcludedMaxTransactionAmount; mapping (address => bool) public automatedMarketMakerPairs; address public teamTaxFeeAddress; address public burnTaxFeeAddress; uint256 public constant MINIMUM_MAX_TX_AMOUNT = 10 * 10**9; uint256 public maxTxAmount = 0; uint public teamTaxFee = 2; uint public burnTaxFee = 8; bool public taxesDisabled = false; bool public maxTxAmountDisabled = false; constructor() ERC20("GWS", "GWS", 9) { isExcludedMaxTransactionAmount[owner()] = true; isExcludedMaxTransactionAmount[address(this)] = true; } function mint(address account_, uint256 amount_) external onlyVault() { _mint(account_, amount_); } function burn(uint256 amount) public virtual { _burn(msg.sender, amount); } function burnFrom(address account_, uint256 amount_) public virtual { _burnFrom(account_, amount_); } function _burnFrom(address account_, uint256 amount_) public virtual { uint256 decreasedAllowance_ = allowance(account_, msg.sender).sub( amount_, "ERC20: burn amount exceeds allowance" ); _approve(account_, msg.sender, decreasedAllowance_); _burn(account_, amount_); } function calculateTeamTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(teamTaxFee).div( 10**2 ); } function calculateBurnTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(burnTaxFee).div( 10**2 ); } function _transfer(address sender, address recipient, uint256 amount) override internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); // when amount = 0 if(amount == 0) { super._transfer(sender, recipient, 0); return; } // when sell uint256 receiveAmount = amount; if( !taxesDisabled && automatedMarketMakerPairs[recipient] && burnTaxFeeAddress != address(0) && teamTaxFeeAddress != address(0) ) { uint256 teamTax = calculateTeamTaxFee(amount); uint256 burnTax = calculateBurnTaxFee(amount); uint256 totalTax = teamTax.add(burnTax); super._transfer(sender, teamTaxFeeAddress, teamTax); super._transfer(sender, burnTaxFeeAddress, burnTax); receiveAmount = receiveAmount.sub(totalTax); } // when buy if( !maxTxAmountDisabled && automatedMarketMakerPairs[sender] && !isExcludedMaxTransactionAmount[sender] && !isExcludedMaxTransactionAmount[recipient] ) { require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(receiveAmount); emit Transfer(sender, recipient, receiveAmount); } function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner() { require(maxTxAmount_ >= MINIMUM_MAX_TX_AMOUNT, "Max tx amount cannot be lower than the minimum tx amount"); maxTxAmount = maxTxAmount_; emit UpdateMaxTxAmount(maxTxAmount_); } function setTeamTaxFeeAddress(address teamTaxFeeAddress_) public onlyOwner() { require(teamTaxFeeAddress_ != address(0), 'Is the zero address'); teamTaxFeeAddress = teamTaxFeeAddress_; emit UpdateTeamTaxFeeAddress(teamTaxFeeAddress_); } function setBurnTaxFeeAddress(address burnTaxFeeAddress_) public onlyOwner() { require(burnTaxFeeAddress_ != address(0), 'Is the zero address'); burnTaxFeeAddress = burnTaxFeeAddress_; emit UpdateBurnTaxFeeAddress(burnTaxFeeAddress_); } function setTaxes(uint teamTaxFee_, uint burnTaxFee_) public onlyOwner() { teamTaxFee = teamTaxFee_; burnTaxFee = burnTaxFee_; require(teamTaxFee_.add(burnTaxFee_) <= 20, 'Must keep sell taxes below or equal to 20%'); emit UpdateTeamTaxFee(teamTaxFee_); emit UpdateBurnTaxFee(burnTaxFee_); } function setAutomatedMarketMakerPair(address pair_, bool value_) public onlyOwner { automatedMarketMakerPairs[pair_] = value_; emit UpdateAutomatedMarketMakerPair(pair_, value_); } function excludeFromMaxTransactionAmount(address addr_, bool isExcl_) public onlyOwner { isExcludedMaxTransactionAmount[addr_] = isExcl_; emit UpdateExcludedFromMaxTransactionAmount(addr_, isExcl_); } function excludeFromMultipleMaxTransactionAmount(address[] calldata adresses_, bool isExcl_) public onlyOwner { for(uint256 i = 0; i < adresses_.length; i++) { isExcludedMaxTransactionAmount[adresses_[i]] = isExcl_; } emit UpdateExcludedFromMultipleMaxTransactionAmount(adresses_, isExcl_); } function disableTaxes(bool disableTaxes_) public onlyOwner() { taxesDisabled = disableTaxes_; emit UpdateTaxesDisabled(disableTaxes_); } function disableMaxTxAmount(bool maxTxAmountDisabled_) public onlyOwner() { maxTxAmountDisabled = maxTxAmountDisabled_; emit UpdateMaxTxAmountDisabled(maxTxAmountDisabled_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":false,"internalType":"address","name":"pair_","type":"address"},{"indexed":false,"internalType":"bool","name":"value_","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"burnTaxFee_","type":"uint256"}],"name":"UpdateBurnTaxFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burnTaxFeeAddress_","type":"address"}],"name":"UpdateBurnTaxFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr_","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcl_","type":"bool"}],"name":"UpdateExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludedFromMultipleMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"UpdateMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTxAmountDisabled_","type":"bool"}],"name":"UpdateMaxTxAmountDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"disableTaxes_","type":"bool"}],"name":"UpdateTaxesDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamTaxFee_","type":"uint256"}],"name":"UpdateTeamTaxFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"teamTaxFeeAddress_","type":"address"}],"name":"UpdateTeamTaxFeeAddress","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_MAX_TX_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTaxFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"maxTxAmountDisabled_","type":"bool"}],"name":"disableMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disableTaxes_","type":"bool"}],"name":"disableTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr_","type":"address"},{"internalType":"bool","name":"isExcl_","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adresses_","type":"address[]"},{"internalType":"bool","name":"isExcl_","type":"bool"}],"name":"excludeFromMultipleMaxTransactionAmount","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":"","type":"address"}],"name":"isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"},{"internalType":"bool","name":"value_","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"burnTaxFeeAddress_","type":"address"}],"name":"setBurnTaxFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamTaxFee_","type":"uint256"},{"internalType":"uint256","name":"burnTaxFee_","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"teamTaxFeeAddress_","type":"address"}],"name":"setTeamTaxFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTaxFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600e556002600f5560086010556011805461ffff191690553480156200002b57600080fd5b506040518060400160405280600381526020016247575360e81b8152506040518060400160405280600381526020016247575360e81b815250600982600390805190602001906200007e929190620002b0565b50815162000094906004906020850190620002b0565b506005805460ff191660ff92909216919091179055504690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000d862000207565b805160209182012060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301939093523060a0808401919091528351808403909101815260c0909201928390528151910120600755600880546001600160a01b0319163317908190556001600160a01b0316906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600980546001600160a01b031916331790556001600a6000620001c1620002a1565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600a9092529020805490911660011790556200035c565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620002975780601f106200026b5761010080835404028352916020019162000297565b820191906000526020600020905b8154815290600101906020018083116200027957829003601f168201915b5050505050905090565b6008546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002e8576000855562000333565b82601f106200030357805160ff191683800117855562000333565b8280016001018555821562000333579182015b828111156200033357825182559160200191906001019062000316565b506200034192915062000345565b5090565b5b8082111562000341576000815560010162000346565b612416806200036c6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638c0b5e2211610151578063bddf5078116100c3578063ea31e41611610087578063ea31e416146107c6578063ec28438a146107ce578063f13d57f6146107eb578063f2fde38b14610811578063fbfa77cf14610837578063fd6d0eb31461083f57610269565b8063bddf507814610714578063c647b20e1461071c578063d0a8bd171461073f578063d505accf14610747578063dd62ed3e1461079857610269565b8063a22b35ce11610115578063a22b35ce14610625578063a457c2d714610651578063a9059cbb1461067d578063b62496f5146106a9578063b6b057bd146106cf578063bced78c8146106ee57610269565b80638c0b5e221461056d5780638da5cb5b14610575578063918379731461057d57806395d89b41146105ef5780639a7a23d6146105f757610269565b806340c10f19116101ea57806370a08231116101ae57806370a08231146104dd578063715018a61461050357806379cc67901461050b5780637b541f37146105375780637ecebe001461053f5780638baf958e1461056557610269565b806340c10f191461042457806342966c68146104505780634bb2c7851461046d57806355c20085146104935780636817031b146104b757610269565b80632ae2f121116102315780632ae2f1211461039c57806330adf81f146103ca578063313ce567146103d25780633644e515146103f057806339509351146103f857610269565b806306fdde031461026e578063095ea7b3146102eb57806318160ddd1461032b5780631ad97ec91461034557806323b872dd14610366575b600080fd5b610276610847565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b0578181015183820152602001610298565b50505050905090810190601f1680156102dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103176004803603604081101561030157600080fd5b506001600160a01b0381351690602001356108dd565b604080519115158252519081900360200190f35b6103336108f4565b60408051918252519081900360200190f35b6103646004803603602081101561035b57600080fd5b503515156108fa565b005b6103176004803603606081101561037c57600080fd5b506001600160a01b0381358116916020810135909116906040013561098e565b610364600480360360408110156103b257600080fd5b506001600160a01b03813516906020013515156109f7565b610333610aa8565b6103da610acc565b6040805160ff9092168252519081900360200190f35b610333610ad5565b6103176004803603604081101561040e57600080fd5b506001600160a01b038135169060200135610adb565b6103646004803603604081101561043a57600080fd5b506001600160a01b038135169060200135610b11565b6103646004803603602081101561046657600080fd5b5035610b68565b6103176004803603602081101561048357600080fd5b50356001600160a01b0316610b75565b61049b610b8a565b604080516001600160a01b039092168252519081900360200190f35b610317600480360360208110156104cd57600080fd5b50356001600160a01b0316610b99565b610333600480360360208110156104f357600080fd5b50356001600160a01b0316610c0e565b610364610c29565b6103646004803603604081101561052157600080fd5b506001600160a01b038135169060200135610cc0565b610317610cca565b6103336004803603602081101561055557600080fd5b50356001600160a01b0316610cd8565b610333610cf9565b610333610d02565b61049b610d08565b6103646004803603604081101561059357600080fd5b8101906020810181356401000000008111156105ae57600080fd5b8201836020820111156105c057600080fd5b803590602001918460208302840111640100000000831117156105e257600080fd5b9193509150351515610d17565b610276610e2c565b6103646004803603604081101561060d57600080fd5b506001600160a01b0381351690602001351515610e8d565b6103646004803603604081101561063b57600080fd5b506001600160a01b038135169060200135610f3e565b6103176004803603604081101561066757600080fd5b506001600160a01b038135169060200135610f8a565b6103176004803603604081101561069357600080fd5b506001600160a01b038135169060200135610fd9565b610317600480360360208110156106bf57600080fd5b50356001600160a01b0316610fe6565b610364600480360360208110156106e557600080fd5b50351515610ffb565b6103646004803603602081101561070457600080fd5b50356001600160a01b0316611097565b610333611189565b6103646004803603604081101561073257600080fd5b508035906020013561118f565b61049b611299565b610364600480360360e081101561075d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356112a8565b610333600480360360408110156107ae57600080fd5b506001600160a01b03813581169160200135166114d5565b610333611500565b610364600480360360208110156107e457600080fd5b5035611506565b6103646004803603602081101561080157600080fd5b50356001600160a01b03166115d2565b6103646004803603602081101561082757600080fd5b50356001600160a01b03166116c4565b61049b6117b2565b6103176117c1565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b5050505050905090565b60006108ea3384846117ca565b5060015b92915050565b60025490565b6008546001600160a01b03163314610947576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6011805482151560ff19909116811790915560408051918252517f6a953e6a5f55230eeb2804f37104e5efcd00657e0fc2e5b95a21d7845bbcfda29181900360200190a150565b600061099b8484846118b6565b6109ed84336109e88560405180606001604052806028815260200161226b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b92565b6117ca565b5060019392505050565b6008546001600160a01b03163314610a44576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915582519384529083015280517f85d825a13807a0b216b9667ff085cde6da2d9e10a417cfb9b55722f12cc8d4709281900390910190a15050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108ea9185906109e89086611c29565b6009546001600160a01b03163314610b5a5760405162461bcd60e51b81526004018080602001828103825260238152602001806122936023913960400191505060405180910390fd5b610b648282611c8a565b5050565b610b723382611d68565b50565b600a6020526000908152604090205460ff1681565b600c546001600160a01b031681565b6008546000906001600160a01b03163314610be9576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6008546001600160a01b03163314610c76576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b610b648282610f3e565b601154610100900460ff1681565b6001600160a01b03811660009081526006602052604081206108ee90611e52565b6402540be40081565b600e5481565b6008546001600160a01b031690565b6008546001600160a01b03163314610d64576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b60005b82811015610db95781600a6000868685818110610d8057fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610d67565b507fe5895c75d2fd1b46262115a946b29e68ff3e2c1bf56e31547d15a8b8ddca3095838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d35780601f106108a8576101008083540402835291602001916108d3565b6008546001600160a01b03163314610eda576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915582519384529083015280517fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059281900390910190a15050565b6000610f6e826040518060600160405280602481526020016122d660249139610f6786336114d5565b9190611b92565b9050610f7b8333836117ca565b610f858383611d68565b505050565b60006108ea33846109e8856040518060600160405280602581526020016123bc602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b92565b60006108ea3384846118b6565b600b6020526000908152604090205460ff1681565b6008546001600160a01b03163314611048576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b60118054821515610100810261ff00199092169190911790915560408051918252517f8ada525dadf897d355bd6236e2c0e6096196fb3b541074e7919398da7172c4429181900360200190a150565b6008546001600160a01b031633146110e4576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b038116611135576040805162461bcd60e51b8152602060048201526013602482015272497320746865207a65726f206164647265737360681b604482015290519081900360640190fd5b600d80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f11de62ec2bb6f325a03bfb0344efc0664fb8b32f7b186f75d95c56c676d8e8869181900360200190a150565b600f5481565b6008546001600160a01b031633146111dc576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b600f829055601081905560146111f28383611c29565b111561122f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806121f8602a913960400191505060405180910390fd5b6040805183815290517f632ad9a56dd9722afd31a80825fcd7965a8701fe8444c3148a59d8ab4a5129889181900360200190a16040805182815290517f96067f173edf9471df7bd0079dc5b56b8179aaf52c9e803565d0d32f7284ca1f9181900360200190a15050565b600d546001600160a01b031681565b834211156112fd576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99089908990899061134690611e52565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa15801561142c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114625750896001600160a01b0316816001600160a01b0316145b61149d5760405162461bcd60e51b81526004018080602001828103825260218152602001806121d76021913960400191505060405180910390fd5b6001600160a01b038a1660009081526006602052604090206114be90611e56565b6114c98a8a8a6117ca565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60105481565b6008546001600160a01b03163314611553576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6402540be4008110156115975760405162461bcd60e51b81526004018080602001828103825260388152602001806123846038913960400191505060405180910390fd5b600e8190556040805182815290517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a19181900360200190a150565b6008546001600160a01b0316331461161f576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b038116611670576040805162461bcd60e51b8152602060048201526013602482015272497320746865207a65726f206164647265737360681b604482015290519081900360640190fd5b600c80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f3f0076e31984815c89c66a2217f81c734e660dafac9433f2b0d3eb099934ab4b9181900360200190a150565b6008546001600160a01b03163314611711576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0381166117565760405162461bcd60e51b81526004018080602001828103825260268152602001806121696026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031690565b60115460ff1681565b6001600160a01b03831661180f5760405162461bcd60e51b81526004018080602001828103825260248152602001806123606024913960400191505060405180910390fd5b6001600160a01b0382166118545760405162461bcd60e51b815260040180806020018281038252602281526020018061218f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118fb5760405162461bcd60e51b815260040180806020018281038252602581526020018061233b6025913960400191505060405180910390fd5b6001600160a01b0382166119405760405162461bcd60e51b81526004018080602001828103825260238152602001806121246023913960400191505060405180910390fd5b806119565761195183836000611e5f565b610f85565b601154819060ff1615801561198357506001600160a01b0383166000908152600b602052604090205460ff165b80156119995750600d546001600160a01b031615155b80156119af5750600c546001600160a01b031615155b15611a1d5760006119bf83611fa8565b905060006119cc84611fca565b905060006119da8383611c29565b600c549091506119f59088906001600160a01b031685611e5f565b600d54611a0d9088906001600160a01b031684611e5f565b611a178482611fe6565b93505050505b601154610100900460ff16158015611a4d57506001600160a01b0384166000908152600b602052604090205460ff165b8015611a7257506001600160a01b0384166000908152600a602052604090205460ff16155b8015611a9757506001600160a01b0383166000908152600a602052604090205460ff16155b15611add57600e54821115611add5760405162461bcd60e51b81526004018080602001828103825260288152602001806122226028913960400191505060405180910390fd5b611b1a826040518060600160405280602681526020016121b1602691396001600160a01b0387166000908152602081905260409020549190611b92565b6001600160a01b038086166000908152602081905260408082209390935590851681522054611b499082611c29565b6001600160a01b038085166000818152602081815260409182902094909455805185815290519193928816926000805160206122fa83398151915292918290030190a350505050565b60008184841115611c215760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611be6578181015183820152602001611bce565b50505050905090810190601f168015611c135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611c83576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ce5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611cf0308383610f85565b600254611cfd9082611c29565b6002556001600160a01b038216600090815260208190526040902054611d239082611c29565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230926000805160206122fa8339815191529281900390910190a35050565b6001600160a01b038216611dad5760405162461bcd60e51b815260040180806020018281038252602181526020018061231a6021913960400191505060405180910390fd5b611db982600083610f85565b611df681604051806060016040528060228152602001612147602291396001600160a01b0385166000908152602081905260409020549190611b92565b6001600160a01b038316600090815260208190526040902055600254611e1c9082611fe6565b6002556040805182815290516000916001600160a01b038516916000805160206122fa8339815191529181900360200190a35050565b5490565b80546001019055565b6001600160a01b038316611ea45760405162461bcd60e51b815260040180806020018281038252602581526020018061233b6025913960400191505060405180910390fd5b6001600160a01b038216611ee95760405162461bcd60e51b81526004018080602001828103825260238152602001806121246023913960400191505060405180910390fd5b611ef4838383610f85565b611f31816040518060600160405280602681526020016121b1602691396001600160a01b0386166000908152602081905260409020549190611b92565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611f609082611c29565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206122fa83398151915292918290030190a3505050565b60006108ee6064611fc4600f548561202890919063ffffffff16565b90612081565b60006108ee6064611fc46010548561202890919063ffffffff16565b6000611c8383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b92565b600082612037575060006108ee565b8282028284828161204457fe5b0414611c835760405162461bcd60e51b815260040180806020018281038252602181526020018061224a6021913960400191505060405180910390fd5b6000611c8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361210d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611be6578181015183820152602001611bce565b50600083858161211957fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e61747572654d757374206b6565702073656c6c2074617865732062656c6f77206f7220657175616c20746f203230255472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d617820747820616d6f756e742063616e6e6f74206265206c6f776572207468616e20746865206d696e696d756d20747820616d6f756e7445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d074d8162704ef9f6bc3e175d00e9b8efd15c28463fcd562936375e380d7f9e064736f6c63430007050033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80638c0b5e2211610151578063bddf5078116100c3578063ea31e41611610087578063ea31e416146107c6578063ec28438a146107ce578063f13d57f6146107eb578063f2fde38b14610811578063fbfa77cf14610837578063fd6d0eb31461083f57610269565b8063bddf507814610714578063c647b20e1461071c578063d0a8bd171461073f578063d505accf14610747578063dd62ed3e1461079857610269565b8063a22b35ce11610115578063a22b35ce14610625578063a457c2d714610651578063a9059cbb1461067d578063b62496f5146106a9578063b6b057bd146106cf578063bced78c8146106ee57610269565b80638c0b5e221461056d5780638da5cb5b14610575578063918379731461057d57806395d89b41146105ef5780639a7a23d6146105f757610269565b806340c10f19116101ea57806370a08231116101ae57806370a08231146104dd578063715018a61461050357806379cc67901461050b5780637b541f37146105375780637ecebe001461053f5780638baf958e1461056557610269565b806340c10f191461042457806342966c68146104505780634bb2c7851461046d57806355c20085146104935780636817031b146104b757610269565b80632ae2f121116102315780632ae2f1211461039c57806330adf81f146103ca578063313ce567146103d25780633644e515146103f057806339509351146103f857610269565b806306fdde031461026e578063095ea7b3146102eb57806318160ddd1461032b5780631ad97ec91461034557806323b872dd14610366575b600080fd5b610276610847565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b0578181015183820152602001610298565b50505050905090810190601f1680156102dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103176004803603604081101561030157600080fd5b506001600160a01b0381351690602001356108dd565b604080519115158252519081900360200190f35b6103336108f4565b60408051918252519081900360200190f35b6103646004803603602081101561035b57600080fd5b503515156108fa565b005b6103176004803603606081101561037c57600080fd5b506001600160a01b0381358116916020810135909116906040013561098e565b610364600480360360408110156103b257600080fd5b506001600160a01b03813516906020013515156109f7565b610333610aa8565b6103da610acc565b6040805160ff9092168252519081900360200190f35b610333610ad5565b6103176004803603604081101561040e57600080fd5b506001600160a01b038135169060200135610adb565b6103646004803603604081101561043a57600080fd5b506001600160a01b038135169060200135610b11565b6103646004803603602081101561046657600080fd5b5035610b68565b6103176004803603602081101561048357600080fd5b50356001600160a01b0316610b75565b61049b610b8a565b604080516001600160a01b039092168252519081900360200190f35b610317600480360360208110156104cd57600080fd5b50356001600160a01b0316610b99565b610333600480360360208110156104f357600080fd5b50356001600160a01b0316610c0e565b610364610c29565b6103646004803603604081101561052157600080fd5b506001600160a01b038135169060200135610cc0565b610317610cca565b6103336004803603602081101561055557600080fd5b50356001600160a01b0316610cd8565b610333610cf9565b610333610d02565b61049b610d08565b6103646004803603604081101561059357600080fd5b8101906020810181356401000000008111156105ae57600080fd5b8201836020820111156105c057600080fd5b803590602001918460208302840111640100000000831117156105e257600080fd5b9193509150351515610d17565b610276610e2c565b6103646004803603604081101561060d57600080fd5b506001600160a01b0381351690602001351515610e8d565b6103646004803603604081101561063b57600080fd5b506001600160a01b038135169060200135610f3e565b6103176004803603604081101561066757600080fd5b506001600160a01b038135169060200135610f8a565b6103176004803603604081101561069357600080fd5b506001600160a01b038135169060200135610fd9565b610317600480360360208110156106bf57600080fd5b50356001600160a01b0316610fe6565b610364600480360360208110156106e557600080fd5b50351515610ffb565b6103646004803603602081101561070457600080fd5b50356001600160a01b0316611097565b610333611189565b6103646004803603604081101561073257600080fd5b508035906020013561118f565b61049b611299565b610364600480360360e081101561075d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356112a8565b610333600480360360408110156107ae57600080fd5b506001600160a01b03813581169160200135166114d5565b610333611500565b610364600480360360208110156107e457600080fd5b5035611506565b6103646004803603602081101561080157600080fd5b50356001600160a01b03166115d2565b6103646004803603602081101561082757600080fd5b50356001600160a01b03166116c4565b61049b6117b2565b6103176117c1565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b5050505050905090565b60006108ea3384846117ca565b5060015b92915050565b60025490565b6008546001600160a01b03163314610947576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6011805482151560ff19909116811790915560408051918252517f6a953e6a5f55230eeb2804f37104e5efcd00657e0fc2e5b95a21d7845bbcfda29181900360200190a150565b600061099b8484846118b6565b6109ed84336109e88560405180606001604052806028815260200161226b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b92565b6117ca565b5060019392505050565b6008546001600160a01b03163314610a44576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915582519384529083015280517f85d825a13807a0b216b9667ff085cde6da2d9e10a417cfb9b55722f12cc8d4709281900390910190a15050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108ea9185906109e89086611c29565b6009546001600160a01b03163314610b5a5760405162461bcd60e51b81526004018080602001828103825260238152602001806122936023913960400191505060405180910390fd5b610b648282611c8a565b5050565b610b723382611d68565b50565b600a6020526000908152604090205460ff1681565b600c546001600160a01b031681565b6008546000906001600160a01b03163314610be9576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6008546001600160a01b03163314610c76576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b610b648282610f3e565b601154610100900460ff1681565b6001600160a01b03811660009081526006602052604081206108ee90611e52565b6402540be40081565b600e5481565b6008546001600160a01b031690565b6008546001600160a01b03163314610d64576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b60005b82811015610db95781600a6000868685818110610d8057fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610d67565b507fe5895c75d2fd1b46262115a946b29e68ff3e2c1bf56e31547d15a8b8ddca3095838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108d35780601f106108a8576101008083540402835291602001916108d3565b6008546001600160a01b03163314610eda576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915582519384529083015280517fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059281900390910190a15050565b6000610f6e826040518060600160405280602481526020016122d660249139610f6786336114d5565b9190611b92565b9050610f7b8333836117ca565b610f858383611d68565b505050565b60006108ea33846109e8856040518060600160405280602581526020016123bc602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b92565b60006108ea3384846118b6565b600b6020526000908152604090205460ff1681565b6008546001600160a01b03163314611048576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b60118054821515610100810261ff00199092169190911790915560408051918252517f8ada525dadf897d355bd6236e2c0e6096196fb3b541074e7919398da7172c4429181900360200190a150565b6008546001600160a01b031633146110e4576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b038116611135576040805162461bcd60e51b8152602060048201526013602482015272497320746865207a65726f206164647265737360681b604482015290519081900360640190fd5b600d80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f11de62ec2bb6f325a03bfb0344efc0664fb8b32f7b186f75d95c56c676d8e8869181900360200190a150565b600f5481565b6008546001600160a01b031633146111dc576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b600f829055601081905560146111f28383611c29565b111561122f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806121f8602a913960400191505060405180910390fd5b6040805183815290517f632ad9a56dd9722afd31a80825fcd7965a8701fe8444c3148a59d8ab4a5129889181900360200190a16040805182815290517f96067f173edf9471df7bd0079dc5b56b8179aaf52c9e803565d0d32f7284ca1f9181900360200190a15050565b600d546001600160a01b031681565b834211156112fd576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99089908990899061134690611e52565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa15801561142c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114625750896001600160a01b0316816001600160a01b0316145b61149d5760405162461bcd60e51b81526004018080602001828103825260218152602001806121d76021913960400191505060405180910390fd5b6001600160a01b038a1660009081526006602052604090206114be90611e56565b6114c98a8a8a6117ca565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60105481565b6008546001600160a01b03163314611553576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6402540be4008110156115975760405162461bcd60e51b81526004018080602001828103825260388152602001806123846038913960400191505060405180910390fd5b600e8190556040805182815290517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a19181900360200190a150565b6008546001600160a01b0316331461161f576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b038116611670576040805162461bcd60e51b8152602060048201526013602482015272497320746865207a65726f206164647265737360681b604482015290519081900360640190fd5b600c80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f3f0076e31984815c89c66a2217f81c734e660dafac9433f2b0d3eb099934ab4b9181900360200190a150565b6008546001600160a01b03163314611711576040805162461bcd60e51b815260206004820181905260248201526000805160206122b6833981519152604482015290519081900360640190fd5b6001600160a01b0381166117565760405162461bcd60e51b81526004018080602001828103825260268152602001806121696026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031690565b60115460ff1681565b6001600160a01b03831661180f5760405162461bcd60e51b81526004018080602001828103825260248152602001806123606024913960400191505060405180910390fd5b6001600160a01b0382166118545760405162461bcd60e51b815260040180806020018281038252602281526020018061218f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118fb5760405162461bcd60e51b815260040180806020018281038252602581526020018061233b6025913960400191505060405180910390fd5b6001600160a01b0382166119405760405162461bcd60e51b81526004018080602001828103825260238152602001806121246023913960400191505060405180910390fd5b806119565761195183836000611e5f565b610f85565b601154819060ff1615801561198357506001600160a01b0383166000908152600b602052604090205460ff165b80156119995750600d546001600160a01b031615155b80156119af5750600c546001600160a01b031615155b15611a1d5760006119bf83611fa8565b905060006119cc84611fca565b905060006119da8383611c29565b600c549091506119f59088906001600160a01b031685611e5f565b600d54611a0d9088906001600160a01b031684611e5f565b611a178482611fe6565b93505050505b601154610100900460ff16158015611a4d57506001600160a01b0384166000908152600b602052604090205460ff165b8015611a7257506001600160a01b0384166000908152600a602052604090205460ff16155b8015611a9757506001600160a01b0383166000908152600a602052604090205460ff16155b15611add57600e54821115611add5760405162461bcd60e51b81526004018080602001828103825260288152602001806122226028913960400191505060405180910390fd5b611b1a826040518060600160405280602681526020016121b1602691396001600160a01b0387166000908152602081905260409020549190611b92565b6001600160a01b038086166000908152602081905260408082209390935590851681522054611b499082611c29565b6001600160a01b038085166000818152602081815260409182902094909455805185815290519193928816926000805160206122fa83398151915292918290030190a350505050565b60008184841115611c215760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611be6578181015183820152602001611bce565b50505050905090810190601f168015611c135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611c83576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611ce5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611cf0308383610f85565b600254611cfd9082611c29565b6002556001600160a01b038216600090815260208190526040902054611d239082611c29565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230926000805160206122fa8339815191529281900390910190a35050565b6001600160a01b038216611dad5760405162461bcd60e51b815260040180806020018281038252602181526020018061231a6021913960400191505060405180910390fd5b611db982600083610f85565b611df681604051806060016040528060228152602001612147602291396001600160a01b0385166000908152602081905260409020549190611b92565b6001600160a01b038316600090815260208190526040902055600254611e1c9082611fe6565b6002556040805182815290516000916001600160a01b038516916000805160206122fa8339815191529181900360200190a35050565b5490565b80546001019055565b6001600160a01b038316611ea45760405162461bcd60e51b815260040180806020018281038252602581526020018061233b6025913960400191505060405180910390fd5b6001600160a01b038216611ee95760405162461bcd60e51b81526004018080602001828103825260238152602001806121246023913960400191505060405180910390fd5b611ef4838383610f85565b611f31816040518060600160405280602681526020016121b1602691396001600160a01b0386166000908152602081905260409020549190611b92565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611f609082611c29565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206122fa83398151915292918290030190a3505050565b60006108ee6064611fc4600f548561202890919063ffffffff16565b90612081565b60006108ee6064611fc46010548561202890919063ffffffff16565b6000611c8383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b92565b600082612037575060006108ee565b8282028284828161204457fe5b0414611c835760405162461bcd60e51b815260040180806020018281038252602181526020018061224a6021913960400191505060405180910390fd5b6000611c8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361210d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611be6578181015183820152602001611bce565b50600083858161211957fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e61747572654d757374206b6565702073656c6c2074617865732062656c6f77206f7220657175616c20746f203230255472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d617820747820616d6f756e742063616e6e6f74206265206c6f776572207468616e20746865206d696e696d756d20747820616d6f756e7445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d074d8162704ef9f6bc3e175d00e9b8efd15c28463fcd562936375e380d7f9e064736f6c63430007050033
Deployed Bytecode Sourcemap
28744:6467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21738:167;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21738:167:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21155:100;;;:::i;:::-;;;;;;;;;;;;;;;;34823:169;;;;;;;;;;;;;;;;-1:-1:-1;34823:169:0;;;;:::i;:::-;;21913:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21913:317:0;;;;;;;;;;;;;;;;;:::i;34242:225::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34242:225:0;;;;;;;;;;:::i;25603:108::-;;;:::i;21064:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25720:31;;;:::i;22238:214::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22238:214:0;;;;;;;;:::i;30152:113::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30152:113:0;;;;;;;;:::i;30273:89::-;;;;;;;;;;;;;;;;-1:-1:-1;30273:89:0;;:::i;29502:63::-;;;;;;;;;;;;;;;;-1:-1:-1;29502:63:0;-1:-1:-1;;;;;29502:63:0;;:::i;29639:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;29639:32:0;;;;;;;;;;;;;;28392:128;;;;;;;;;;;;;;;;-1:-1:-1;28392:128:0;-1:-1:-1;;;;;28392:128:0;;:::i;21263:127::-;;;;;;;;;;;;;;;;-1:-1:-1;21263:127:0;-1:-1:-1;;;;;21263:127:0;;:::i;27831:159::-;;;:::i;30370:115::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30370:115:0;;;;;;;;:::i;29931:39::-;;;:::i;27013:120::-;;;;;;;;;;;;;;;;-1:-1:-1;27013:120:0;-1:-1:-1;;;;;27013:120:0;;:::i;29719:58::-;;;:::i;29784:30::-;;;:::i;27610:88::-;;;:::i;34476:339::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34476:339:0;-1:-1:-1;34476:339:0;;;;:::i;20969:87::-;;;:::i;34029:205::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34029:205:0;;;;;;;;;;:::i;30493:347::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30493:347:0;;;;;;;;:::i;22460:265::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22460:265:0;;;;;;;;:::i;21398:173::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21398:173:0;;;;;;;;:::i;29572:58::-;;;;;;;;;;;;;;;;-1:-1:-1;29572:58:0;-1:-1:-1;;;;;29572:58:0;;:::i;35000:208::-;;;;;;;;;;;;;;;;-1:-1:-1;35000:208:0;;;;:::i;33400:270::-;;;;;;;;;;;;;;;;-1:-1:-1;33400:270:0;-1:-1:-1;;;;;33400:270:0;;:::i;29823:26::-;;;:::i;33678:343::-;;;;;;;;;;;;;;;;-1:-1:-1;33678:343:0;;;;;;;:::i;29678:32::-;;;:::i;26239:766::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26239:766:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21579:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21579:151:0;;;;;;;;;;:::i;29856:26::-;;;:::i;32836:278::-;;;;;;;;;;;;;;;;-1:-1:-1;32836:278:0;;:::i;33122:270::-;;;;;;;;;;;;;;;;-1:-1:-1;33122:270:0;-1:-1:-1;;;;;33122:270:0;;:::i;27998:259::-;;;;;;;;;;;;;;;;-1:-1:-1;27998:259:0;-1:-1:-1;;;;;27998:259:0;;:::i;28528:79::-;;;:::i;29891:33::-;;;:::i;20878:83::-;20948:5;20941:12;;;;;;;;-1:-1:-1;;20941:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20915:13;;20941:12;;20948:5;;20941:12;;20948:5;20941:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:83;:::o;21738:167::-;21821:4;21838:37;21847:10;21859:7;21868:6;21838:8;:37::i;:::-;-1:-1:-1;21893:4:0;21738:167;;;;;:::o;21155:100::-;21235:12;;21155:100;:::o;34823:169::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;34895:13:::1;:29:::0;;;::::1;;-1:-1:-1::0;;34895:29:0;;::::1;::::0;::::1;::::0;;;34950:34:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;34823:169:::0;:::o;21913:317::-;22019:4;22036:36;22046:6;22054:9;22065:6;22036:9;:36::i;:::-;22083:117;22092:6;22100:10;22112:87;22148:6;22112:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22112:19:0;;;;;;:11;:19;;;;;;;;22132:10;22112:31;;;;;;;;;:87;:35;:87::i;:::-;22083:8;:117::i;:::-;-1:-1:-1;22218:4:0;21913:317;;;;;:::o;34242:225::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34340:37:0;::::1;;::::0;;;:30:::1;:37;::::0;;;;;;;;:47;;-1:-1:-1;;34340:47:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34405:54;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;34242:225:::0;;:::o;25603:108::-;25645:66;25603:108;:::o;21064:83::-;21130:9;;;;21064:83;:::o;25720:31::-;;;;:::o;22238:214::-;22352:10;22326:4;22373:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22373:32:0;;;;;;;;;;22326:4;;22343:79;;22364:7;;22373:48;;22410:10;22373:36;:48::i;30152:113::-;28655:6;;-1:-1:-1;;;;;28655:6:0;28665:10;28655:20;28647:68;;;;-1:-1:-1;;;28647:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30233:24:::1;30239:8;30249:7;30233:5;:24::i;:::-;30152:113:::0;;:::o;30273:89::-;30329:25;30335:10;30347:6;30329:5;:25::i;:::-;30273:89;:::o;29502:63::-;;;;;;;;;;;;;;;:::o;29639:32::-;;;-1:-1:-1;;;;;29639:32:0;;:::o;28392:128::-;27746:6;;28456:4;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;28473:6:0::1;:15:::0;;-1:-1:-1;;;;;28473:15:0;::::1;-1:-1:-1::0;;;;;;28473:15:0;;::::1;;::::0;;;28392:128;;;:::o;21263:127::-;-1:-1:-1;;;;;21364:18:0;21337:7;21364:18;;;;;;;;;;;;21263:127::o;27831:159::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;27933:6:::1;::::0;27912:40:::1;::::0;27949:1:::1;::::0;-1:-1:-1;;;;;27933:6:0::1;::::0;27912:40:::1;::::0;27949:1;;27912:40:::1;27963:6;:19:::0;;-1:-1:-1;;;;;;27963:19:0::1;::::0;;27831:159::o;30370:115::-;30449:28;30459:8;30469:7;30449:9;:28::i;29931:39::-;;;;;;;;;:::o;27013:120::-;-1:-1:-1;;;;;27101:14:0;;27074:7;27101:14;;;:7;:14;;;;;:24;;:22;:24::i;29719:58::-;29767:10;29719:58;:::o;29784:30::-;;;;:::o;27610:88::-;27684:6;;-1:-1:-1;;;;;27684:6:0;27610:88;:::o;34476:339::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;34601:9:::1;34597:127;34616:20:::0;;::::1;34597:127;;;34705:7;34658:30;:44;34689:9;;34699:1;34689:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;34689:12:0::1;34658:44:::0;;-1:-1:-1;34658:44:0;::::1;::::0;;;;;;-1:-1:-1;34658:44:0;:54;;-1:-1:-1;;34658:54:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;34638:3:0::1;34597:127;;;;34741:66;34788:9;;34799:7;34741:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;34741:66:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;34741:66:0;;-1:-1:-1;;;;;34741:66:0::1;34476:339:::0;;;:::o;20969:87::-;21041:7;21034:14;;;;;;;;-1:-1:-1;;21034:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21008:13;;21034:14;;21041:7;;21034:14;;21041:7;21034:14;;;;;;;;;;;;;;;;;;;;;;;;34029:205;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34122:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;;;;:41;;-1:-1:-1;;34122:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34181:45;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;34029:205:::0;;:::o;30493:347::-;30573:27;30612:121;30662:7;30612:121;;;;;;;;;;;;;;;;;:31;30622:8;30632:10;30612:9;:31::i;:::-;:35;:121;:35;:121::i;:::-;30573:160;;30746:51;30755:8;30765:10;30777:19;30746:8;:51::i;:::-;30808:24;30814:8;30824:7;30808:5;:24::i;:::-;30493:347;;;:::o;22460:265::-;22553:4;22570:125;22579:10;22591:7;22600:94;22637:15;22600:94;;;;;;;;;;;;;;;;;22612:10;22600:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22600:32:0;;;;;;;;;;;:94;:36;:94::i;21398:173::-;21484:4;21501:40;21511:10;21523:9;21534:6;21501:9;:40::i;29572:58::-;;;;;;;;;;;;;;;:::o;35000:208::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;35085:19:::1;:42:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;35085:42:0;;::::1;::::0;;;::::1;::::0;;;35153:47:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35000:208:::0;:::o;33400:270::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33496:32:0;::::1;33488:64;;;::::0;;-1:-1:-1;;;33488:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33488:64:0;;;;;;;;;;;;;::::1;;33563:17;:38:::0;;-1:-1:-1;;;;;33563:38:0;::::1;-1:-1:-1::0;;;;;;33563:38:0;;::::1;::::0;::::1;::::0;;;33619:43:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33400:270:::0;:::o;29823:26::-;;;;:::o;33678:343::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;33762:10:::1;:24:::0;;;33797:10:::1;:24:::0;;;33872:2:::1;33840:28;33775:11:::0;33810;33840:15:::1;:28::i;:::-;:34;;33832:89;;;;-1:-1:-1::0;;;33832:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33939:29;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33984;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33678:343:::0;;:::o;29678:32::-;;;-1:-1:-1;;;;;29678:32:0;;:::o;26239:766::-;26484:8;26465:15;:27;;26457:64;;;;;-1:-1:-1;;;26457:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26626:14:0;;26534:18;26626:14;;;:7;:14;;;;;25645:66;;26602:5;;26609:7;;26618:6;;26626:24;;:22;:24::i;:::-;26574:87;;;;;;;;;;;-1:-1:-1;;;;;26574:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26564:98;;;;;;26734:16;;-1:-1:-1;;;26701:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26691:73;;;;;;;;;-1:-1:-1;26794:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26564:98;;-1:-1:-1;26691:73:0;;26794:25;;;;;;;-1:-1:-1;;26794:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26794:25:0;;-1:-1:-1;;26794:25:0;;;-1:-1:-1;;;;;;;26838:20:0;;;;;;:39;;;26872:5;-1:-1:-1;;;;;26862:15:0;:6;-1:-1:-1;;;;;26862:15:0;;26838:39;26830:85;;;;-1:-1:-1;;;26830:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26928:14:0;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;26965:32;26974:5;26981:7;26990:6;26965:8;:32::i;:::-;26239:766;;;;;;;;;;:::o;21579:151::-;-1:-1:-1;;;;;21695:18:0;;;21668:7;21695:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21579:151::o;29856:26::-;;;;:::o;32836:278::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;29767:10:::1;32922:12;:37;;32914:106;;;;-1:-1:-1::0;;;32914:106:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33031:11;:26:::0;;;33075:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;32836:278:::0;:::o;33122:270::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33218:32:0;::::1;33210:64;;;::::0;;-1:-1:-1;;;33210:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33210:64:0;;;;;;;;;;;;;::::1;;33285:17;:38:::0;;-1:-1:-1;;;;;33285:38:0;::::1;-1:-1:-1::0;;;;;;33285:38:0;;::::1;::::0;::::1;::::0;;;33341:43:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33122:270:::0;:::o;27998:259::-;27746:6;;-1:-1:-1;;;;;27746:6:0;27756:10;27746:20;27738:65;;;;;-1:-1:-1;;;27738:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27738:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28099:23:0;::::1;28091:74;;;;-1:-1:-1::0;;;28091:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28202:6;::::0;28181:39:::1;::::0;-1:-1:-1;;;;;28181:39:0;;::::1;::::0;28202:6:::1;::::0;28181:39:::1;::::0;28202:6:::1;::::0;28181:39:::1;28231:6;:18:::0;;-1:-1:-1;;;;;;28231:18:0::1;-1:-1:-1::0;;;;;28231:18:0;;;::::1;::::0;;;::::1;::::0;;27998:259::o;28528:79::-;28593:6;;-1:-1:-1;;;;;28593:6:0;28528:79;:::o;29891:33::-;;;;;;:::o;24105:346::-;-1:-1:-1;;;;;24207:19:0;;24199:68;;;;-1:-1:-1;;;24199:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24286:21:0;;24278:68;;;;-1:-1:-1;;;24278:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24359:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24411:32;;;;;;;;;;;;;;;;;24105:346;;;:::o;31188:1640::-;-1:-1:-1;;;;;31303:20:0;;31295:70;;;;-1:-1:-1;;;31295:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31384:23:0;;31376:71;;;;-1:-1:-1;;;31376:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31491:11;31488:101;;31519:37;31535:6;31543:9;31554:1;31519:15;:37::i;:::-;31571:7;;31488:101;31682:13;;31647:6;;31682:13;;31681:14;:67;;;;-1:-1:-1;;;;;;31712:36:0;;;;;;:25;:36;;;;;;;;31681:67;:115;;;;-1:-1:-1;31765:17:0;;-1:-1:-1;;;;;31765:17:0;:31;;31681:115;:164;;;;-1:-1:-1;31814:17:0;;-1:-1:-1;;;;;31814:17:0;:31;;31681:164;31664:573;;;31872:15;31890:27;31910:6;31890:19;:27::i;:::-;31872:45;;31932:15;31950:27;31970:6;31950:19;:27::i;:::-;31932:45;-1:-1:-1;31992:16:0;32011:20;:7;31932:45;32011:11;:20::i;:::-;32072:17;;31992:39;;-1:-1:-1;32048:51:0;;32064:6;;-1:-1:-1;;;;;32072:17:0;32091:7;32048:15;:51::i;:::-;32138:17;;32114:51;;32130:6;;-1:-1:-1;;;;;32138:17:0;32157:7;32114:15;:51::i;:::-;32198:27;:13;32216:8;32198:17;:27::i;:::-;32182:43;;31664:573;;;;32288:19;;;;;;;32287:20;:70;;;;-1:-1:-1;;;;;;32324:33:0;;;;;;:25;:33;;;;;;;;32287:70;:126;;;;-1:-1:-1;;;;;;32375:38:0;;;;;;:30;:38;;;;;;;;32374:39;32287:126;:186;;;;-1:-1:-1;;;;;;32432:41:0;;;;;;:30;:41;;;;;;;;32431:42;32287:186;32270:316;;;32518:11;;32508:6;:21;;32500:74;;;;-1:-1:-1;;;32500:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32618:71;32640:6;32618:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32618:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;32598:17:0;;;:9;:17;;;;;;;;;;;:91;;;;32723:20;;;;;;;:39;;32748:13;32723:24;:39::i;:::-;-1:-1:-1;;;;;32700:20:0;;;:9;:20;;;;;;;;;;;;:62;;;;32778:42;;;;;;;32700:20;;32778:42;;;;-1:-1:-1;;;;;;;;;;;32778:42:0;;;;;;;;31188:1640;;;;:::o;17494:192::-;17580:7;17616:12;17608:6;;;;17600:29;;;;-1:-1:-1;;;17600:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17652:5:0;;;17494:192::o;17161:181::-;17219:7;17251:5;;;17275:6;;;;17267:46;;;;;-1:-1:-1;;;17267:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17333:1;17161:181;-1:-1:-1;;;17161:181:0:o;23280:391::-;-1:-1:-1;;;;;23366:22:0;;23358:66;;;;;-1:-1:-1;;;23358:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23435:54;23464:4;23471:8;23481:7;23435:20;:54::i;:::-;23515:12;;:25;;23532:7;23515:16;:25::i;:::-;23500:12;:40;-1:-1:-1;;;;;23573:19:0;;:9;:19;;;;;;;;;;;:32;;23597:7;23573:23;:32::i;:::-;-1:-1:-1;;;;;23551:19:0;;:9;:19;;;;;;;;;;;;:54;;;;23621:42;;;;;;;23551:19;;23638:4;;-1:-1:-1;;;;;;;;;;;23621:42:0;;;;;;;;;23280:391;;:::o;23679:418::-;-1:-1:-1;;;;;23763:21:0;;23755:67;;;;-1:-1:-1;;;23755:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23835:49;23856:7;23873:1;23877:6;23835:20;:49::i;:::-;23918:68;23941:6;23918:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23918:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;23897:18:0;;:9;:18;;;;;;;;;;:89;24012:12;;:24;;24029:6;24012:16;:24::i;:::-;23997:12;:39;24052:37;;;;;;;;24078:1;;-1:-1:-1;;;;;24052:37:0;;;-1:-1:-1;;;;;;;;;;;24052:37:0;;;;;;;;23679:418;;:::o;24689:114::-;24781:14;;24689:114::o;24811:91::-;24875:19;;24893:1;24875:19;;;24811:91::o;22733:539::-;-1:-1:-1;;;;;22839:20:0;;22831:70;;;;-1:-1:-1;;;22831:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22920:23:0;;22912:71;;;;-1:-1:-1;;;22912:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22996:47;23017:6;23025:9;23036:6;22996:20;:47::i;:::-;23076:71;23098:6;23076:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23076:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23056:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23181:20;;;;;;;:32;;23206:6;23181:24;:32::i;:::-;-1:-1:-1;;;;;23158:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23229:35;;;;;;;23158:20;;23229:35;;;;-1:-1:-1;;;;;;;;;;;23229:35:0;;;;;;;;22733:539;;;:::o;30848:163::-;30916:7;30945:58;30987:5;30945:23;30957:10;;30945:7;:11;;:23;;;;:::i;:::-;:27;;:58::i;31019:161::-;31087:7;31114:58;31156:5;31114:23;31126:10;;31114:7;:11;;:23;;;;:::i;17350:136::-;17408:7;17435:43;17439:1;17442;17435:43;;;;;;;;;;;;;;;;;:3;:43::i;17694:252::-;17752:7;17778:6;17774:47;;-1:-1:-1;17808:1:0;17801:8;;17774:47;17845:5;;;17849:1;17845;:5;:1;17869:5;;;;;:10;17861:56;;;;-1:-1:-1;;;17861:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17954:132;18012:7;18039:39;18043:1;18046;18039:39;;;;;;;;;;;;;;;;;18180:7;18215:12;18208:5;18200:28;;;;-1:-1:-1;;;18200:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18239:9;18255:1;18251;:5;;;;;;;18094:278;-1:-1:-1;;;;;18094:278:0:o
Swarm Source
ipfs://d074d8162704ef9f6bc3e175d00e9b8efd15c28463fcd562936375e380d7f9e0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.