Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17310454 | 531 days ago | IN | 0 ETH | 0.00152698 | ||||
Approve | 17306162 | 531 days ago | IN | 0 ETH | 0.00123497 | ||||
Approve | 17305355 | 531 days ago | IN | 0 ETH | 0.00125689 | ||||
Approve | 17305336 | 531 days ago | IN | 0 ETH | 0.00137015 | ||||
Approve | 17305283 | 531 days ago | IN | 0 ETH | 0.00125556 | ||||
Approve | 17291506 | 533 days ago | IN | 0 ETH | 0.00149771 | ||||
Approve | 17291289 | 533 days ago | IN | 0 ETH | 0.00246291 | ||||
Approve | 17290795 | 534 days ago | IN | 0 ETH | 0.00166402 | ||||
Approve | 17290782 | 534 days ago | IN | 0 ETH | 0.00177844 | ||||
Approve | 17275979 | 536 days ago | IN | 0 ETH | 0.00187522 | ||||
Approve | 17271532 | 536 days ago | IN | 0 ETH | 0.00206288 | ||||
Approve | 17270912 | 536 days ago | IN | 0 ETH | 0.00194498 | ||||
Approve | 17263766 | 537 days ago | IN | 0 ETH | 0.00159512 | ||||
Approve | 15115574 | 846 days ago | IN | 0 ETH | 0.00244916 | ||||
0x60806040 | 15077507 | 852 days ago | IN | 0 ETH | 0.10512519 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GaugeToken
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BlacklistToken.sol"; contract GaugeToken is BlacklistToken { constructor(string memory name_, string memory symbol_, address _blacklist) BlacklistToken( name_, symbol_, _blacklist){ _mint(msg.sender, 500_000_000 ether); } function transferBatch(address[] memory accounts, uint256[] memory amounts) public { require(accounts.length == amounts.length, 'transferBatch: Arrays must be the same length'); for(uint16 i = 0; i < accounts.length; i++){ _transfer(msg.sender, accounts[i], amounts[i]); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./SnapshotToken.sol"; import "./Blacklist/IBlacklist.sol"; contract BlacklistToken is SnapshotToken { address public blacklist; event DestroyedBlackFunds(address _blackListedUser, uint _balance); // /** // * @dev Initializes the contract setting the deployer as the initial owner. // */ // function __BlacklistToken_init(string memory name_, string memory symbol_, address _blacklist) internal onlyInitializing { // __SnapshotToken_init( name_, symbol_); // blacklist = _blacklist; // } constructor(string memory name_, string memory symbol_, address _blacklist) SnapshotToken( name_, symbol_){ blacklist = _blacklist; } modifier isNotBlacklisted(address _account) { bool isBlacklisted = IBlacklist(blacklist).isBlacklisted(_account); require(!isBlacklisted , 'isNotBlacklisted: this account is blacklisted'); _; } function destroyBlackFunds (address _account, uint256 amount) public onlyOwner { require(IBlacklist(blacklist).isBlacklisted(_account),'destroyBlackFunds: user must be blacklisted'); bool success = IBlacklist(blacklist).remove(_account); require(success, 'destroyBlackFunds: remove failed'); _burn(_account, amount); IBlacklist(blacklist).add(_account); emit DestroyedBlackFunds(_account, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override isNotBlacklisted(from) isNotBlacklisted(to) { super._beforeTokenTransfer(from, to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./PausableToken.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol"; contract SnapshotToken is PausableToken, ERC20Snapshot { constructor(string memory name_, string memory symbol_) PausableToken( name_, symbol_){ } function snapshot() public onlyOwner { _snapshot(); } function _beforeTokenTransfer( address from, address to, uint256 amount )virtual internal override(ERC20Pausable, ERC20Snapshot) { super._beforeTokenTransfer(from, to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IBlacklist { event AddedToBlacklist(address indexed account); event RemovedFromBlacklist(address indexed account); function add(address account) external returns(bool); function remove(address account) external returns(bool); function isBlacklisted(address account)external returns(bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract PausableToken is ERC20Pausable, Ownable { /** * @dev Initializes the contract setting the deployer as the initial owner. */ // function __PausableToken_init(string memory name_, string memory symbol_) internal onlyInitializing { // //__Ownable_init(); // __ERC20_init( name_, symbol_); // } constructor (string memory name_, string memory symbol_) ERC20(name_, symbol_) { } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/extensions/ERC20Snapshot.sol) pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Arrays.sol"; import "../../../utils/Counters.sol"; /** * @dev This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and * total supply at the time are recorded for later access. * * This can be used to safely create mechanisms based on token balances such as trustless dividends or weighted voting. * In naive implementations it's possible to perform a "double spend" attack by reusing the same balance from different * accounts. By using snapshots to calculate dividends or voting power, those attacks no longer apply. It can also be * used to create an efficient ERC20 forking mechanism. * * Snapshots are created by the internal {_snapshot} function, which will emit the {Snapshot} event and return a * snapshot id. To get the total supply at the time of a snapshot, call the function {totalSupplyAt} with the snapshot * id. To get the balance of an account at the time of a snapshot, call the {balanceOfAt} function with the snapshot id * and the account address. * * NOTE: Snapshot policy can be customized by overriding the {_getCurrentSnapshotId} method. For example, having it * return `block.number` will trigger the creation of snapshot at the beginning of each new block. When overriding this * function, be careful about the monotonicity of its result. Non-monotonic snapshot ids will break the contract. * * Implementing snapshots for every block using this method will incur significant gas costs. For a gas-efficient * alternative consider {ERC20Votes}. * * ==== Gas Costs * * Snapshots are efficient. Snapshot creation is _O(1)_. Retrieval of balances or total supply from a snapshot is _O(log * n)_ in the number of snapshots that have been created, although _n_ for a specific account will generally be much * smaller since identical balances in subsequent snapshots are stored as a single entry. * * There is a constant overhead for normal ERC20 transfers due to the additional snapshot bookkeeping. This overhead is * only significant for the first transfer that immediately follows a snapshot for a particular account. Subsequent * transfers will have normal cost until the next snapshot, and so on. */ abstract contract ERC20Snapshot is ERC20 { // Inspired by Jordi Baylina's MiniMeToken to record historical balances: // https://github.com/Giveth/minimd/blob/ea04d950eea153a04c51fa510b068b9dded390cb/contracts/MiniMeToken.sol using Arrays for uint256[]; using Counters for Counters.Counter; // Snapshotted values have arrays of ids and the value corresponding to that id. These could be an array of a // Snapshot struct, but that would impede usage of functions that work on an array. struct Snapshots { uint256[] ids; uint256[] values; } mapping(address => Snapshots) private _accountBalanceSnapshots; Snapshots private _totalSupplySnapshots; // Snapshot ids increase monotonically, with the first value being 1. An id of 0 is invalid. Counters.Counter private _currentSnapshotId; /** * @dev Emitted by {_snapshot} when a snapshot identified by `id` is created. */ event Snapshot(uint256 id); /** * @dev Creates a new snapshot and returns its snapshot id. * * Emits a {Snapshot} event that contains the same id. * * {_snapshot} is `internal` and you have to decide how to expose it externally. Its usage may be restricted to a * set of accounts, for example using {AccessControl}, or it may be open to the public. * * [WARNING] * ==== * While an open way of calling {_snapshot} is required for certain trust minimization mechanisms such as forking, * you must consider that it can potentially be used by attackers in two ways. * * First, it can be used to increase the cost of retrieval of values from snapshots, although it will grow * logarithmically thus rendering this attack ineffective in the long term. Second, it can be used to target * specific accounts and increase the cost of ERC20 transfers for them, in the ways specified in the Gas Costs * section above. * * We haven't measured the actual numbers; if this is something you're interested in please reach out to us. * ==== */ function _snapshot() internal virtual returns (uint256) { _currentSnapshotId.increment(); uint256 currentId = _getCurrentSnapshotId(); emit Snapshot(currentId); return currentId; } /** * @dev Get the current snapshotId */ function _getCurrentSnapshotId() internal view virtual returns (uint256) { return _currentSnapshotId.current(); } /** * @dev Retrieves the balance of `account` at the time `snapshotId` was created. */ function balanceOfAt(address account, uint256 snapshotId) public view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt(snapshotId, _accountBalanceSnapshots[account]); return snapshotted ? value : balanceOf(account); } /** * @dev Retrieves the total supply at the time `snapshotId` was created. */ function totalSupplyAt(uint256 snapshotId) public view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt(snapshotId, _totalSupplySnapshots); return snapshotted ? value : totalSupply(); } // Update balance and/or total supply snapshots before the values are modified. This is implemented // in the _beforeTokenTransfer hook, which is executed for _mint, _burn, and _transfer operations. function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // mint _updateAccountSnapshot(to); _updateTotalSupplySnapshot(); } else if (to == address(0)) { // burn _updateAccountSnapshot(from); _updateTotalSupplySnapshot(); } else { // transfer _updateAccountSnapshot(from); _updateAccountSnapshot(to); } } function _valueAt(uint256 snapshotId, Snapshots storage snapshots) private view returns (bool, uint256) { require(snapshotId > 0, "ERC20Snapshot: id is 0"); require(snapshotId <= _getCurrentSnapshotId(), "ERC20Snapshot: nonexistent id"); // When a valid snapshot is queried, there are three possibilities: // a) The queried value was not modified after the snapshot was taken. Therefore, a snapshot entry was never // created for this id, and all stored snapshot ids are smaller than the requested one. The value that corresponds // to this id is the current one. // b) The queried value was modified after the snapshot was taken. Therefore, there will be an entry with the // requested id, and its value is the one to return. // c) More snapshots were created after the requested one, and the queried value was later modified. There will be // no entry for the requested id: the value that corresponds to it is that of the smallest snapshot id that is // larger than the requested one. // // In summary, we need to find an element in an array, returning the index of the smallest value that is larger if // it is not found, unless said value doesn't exist (e.g. when all values are smaller). Arrays.findUpperBound does // exactly this. uint256 index = snapshots.ids.findUpperBound(snapshotId); if (index == snapshots.ids.length) { return (false, 0); } else { return (true, snapshots.values[index]); } } function _updateAccountSnapshot(address account) private { _updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account)); } function _updateTotalSupplySnapshot() private { _updateSnapshot(_totalSupplySnapshots, totalSupply()); } function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private { uint256 currentId = _getCurrentSnapshotId(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); snapshots.values.push(currentValue); } } function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) { if (ids.length == 0) { return 0; } else { return ids[ids.length - 1]; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Pausable.sol) pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../security/Pausable.sol"; /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Arrays.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; /** * @dev Collection of functions related to array types. */ library Arrays { /** * @dev Searches a sorted `array` and returns the first index that contains * a value greater or equal to `element`. If no such index exists (i.e. all * values in the array are strictly less than `element`), the array length is * returned. Time complexity O(log n). * * `array` is expected to be sorted in ascending order, and to contain no * repeated elements. */ function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) { if (array.length == 0) { return 0; } uint256 low = 0; uint256 high = array.length; while (low < high) { uint256 mid = Math.average(low, high); // Note that mid will always be strictly less than high (i.e. it will be a valid array index) // because Math.average rounds down (it does integer division with truncation). if (array[mid] > element) { high = mid; } else { low = mid + 1; } } // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound. if (low > 0 && array[low - 1] == element) { return low - 1; } else { return low; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"_blacklist","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_blackListedUser","type":"address"},{"indexed":false,"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Snapshot","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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"balanceOfAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklist","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":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"destroyBlackFunds","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transferBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620041da380380620041da833981810160405281019062000037919062000b9e565b828282828281818181816003908051906020019062000058929190620008ec565b50806004908051906020019062000071929190620008ec565b5050506000600560006101000a81548160ff021916908315150217905550620000af620000a36200011e60201b60201c565b6200012660201b60201c565b5050505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000115336b019d971e4fe8401e74000000620001ec60201b60201c565b5050506200101b565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200025f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002569062000c99565b60405180910390fd5b62000273600083836200036560201b60201c565b806002600082825462000287919062000cf4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002de919062000cf4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000345919062000d62565b60405180910390a362000361600083836200055e60201b60201c565b5050565b826000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401620003c5919062000d90565b6020604051808303816000875af1158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b919062000dea565b9050801562000451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004489062000e92565b60405180910390fd5b836000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401620004b1919062000d90565b6020604051808303816000875af1158015620004d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f7919062000dea565b905080156200053d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005349062000e92565b60405180910390fd5b620005558787876200056360201b62000f691760201c565b50505050505050565b505050565b6200057b8383836200058060201b62000f791760201c565b505050565b620005988383836200067b60201b620010331760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620005f557620005df82620006eb60201b60201c565b620005ef6200074e60201b60201c565b62000676565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000652576200063c83620006eb60201b60201c565b6200064c6200074e60201b60201c565b62000675565b6200066383620006eb60201b60201c565b6200067482620006eb60201b60201c565b5b5b505050565b620006938383836200077260201b6200108b1760201c565b620006a36200077760201b60201c565b15620006e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006dd9062000f2a565b60405180910390fd5b505050565b6200074b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206200073f836200078e60201b60201c565b620007d660201b60201c565b50565b620007706007620007646200086260201b60201c565b620007d660201b60201c565b565b505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000620007e86200086c60201b60201c565b905080620007ff846000016200088a60201b60201c565b10156200085d5782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b6000600254905090565b6000620008856009620008de60201b620010901760201c565b905090565b60008082805490501415620008a35760009050620008d9565b8160018380549050620008b7919062000f4c565b81548110620008cb57620008ca62000f87565b5b906000526020600020015490505b919050565b600081600001549050919050565b828054620008fa9062000fe5565b90600052602060002090601f0160209004810192826200091e57600085556200096a565b82601f106200093957805160ff19168380011785556200096a565b828001600101855582156200096a579182015b82811115620009695782518255916020019190600101906200094c565b5b5090506200097991906200097d565b5090565b5b80821115620009985760008160009055506001016200097e565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000a0582620009ba565b810181811067ffffffffffffffff8211171562000a275762000a26620009cb565b5b80604052505050565b600062000a3c6200099c565b905062000a4a8282620009fa565b919050565b600067ffffffffffffffff82111562000a6d5762000a6c620009cb565b5b62000a7882620009ba565b9050602081019050919050565b60005b8381101562000aa557808201518184015260208101905062000a88565b8381111562000ab5576000848401525b50505050565b600062000ad262000acc8462000a4f565b62000a30565b90508281526020810184848401111562000af15762000af0620009b5565b5b62000afe84828562000a85565b509392505050565b600082601f83011262000b1e5762000b1d620009b0565b5b815162000b3084826020860162000abb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b668262000b39565b9050919050565b62000b788162000b59565b811462000b8457600080fd5b50565b60008151905062000b988162000b6d565b92915050565b60008060006060848603121562000bba5762000bb9620009a6565b5b600084015167ffffffffffffffff81111562000bdb5762000bda620009ab565b5b62000be98682870162000b06565b935050602084015167ffffffffffffffff81111562000c0d5762000c0c620009ab565b5b62000c1b8682870162000b06565b925050604062000c2e8682870162000b87565b9150509250925092565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c81601f8362000c38565b915062000c8e8262000c49565b602082019050919050565b6000602082019050818103600083015262000cb48162000c72565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d018262000cbb565b915062000d0e8362000cbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d465762000d4562000cc5565b5b828201905092915050565b62000d5c8162000cbb565b82525050565b600060208201905062000d79600083018462000d51565b92915050565b62000d8a8162000b59565b82525050565b600060208201905062000da7600083018462000d7f565b92915050565b60008115159050919050565b62000dc48162000dad565b811462000dd057600080fd5b50565b60008151905062000de48162000db9565b92915050565b60006020828403121562000e035762000e02620009a6565b5b600062000e138482850162000dd3565b91505092915050565b7f69734e6f74426c61636b6c69737465643a2074686973206163636f756e74206960008201527f7320626c61636b6c697374656400000000000000000000000000000000000000602082015250565b600062000e7a602d8362000c38565b915062000e878262000e1c565b604082019050919050565b6000602082019050818103600083015262000ead8162000e6b565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b600062000f12602a8362000c38565b915062000f1f8262000eb4565b604082019050919050565b6000602082019050818103600083015262000f458162000f03565b9050919050565b600062000f598262000cbb565b915062000f668362000cbb565b92508282101562000f7c5762000f7b62000cc5565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ffe57607f821691505b6020821081141562001015576200101462000fb6565b5b50919050565b6131af806200102b6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063981b24d01161007c578063981b24d014610356578063a457c2d714610386578063a4b5fa56146103b6578063a9059cbb146103d4578063dd62ed3e14610404578063f2fde38b146104345761014d565b806370a08231146102cc578063715018a6146102fc5780638456cb59146103065780638da5cb5b1461031057806395d89b411461032e5780639711715a1461034c5761014d565b80633950935111610115578063395093511461020c5780633b3e672f1461023c5780633f4ba83a146102585780634ee2cd7e1461026257806353d51e64146102925780635c975abb146102ae5761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610450565b6040516101679190611f7c565b60405180910390f35b61018a60048036038101906101859190612046565b6104e2565b60405161019791906120a1565b60405180910390f35b6101a8610505565b6040516101b591906120cb565b60405180910390f35b6101d860048036038101906101d391906120e6565b61050f565b6040516101e591906120a1565b60405180910390f35b6101f661053e565b6040516102039190612155565b60405180910390f35b61022660048036038101906102219190612046565b610547565b60405161023391906120a1565b60405180910390f35b6102566004803603810190610251919061237b565b61057e565b005b610260610631565b005b61027c60048036038101906102779190612046565b6106b7565b60405161028991906120cb565b60405180910390f35b6102ac60048036038101906102a79190612046565b610727565b005b6102b6610a49565b6040516102c391906120a1565b60405180910390f35b6102e660048036038101906102e191906123f3565b610a60565b6040516102f391906120cb565b60405180910390f35b610304610aa8565b005b61030e610b30565b005b610318610bb6565b604051610325919061242f565b60405180910390f35b610336610be0565b6040516103439190611f7c565b60405180910390f35b610354610c72565b005b610370600480360381019061036b919061244a565b610cf9565b60405161037d91906120cb565b60405180910390f35b6103a0600480360381019061039b9190612046565b610d2a565b6040516103ad91906120a1565b60405180910390f35b6103be610da1565b6040516103cb919061242f565b60405180910390f35b6103ee60048036038101906103e99190612046565b610dc7565b6040516103fb91906120a1565b60405180910390f35b61041e60048036038101906104199190612477565b610dea565b60405161042b91906120cb565b60405180910390f35b61044e600480360381019061044991906123f3565b610e71565b005b60606003805461045f906124e6565b80601f016020809104026020016040519081016040528092919081815260200182805461048b906124e6565b80156104d85780601f106104ad576101008083540402835291602001916104d8565b820191906000526020600020905b8154815290600101906020018083116104bb57829003601f168201915b5050505050905090565b6000806104ed61109e565b90506104fa8185856110a6565b600191505092915050565b6000600254905090565b60008061051a61109e565b9050610527858285611271565b6105328585856112fd565b60019150509392505050565b60006012905090565b60008061055261109e565b90506105738185856105648589610dea565b61056e9190612547565b6110a6565b600191505092915050565b80518251146105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b99061260f565b60405180910390fd5b60005b82518161ffff16101561062c5761061933848361ffff16815181106105ed576105ec61262f565b5b6020026020010151848461ffff168151811061060c5761060b61262f565b5b60200260200101516112fd565b80806106249061266c565b9150506105c5565b505050565b61063961109e565b73ffffffffffffffffffffffffffffffffffffffff16610657610bb6565b73ffffffffffffffffffffffffffffffffffffffff16146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906126e3565b60405180910390fd5b6106b561157e565b565b600080600061070484600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611620565b915091508161071b5761071685610a60565b61071d565b805b9250505092915050565b61072f61109e565b73ffffffffffffffffffffffffffffffffffffffff1661074d610bb6565b73ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a906126e3565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b81526004016107fe919061242f565b6020604051808303816000875af115801561081d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610841919061272f565b610880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610877906127ce565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b81526004016108dd919061242f565b6020604051808303816000875af11580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061272f565b905080610962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109599061283a565b60405180910390fd5b61096c8383611716565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a3b0a4f846040518263ffffffff1660e01b81526004016109c7919061242f565b6020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061272f565b507f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c68383604051610a3c92919061285a565b60405180910390a1505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ab061109e565b73ffffffffffffffffffffffffffffffffffffffff16610ace610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b906126e3565b60405180910390fd5b610b2e60006118ed565b565b610b3861109e565b73ffffffffffffffffffffffffffffffffffffffff16610b56610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba3906126e3565b60405180910390fd5b610bb46119b3565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bef906124e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1b906124e6565b8015610c685780601f10610c3d57610100808354040283529160200191610c68565b820191906000526020600020905b815481529060010190602001808311610c4b57829003601f168201915b5050505050905090565b610c7a61109e565b73ffffffffffffffffffffffffffffffffffffffff16610c98610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906126e3565b60405180910390fd5b610cf6611a56565b50565b6000806000610d09846007611620565b9150915081610d1f57610d1a610505565b610d21565b805b92505050919050565b600080610d3561109e565b90506000610d438286610dea565b905083811015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906128f5565b60405180910390fd5b610d9582868684036110a6565b60019250505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610dd261109e565b9050610ddf8185856112fd565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e7961109e565b73ffffffffffffffffffffffffffffffffffffffff16610e97610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906126e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612987565b60405180910390fd5b610f66816118ed565b50565b610f74838383610f79565b505050565b610f84838383611033565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fcf57610fc282611aac565b610fca611aff565b61102e565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561101a5761100d83611aac565b611015611aff565b61102d565b61102383611aac565b61102c82611aac565b5b5b505050565b61103e83838361108b565b611046610a49565b15611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90612a19565b60405180910390fd5b505050565b505050565b600081600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90612aab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612b3d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126491906120cb565b60405180910390a3505050565b600061127d8484610dea565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112f757818110156112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e090612ba9565b60405180910390fd5b6112f684848484036110a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490612c3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612ccd565b60405180910390fd5b6113e8838383611b13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590612d5f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115019190612547565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161156591906120cb565b60405180910390a3611578848484611cef565b50505050565b611586610a49565b6115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90612dcb565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61160961109e565b604051611616919061242f565b60405180910390a1565b60008060008411611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612e37565b60405180910390fd5b61166e611cf4565b8411156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790612ea3565b60405180910390fd5b60006116c88585600001611d0590919063ffffffff16565b905083600001805490508114156116e657600080925092505061170f565b60018460010182815481106116fe576116fd61262f565b5b906000526020600020015492509250505b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90612f35565b60405180910390fd5b61179282600083611b13565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f90612fc7565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461186f9190612fe7565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118d491906120cb565b60405180910390a36118e883600084611cef565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119bb610a49565b156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613067565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f61109e565b604051611a4c919061242f565b60405180910390a1565b6000611a626009611ddf565b6000611a6c611cf4565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb6781604051611a9d91906120cb565b60405180910390a18091505090565b611afc600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611af783610a60565b611df5565b50565b611b116007611b0c610505565b611df5565b565b826000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401611b71919061242f565b6020604051808303816000875af1158015611b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb4919061272f565b90508015611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906130f9565b60405180910390fd5b836000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401611c55919061242f565b6020604051808303816000875af1158015611c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c98919061272f565b90508015611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906130f9565b60405180910390fd5b611ce6878787610f69565b50505050505050565b505050565b6000611d006009611090565b905090565b60008083805490501415611d1c5760009050611dd9565b600080848054905090505b80821015611d80576000611d3b8383611e70565b905084868281548110611d5157611d5061262f565b5b90600052602060002001541115611d6a57809150611d7a565b600181611d779190612547565b92505b50611d27565b600082118015611db857508385600184611d9a9190612fe7565b81548110611dab57611daa61262f565b5b9060005260206000200154145b15611dd357600182611dca9190612fe7565b92505050611dd9565b81925050505b92915050565b6001816000016000828254019250508190555050565b6000611dff611cf4565b905080611e0e84600001611e96565b1015611e6b5782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b60006002828418611e819190613148565b828416611e8e9190612547565b905092915050565b60008082805490501415611ead5760009050611ede565b8160018380549050611ebf9190612fe7565b81548110611ed057611ecf61262f565b5b906000526020600020015490505b919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f1d578082015181840152602081019050611f02565b83811115611f2c576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f4e82611ee3565b611f588185611eee565b9350611f68818560208601611eff565b611f7181611f32565b840191505092915050565b60006020820190508181036000830152611f968184611f43565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fdd82611fb2565b9050919050565b611fed81611fd2565b8114611ff857600080fd5b50565b60008135905061200a81611fe4565b92915050565b6000819050919050565b61202381612010565b811461202e57600080fd5b50565b6000813590506120408161201a565b92915050565b6000806040838503121561205d5761205c611fa8565b5b600061206b85828601611ffb565b925050602061207c85828601612031565b9150509250929050565b60008115159050919050565b61209b81612086565b82525050565b60006020820190506120b66000830184612092565b92915050565b6120c581612010565b82525050565b60006020820190506120e060008301846120bc565b92915050565b6000806000606084860312156120ff576120fe611fa8565b5b600061210d86828701611ffb565b935050602061211e86828701611ffb565b925050604061212f86828701612031565b9150509250925092565b600060ff82169050919050565b61214f81612139565b82525050565b600060208201905061216a6000830184612146565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121ad82611f32565b810181811067ffffffffffffffff821117156121cc576121cb612175565b5b80604052505050565b60006121df611f9e565b90506121eb82826121a4565b919050565b600067ffffffffffffffff82111561220b5761220a612175565b5b602082029050602081019050919050565b600080fd5b600061223461222f846121f0565b6121d5565b905080838252602082019050602084028301858111156122575761225661221c565b5b835b81811015612280578061226c8882611ffb565b845260208401935050602081019050612259565b5050509392505050565b600082601f83011261229f5761229e612170565b5b81356122af848260208601612221565b91505092915050565b600067ffffffffffffffff8211156122d3576122d2612175565b5b602082029050602081019050919050565b60006122f76122f2846122b8565b6121d5565b9050808382526020820190506020840283018581111561231a5761231961221c565b5b835b81811015612343578061232f8882612031565b84526020840193505060208101905061231c565b5050509392505050565b600082601f83011261236257612361612170565b5b81356123728482602086016122e4565b91505092915050565b6000806040838503121561239257612391611fa8565b5b600083013567ffffffffffffffff8111156123b0576123af611fad565b5b6123bc8582860161228a565b925050602083013567ffffffffffffffff8111156123dd576123dc611fad565b5b6123e98582860161234d565b9150509250929050565b60006020828403121561240957612408611fa8565b5b600061241784828501611ffb565b91505092915050565b61242981611fd2565b82525050565b60006020820190506124446000830184612420565b92915050565b6000602082840312156124605761245f611fa8565b5b600061246e84828501612031565b91505092915050565b6000806040838503121561248e5761248d611fa8565b5b600061249c85828601611ffb565b92505060206124ad85828601611ffb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124fe57607f821691505b60208210811415612512576125116124b7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061255282612010565b915061255d83612010565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561259257612591612518565b5b828201905092915050565b7f7472616e7366657242617463683a20417272617973206d75737420626520746860008201527f652073616d65206c656e67746800000000000000000000000000000000000000602082015250565b60006125f9602d83611eee565b91506126048261259d565b604082019050919050565b60006020820190508181036000830152612628816125ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006126778261265e565b915061ffff82141561268c5761268b612518565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126cd602083611eee565b91506126d882612697565b602082019050919050565b600060208201905081810360008301526126fc816126c0565b9050919050565b61270c81612086565b811461271757600080fd5b50565b60008151905061272981612703565b92915050565b60006020828403121561274557612744611fa8565b5b60006127538482850161271a565b91505092915050565b7f64657374726f79426c61636b46756e64733a2075736572206d7573742062652060008201527f626c61636b6c6973746564000000000000000000000000000000000000000000602082015250565b60006127b8602b83611eee565b91506127c38261275c565b604082019050919050565b600060208201905081810360008301526127e7816127ab565b9050919050565b7f64657374726f79426c61636b46756e64733a2072656d6f7665206661696c6564600082015250565b6000612824602083611eee565b915061282f826127ee565b602082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b600060408201905061286f6000830185612420565b61287c60208301846120bc565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128df602583611eee565b91506128ea82612883565b604082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612971602683611eee565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000612a03602a83611eee565b9150612a0e826129a7565b604082019050919050565b60006020820190508181036000830152612a32816129f6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a95602483611eee565b9150612aa082612a39565b604082019050919050565b60006020820190508181036000830152612ac481612a88565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b27602283611eee565b9150612b3282612acb565b604082019050919050565b60006020820190508181036000830152612b5681612b1a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612b93601d83611eee565b9150612b9e82612b5d565b602082019050919050565b60006020820190508181036000830152612bc281612b86565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c25602583611eee565b9150612c3082612bc9565b604082019050919050565b60006020820190508181036000830152612c5481612c18565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cb7602383611eee565b9150612cc282612c5b565b604082019050919050565b60006020820190508181036000830152612ce681612caa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d49602683611eee565b9150612d5482612ced565b604082019050919050565b60006020820190508181036000830152612d7881612d3c565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612db5601483611eee565b9150612dc082612d7f565b602082019050919050565b60006020820190508181036000830152612de481612da8565b9050919050565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b6000612e21601683611eee565b9150612e2c82612deb565b602082019050919050565b60006020820190508181036000830152612e5081612e14565b9050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b6000612e8d601d83611eee565b9150612e9882612e57565b602082019050919050565b60006020820190508181036000830152612ebc81612e80565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f1f602183611eee565b9150612f2a82612ec3565b604082019050919050565b60006020820190508181036000830152612f4e81612f12565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb1602283611eee565b9150612fbc82612f55565b604082019050919050565b60006020820190508181036000830152612fe081612fa4565b9050919050565b6000612ff282612010565b9150612ffd83612010565b9250828210156130105761300f612518565b5b828203905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613051601083611eee565b915061305c8261301b565b602082019050919050565b6000602082019050818103600083015261308081613044565b9050919050565b7f69734e6f74426c61636b6c69737465643a2074686973206163636f756e74206960008201527f7320626c61636b6c697374656400000000000000000000000000000000000000602082015250565b60006130e3602d83611eee565b91506130ee82613087565b604082019050919050565b60006020820190508181036000830152613112816130d6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061315382612010565b915061315e83612010565b92508261316e5761316d613119565b5b82820490509291505056fea2646970667358221220d5095598f8f8482db2238c5a3eb24ea1816ace8505646b2aeca3c9a71df6ecb064736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000095a01ed9189c912a9d3edd7339dc4ef37dadd4a5000000000000000000000000000000000000000000000000000000000000000c47617567654669656c645632000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044741554900000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063981b24d01161007c578063981b24d014610356578063a457c2d714610386578063a4b5fa56146103b6578063a9059cbb146103d4578063dd62ed3e14610404578063f2fde38b146104345761014d565b806370a08231146102cc578063715018a6146102fc5780638456cb59146103065780638da5cb5b1461031057806395d89b411461032e5780639711715a1461034c5761014d565b80633950935111610115578063395093511461020c5780633b3e672f1461023c5780633f4ba83a146102585780634ee2cd7e1461026257806353d51e64146102925780635c975abb146102ae5761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610450565b6040516101679190611f7c565b60405180910390f35b61018a60048036038101906101859190612046565b6104e2565b60405161019791906120a1565b60405180910390f35b6101a8610505565b6040516101b591906120cb565b60405180910390f35b6101d860048036038101906101d391906120e6565b61050f565b6040516101e591906120a1565b60405180910390f35b6101f661053e565b6040516102039190612155565b60405180910390f35b61022660048036038101906102219190612046565b610547565b60405161023391906120a1565b60405180910390f35b6102566004803603810190610251919061237b565b61057e565b005b610260610631565b005b61027c60048036038101906102779190612046565b6106b7565b60405161028991906120cb565b60405180910390f35b6102ac60048036038101906102a79190612046565b610727565b005b6102b6610a49565b6040516102c391906120a1565b60405180910390f35b6102e660048036038101906102e191906123f3565b610a60565b6040516102f391906120cb565b60405180910390f35b610304610aa8565b005b61030e610b30565b005b610318610bb6565b604051610325919061242f565b60405180910390f35b610336610be0565b6040516103439190611f7c565b60405180910390f35b610354610c72565b005b610370600480360381019061036b919061244a565b610cf9565b60405161037d91906120cb565b60405180910390f35b6103a0600480360381019061039b9190612046565b610d2a565b6040516103ad91906120a1565b60405180910390f35b6103be610da1565b6040516103cb919061242f565b60405180910390f35b6103ee60048036038101906103e99190612046565b610dc7565b6040516103fb91906120a1565b60405180910390f35b61041e60048036038101906104199190612477565b610dea565b60405161042b91906120cb565b60405180910390f35b61044e600480360381019061044991906123f3565b610e71565b005b60606003805461045f906124e6565b80601f016020809104026020016040519081016040528092919081815260200182805461048b906124e6565b80156104d85780601f106104ad576101008083540402835291602001916104d8565b820191906000526020600020905b8154815290600101906020018083116104bb57829003601f168201915b5050505050905090565b6000806104ed61109e565b90506104fa8185856110a6565b600191505092915050565b6000600254905090565b60008061051a61109e565b9050610527858285611271565b6105328585856112fd565b60019150509392505050565b60006012905090565b60008061055261109e565b90506105738185856105648589610dea565b61056e9190612547565b6110a6565b600191505092915050565b80518251146105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b99061260f565b60405180910390fd5b60005b82518161ffff16101561062c5761061933848361ffff16815181106105ed576105ec61262f565b5b6020026020010151848461ffff168151811061060c5761060b61262f565b5b60200260200101516112fd565b80806106249061266c565b9150506105c5565b505050565b61063961109e565b73ffffffffffffffffffffffffffffffffffffffff16610657610bb6565b73ffffffffffffffffffffffffffffffffffffffff16146106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906126e3565b60405180910390fd5b6106b561157e565b565b600080600061070484600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611620565b915091508161071b5761071685610a60565b61071d565b805b9250505092915050565b61072f61109e565b73ffffffffffffffffffffffffffffffffffffffff1661074d610bb6565b73ffffffffffffffffffffffffffffffffffffffff16146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a906126e3565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b81526004016107fe919061242f565b6020604051808303816000875af115801561081d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610841919061272f565b610880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610877906127ce565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b81526004016108dd919061242f565b6020604051808303816000875af11580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061272f565b905080610962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109599061283a565b60405180910390fd5b61096c8383611716565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a3b0a4f846040518263ffffffff1660e01b81526004016109c7919061242f565b6020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061272f565b507f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c68383604051610a3c92919061285a565b60405180910390a1505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ab061109e565b73ffffffffffffffffffffffffffffffffffffffff16610ace610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b906126e3565b60405180910390fd5b610b2e60006118ed565b565b610b3861109e565b73ffffffffffffffffffffffffffffffffffffffff16610b56610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba3906126e3565b60405180910390fd5b610bb46119b3565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bef906124e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1b906124e6565b8015610c685780601f10610c3d57610100808354040283529160200191610c68565b820191906000526020600020905b815481529060010190602001808311610c4b57829003601f168201915b5050505050905090565b610c7a61109e565b73ffffffffffffffffffffffffffffffffffffffff16610c98610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906126e3565b60405180910390fd5b610cf6611a56565b50565b6000806000610d09846007611620565b9150915081610d1f57610d1a610505565b610d21565b805b92505050919050565b600080610d3561109e565b90506000610d438286610dea565b905083811015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906128f5565b60405180910390fd5b610d9582868684036110a6565b60019250505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610dd261109e565b9050610ddf8185856112fd565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e7961109e565b73ffffffffffffffffffffffffffffffffffffffff16610e97610bb6565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906126e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612987565b60405180910390fd5b610f66816118ed565b50565b610f74838383610f79565b505050565b610f84838383611033565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fcf57610fc282611aac565b610fca611aff565b61102e565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561101a5761100d83611aac565b611015611aff565b61102d565b61102383611aac565b61102c82611aac565b5b5b505050565b61103e83838361108b565b611046610a49565b15611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90612a19565b60405180910390fd5b505050565b505050565b600081600001549050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90612aab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612b3d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161126491906120cb565b60405180910390a3505050565b600061127d8484610dea565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112f757818110156112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e090612ba9565b60405180910390fd5b6112f684848484036110a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490612c3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612ccd565b60405180910390fd5b6113e8838383611b13565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590612d5f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115019190612547565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161156591906120cb565b60405180910390a3611578848484611cef565b50505050565b611586610a49565b6115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90612dcb565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61160961109e565b604051611616919061242f565b60405180910390a1565b60008060008411611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90612e37565b60405180910390fd5b61166e611cf4565b8411156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790612ea3565b60405180910390fd5b60006116c88585600001611d0590919063ffffffff16565b905083600001805490508114156116e657600080925092505061170f565b60018460010182815481106116fe576116fd61262f565b5b906000526020600020015492509250505b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90612f35565b60405180910390fd5b61179282600083611b13565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f90612fc7565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461186f9190612fe7565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118d491906120cb565b60405180910390a36118e883600084611cef565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119bb610a49565b156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613067565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f61109e565b604051611a4c919061242f565b60405180910390a1565b6000611a626009611ddf565b6000611a6c611cf4565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb6781604051611a9d91906120cb565b60405180910390a18091505090565b611afc600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611af783610a60565b611df5565b50565b611b116007611b0c610505565b611df5565b565b826000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401611b71919061242f565b6020604051808303816000875af1158015611b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb4919061272f565b90508015611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906130f9565b60405180910390fd5b836000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe575a87836040518263ffffffff1660e01b8152600401611c55919061242f565b6020604051808303816000875af1158015611c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c98919061272f565b90508015611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd2906130f9565b60405180910390fd5b611ce6878787610f69565b50505050505050565b505050565b6000611d006009611090565b905090565b60008083805490501415611d1c5760009050611dd9565b600080848054905090505b80821015611d80576000611d3b8383611e70565b905084868281548110611d5157611d5061262f565b5b90600052602060002001541115611d6a57809150611d7a565b600181611d779190612547565b92505b50611d27565b600082118015611db857508385600184611d9a9190612fe7565b81548110611dab57611daa61262f565b5b9060005260206000200154145b15611dd357600182611dca9190612fe7565b92505050611dd9565b81925050505b92915050565b6001816000016000828254019250508190555050565b6000611dff611cf4565b905080611e0e84600001611e96565b1015611e6b5782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b60006002828418611e819190613148565b828416611e8e9190612547565b905092915050565b60008082805490501415611ead5760009050611ede565b8160018380549050611ebf9190612fe7565b81548110611ed057611ecf61262f565b5b906000526020600020015490505b919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f1d578082015181840152602081019050611f02565b83811115611f2c576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f4e82611ee3565b611f588185611eee565b9350611f68818560208601611eff565b611f7181611f32565b840191505092915050565b60006020820190508181036000830152611f968184611f43565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fdd82611fb2565b9050919050565b611fed81611fd2565b8114611ff857600080fd5b50565b60008135905061200a81611fe4565b92915050565b6000819050919050565b61202381612010565b811461202e57600080fd5b50565b6000813590506120408161201a565b92915050565b6000806040838503121561205d5761205c611fa8565b5b600061206b85828601611ffb565b925050602061207c85828601612031565b9150509250929050565b60008115159050919050565b61209b81612086565b82525050565b60006020820190506120b66000830184612092565b92915050565b6120c581612010565b82525050565b60006020820190506120e060008301846120bc565b92915050565b6000806000606084860312156120ff576120fe611fa8565b5b600061210d86828701611ffb565b935050602061211e86828701611ffb565b925050604061212f86828701612031565b9150509250925092565b600060ff82169050919050565b61214f81612139565b82525050565b600060208201905061216a6000830184612146565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121ad82611f32565b810181811067ffffffffffffffff821117156121cc576121cb612175565b5b80604052505050565b60006121df611f9e565b90506121eb82826121a4565b919050565b600067ffffffffffffffff82111561220b5761220a612175565b5b602082029050602081019050919050565b600080fd5b600061223461222f846121f0565b6121d5565b905080838252602082019050602084028301858111156122575761225661221c565b5b835b81811015612280578061226c8882611ffb565b845260208401935050602081019050612259565b5050509392505050565b600082601f83011261229f5761229e612170565b5b81356122af848260208601612221565b91505092915050565b600067ffffffffffffffff8211156122d3576122d2612175565b5b602082029050602081019050919050565b60006122f76122f2846122b8565b6121d5565b9050808382526020820190506020840283018581111561231a5761231961221c565b5b835b81811015612343578061232f8882612031565b84526020840193505060208101905061231c565b5050509392505050565b600082601f83011261236257612361612170565b5b81356123728482602086016122e4565b91505092915050565b6000806040838503121561239257612391611fa8565b5b600083013567ffffffffffffffff8111156123b0576123af611fad565b5b6123bc8582860161228a565b925050602083013567ffffffffffffffff8111156123dd576123dc611fad565b5b6123e98582860161234d565b9150509250929050565b60006020828403121561240957612408611fa8565b5b600061241784828501611ffb565b91505092915050565b61242981611fd2565b82525050565b60006020820190506124446000830184612420565b92915050565b6000602082840312156124605761245f611fa8565b5b600061246e84828501612031565b91505092915050565b6000806040838503121561248e5761248d611fa8565b5b600061249c85828601611ffb565b92505060206124ad85828601611ffb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124fe57607f821691505b60208210811415612512576125116124b7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061255282612010565b915061255d83612010565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561259257612591612518565b5b828201905092915050565b7f7472616e7366657242617463683a20417272617973206d75737420626520746860008201527f652073616d65206c656e67746800000000000000000000000000000000000000602082015250565b60006125f9602d83611eee565b91506126048261259d565b604082019050919050565b60006020820190508181036000830152612628816125ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006126778261265e565b915061ffff82141561268c5761268b612518565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126cd602083611eee565b91506126d882612697565b602082019050919050565b600060208201905081810360008301526126fc816126c0565b9050919050565b61270c81612086565b811461271757600080fd5b50565b60008151905061272981612703565b92915050565b60006020828403121561274557612744611fa8565b5b60006127538482850161271a565b91505092915050565b7f64657374726f79426c61636b46756e64733a2075736572206d7573742062652060008201527f626c61636b6c6973746564000000000000000000000000000000000000000000602082015250565b60006127b8602b83611eee565b91506127c38261275c565b604082019050919050565b600060208201905081810360008301526127e7816127ab565b9050919050565b7f64657374726f79426c61636b46756e64733a2072656d6f7665206661696c6564600082015250565b6000612824602083611eee565b915061282f826127ee565b602082019050919050565b6000602082019050818103600083015261285381612817565b9050919050565b600060408201905061286f6000830185612420565b61287c60208301846120bc565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128df602583611eee565b91506128ea82612883565b604082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612971602683611eee565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000612a03602a83611eee565b9150612a0e826129a7565b604082019050919050565b60006020820190508181036000830152612a32816129f6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a95602483611eee565b9150612aa082612a39565b604082019050919050565b60006020820190508181036000830152612ac481612a88565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b27602283611eee565b9150612b3282612acb565b604082019050919050565b60006020820190508181036000830152612b5681612b1a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612b93601d83611eee565b9150612b9e82612b5d565b602082019050919050565b60006020820190508181036000830152612bc281612b86565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612c25602583611eee565b9150612c3082612bc9565b604082019050919050565b60006020820190508181036000830152612c5481612c18565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612cb7602383611eee565b9150612cc282612c5b565b604082019050919050565b60006020820190508181036000830152612ce681612caa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d49602683611eee565b9150612d5482612ced565b604082019050919050565b60006020820190508181036000830152612d7881612d3c565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612db5601483611eee565b9150612dc082612d7f565b602082019050919050565b60006020820190508181036000830152612de481612da8565b9050919050565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b6000612e21601683611eee565b9150612e2c82612deb565b602082019050919050565b60006020820190508181036000830152612e5081612e14565b9050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b6000612e8d601d83611eee565b9150612e9882612e57565b602082019050919050565b60006020820190508181036000830152612ebc81612e80565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f1f602183611eee565b9150612f2a82612ec3565b604082019050919050565b60006020820190508181036000830152612f4e81612f12565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb1602283611eee565b9150612fbc82612f55565b604082019050919050565b60006020820190508181036000830152612fe081612fa4565b9050919050565b6000612ff282612010565b9150612ffd83612010565b9250828210156130105761300f612518565b5b828203905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613051601083611eee565b915061305c8261301b565b602082019050919050565b6000602082019050818103600083015261308081613044565b9050919050565b7f69734e6f74426c61636b6c69737465643a2074686973206163636f756e74206960008201527f7320626c61636b6c697374656400000000000000000000000000000000000000602082015250565b60006130e3602d83611eee565b91506130ee82613087565b604082019050919050565b60006020820190508181036000830152613112816130d6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061315382612010565b915061315e83612010565b92508261316e5761316d613119565b5b82820490509291505056fea2646970667358221220d5095598f8f8482db2238c5a3eb24ea1816ace8505646b2aeca3c9a71df6ecb064736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000095a01ed9189c912a9d3edd7339dc4ef37dadd4a5000000000000000000000000000000000000000000000000000000000000000c47617567654669656c645632000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044741554900000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): GaugeFieldV2
Arg [1] : symbol_ (string): GAUI
Arg [2] : _blacklist (address): 0x95a01Ed9189c912a9D3EDd7339DC4EF37Dadd4A5
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000095a01ed9189c912a9d3edd7339dc4ef37dadd4a5
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 47617567654669656c6456320000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4741554900000000000000000000000000000000000000000000000000000000
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.