Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
72,560,000,000 AXC
Holders
1,590
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000151415253977 AXCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
AXCToken
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./AccessControl.sol"; /** * @dev Math operations with safety checks that throw on error */ library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract Ownable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _maxTotalSupply; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. */ constructor (string memory name_, string memory symbol_, uint256 maxTotalSupply_) { _name = name_; _symbol = symbol_; _maxTotalSupply = maxTotalSupply_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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`). */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, 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}. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender,msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); require(_totalSupply.add(amount) <= _maxTotalSupply, "Can not exceed maxTotalSupply"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. */ 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 return maxTotalSupply */ function getMaxTotalSupply() public view returns (uint256) { return _maxTotalSupply; } } contract AXCToken is ERC20, Ownable, AccessControl { using SafeMath for uint256; mapping (address => bool) private _exemptedAddresses; constructor() ERC20("AXIA COIN", "AXC", 72560000000000000000000000000) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); } /** * @dev mint a new amout of tokens to an account */ function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } /** * @dev mint multiple amounts of tokens to a list of accounts */ function multiMint(address[] memory to_list, uint256[] memory amounts) public onlyOwner { require(to_list.length == amounts.length, "Lengths mismatch"); for (uint256 i = 0; i < to_list.length; i++) { _mint(to_list[i], amounts[i]); } } /** * @dev sums a list of uint */ function _sum(uint256[] memory data) private pure returns (uint256) { uint256 sum; for(uint256 i; i < data.length; i++){ sum = sum.add(data[i]); } return sum; } /** * @dev return whether a user is exempted */ function exempted(address account) view public returns (bool) { return _exemptedAddresses[account]; } /** * @dev add self to exempted addresses */ function exemptSelf() public returns (bool) { _exemptedAddresses[msg.sender] = true; return true; } /** * @dev remove self from exempted addresses */ function revertExemptSelf() public returns (bool) { delete _exemptedAddresses[msg.sender]; return true; } /** * @dev update a balances for multiple accounts */ function batchUpdateBalances(address[] memory to_add_list, uint256[] memory to_add_amounts, address[] memory to_sub_list, uint256[] memory to_sub_amounts) public returns (bool) { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); require(_sum(to_add_amounts).sub(_sum(to_sub_amounts), "Not sum up to ZERO") == 0, "Not sum up to ZERO"); require(to_add_list.length == to_add_amounts.length, "Lengths mismatch"); require(to_sub_list.length == to_sub_amounts.length, "Lengths mismatch"); for(uint256 i; i < to_sub_list.length; i++){ require(_exemptedAddresses[to_sub_list[i]] == false, "Exempted"); } for(uint256 i; i < to_sub_list.length; i++){ _balances[to_sub_list[i]] = _balances[to_sub_list[i]].sub(to_sub_amounts[i], "Batch sub amount exceeds balance"); } for(uint256 i; i < to_add_list.length; i++){ _balances[to_add_list[i]] = _balances[to_add_list[i]].add(to_add_amounts[i]); } return true; } /** * @dev grant admin roles for multiple accounts */ function batchGrantAdmin(address[] memory to_grant_list) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || _owner == msg.sender, "Caller is not an admin or owner"); for(uint256 i; i < to_grant_list.length; i++){ _grantRole(DEFAULT_ADMIN_ROLE, to_grant_list[i]); } } /** * @dev revoke admin roles for multiple accounts */ function batchRevokeAdmin(address[] memory to_revoke_list) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || _owner == msg.sender, "Caller is not an admin or owner"); for(uint256 i; i < to_revoke_list.length; i++){ _revokeRole(DEFAULT_ADMIN_ROLE, to_revoke_list[i]); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context { using EnumerableSet for EnumerableSet.AddressSet; using Address for address; struct RoleData { EnumerableSet.AddressSet members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view returns (bool) { return _roles[role].members.contains(account); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view returns (uint256) { return _roles[role].members.length(); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view returns (address) { return _roles[role].members.at(index); } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, _roles[role].adminRole, adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) internal { if (_roles[role].members.add(account)) { emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) internal { if (_roles[role].members.remove(account)) { emit RoleRevoked(role, account, _msgSender()); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to_grant_list","type":"address[]"}],"name":"batchGrantAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to_revoke_list","type":"address[]"}],"name":"batchRevokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to_add_list","type":"address[]"},{"internalType":"uint256[]","name":"to_add_amounts","type":"uint256[]"},{"internalType":"address[]","name":"to_sub_list","type":"address[]"},{"internalType":"uint256[]","name":"to_sub_amounts","type":"uint256[]"}],"name":"batchUpdateBalances","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exemptSelf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exempted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to_list","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertExemptSelf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600981526020017f4158494120434f494e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41584300000000000000000000000000000000000000000000000000000000008152506bea7439a9c70458f1700000008260049080519060200190620000a392919062000331565b508160059080519060200190620000bc92919062000331565b50806002819055506012600660006101000a81548160ff021916908360ff16021790555050505033600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620001946000801b336200019a60201b60201c565b620003d7565b620001ac8282620001b060201b60201c565b5050565b620001df81600760008581526020019081526020016000206000016200025460201b6200231b1790919060201c565b156200025057620001f56200028c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000284836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200029460201b60201c565b905092915050565b600033905090565b6000620002a883836200030e60201b60201c565b6200030357826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000308565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037457805160ff1916838001178555620003a5565b82800160010185558215620003a5579182015b82811115620003a457825182559160200191906001019062000387565b5b509050620003b49190620003b8565b5090565b5b80821115620003d3576000816000905550600101620003b9565b5090565b6131b080620003e76000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063ca15c87311610071578063ca15c87314610dd2578063d547741f14610e14578063dd62ed3e14610e62578063f2fde38b14610eda576101da565b8063a457c2d714610c90578063a9059cbb14610cf4578063b05fb15814610d58578063bfe262cc14610d78576101da565b80639010d07c116100de5780639010d07c14610b2957806391d1485414610b8b57806395d89b4114610bef578063a217fddf14610c72576101da565b806370a08231146108135780638da5cb5b1461086b578063900126421461089f576101da565b80632f2ff15d1161017c578063395093511161014b578063395093511461068b57806340c10f19146106ef5780635db30bb11461073d5780636669eb681461075b576101da565b80632f2ff15d146104825780632f81bc71146104d0578063313ce5671461061c57806336568abe1461063d576101da565b80631680c901116101b85780631680c9011461037e57806318160ddd1461039e57806323b872dd146103bc578063248a9ca314610440576101da565b806306fdde03146101df578063095ea7b314610262578063151375a6146102c6575b600080fd5b6101e7610f1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc0565b60405180821515815260200191505060405180910390f35b61037c600480360360208110156102dc57600080fd5b81019080803590602001906401000000008111156102f957600080fd5b82018360208201111561030b57600080fd5b8035906020019184602083028401116401000000008311171561032d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610fd7565b005b6103866110eb565b60405180821515815260200191505060405180910390f35b6103a6611143565b6040518082815260200191505060405180910390f35b610428600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114d565b60405180821515815260200191505060405180910390f35b61046c6004803603602081101561045657600080fd5b8101908080359060200190929190505050611218565b6040518082815260200191505060405180910390f35b6104ce6004803603604081101561049857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611238565b005b61061a600480360360408110156104e657600080fd5b810190808035906020019064010000000081111561050357600080fd5b82018360208201111561051557600080fd5b8035906020019184602083028401116401000000008311171561053757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561059757600080fd5b8201836020820111156105a957600080fd5b803590602001918460208302840111640100000000831117156105cb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506112c2565b005b61062461144a565b604051808260ff16815260200191505060405180910390f35b6106896004803603604081101561065357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611461565b005b6106d7600480360360408110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114fa565b60405180821515815260200191505060405180910390f35b61073b6004803603604081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061159f565b005b610745611670565b6040518082815260200191505060405180910390f35b6108116004803603602081101561077157600080fd5b810190808035906020019064010000000081111561078e57600080fd5b8201836020820111156107a057600080fd5b803590602001918460208302840111640100000000831117156107c257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061167a565b005b6108556004803603602081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178e565b6040518082815260200191505060405180910390f35b6108736117d6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b11600480360360808110156108b557600080fd5b81019080803590602001906401000000008111156108d257600080fd5b8201836020820111156108e457600080fd5b8035906020019184602083028401116401000000008311171561090657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561096657600080fd5b82018360208201111561097857600080fd5b8035906020019184602083028401116401000000008311171561099a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a8e57600080fd5b820183602082011115610aa057600080fd5b80359060200191846020830284011164010000000083111715610ac257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611800565b60405180821515815260200191505060405180910390f35b610b5f60048036036040811015610b3f57600080fd5b810190808035906020019092919080359060200190929190505050611d40565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bd760048036036040811015610ba157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d72565b60405180821515815260200191505060405180910390f35b610bf7611da4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c37578082015181840152602081019050610c1c565b50505050905090810190601f168015610c645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c7a611e46565b6040518082815260200191505060405180910390f35b610cdc60048036036040811015610ca657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e4d565b60405180821515815260200191505060405180910390f35b610d4060048036036040811015610d0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f0c565b60405180821515815260200191505060405180910390f35b610d60611f23565b60405180821515815260200191505060405180910390f35b610dba60048036036020811015610d8e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f84565b60405180821515815260200191505060405180910390f35b610dfe60048036036020811015610de857600080fd5b8101908080359060200190929190505050611fda565b6040518082815260200191505060405180910390f35b610e6060048036036040811015610e2a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612001565b005b610ec460048036036040811015610e7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208b565b6040518082815260200191505060405180910390f35b610f1c60048036036020811015610ef057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612112565b005b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b6000610fcd33848461234b565b6001905092915050565b610fe46000801b33611d72565b8061103c57503373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6110ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616c6c6572206973206e6f7420616e2061646d696e206f72206f776e65720081525060200191505060405180910390fd5b60005b81518110156110e7576110da6000801b8383815181106110cd57fe5b6020026020010151612542565b80806001019150506110b1565b5050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556001905090565b6000600354905090565b600061115a8484846125d6565b61120d8433611208856040518060600160405280602881526020016130b660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b61234b565b600190509392505050565b600060076000838152602001908152602001600020600201549050919050565b61125f600760008481526020019081526020016000206002015461125a61294c565b611d72565b6112b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612fe9602f913960400191505060405180910390fd5b6112be8282612542565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80518251146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b60005b82518110156114455761143883828151811061141757fe5b602002602001015183838151811061142b57fe5b6020026020010151612954565b80806001019150506113ff565b505050565b6000600660009054906101000a900460ff16905090565b61146961294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061314c602f913960400191505060405180910390fd5b6114f68282612b9b565b5050565b6000611595338461159085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b61234b565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61166c8282612954565b5050565b6000600254905090565b6116876000801b33611d72565b806116df57503373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616c6c6572206973206e6f7420616e2061646d696e206f72206f776e65720081525060200191505060405180910390fd5b60005b815181101561178a5761177d6000801b83838151811061177057fe5b6020026020010151612b9b565b8080600101915050611754565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061180f6000801b33611d72565b611881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616c6c6572206973206e6f7420616e2061646d696e0000000000000000000081525060200191505060405180910390fd5b60006118dd61188f84612cb7565b6040518060400160405280601281526020017f4e6f742073756d20757020746f205a45524f00000000000000000000000000008152506118ce88612cb7565b61288c9092919063ffffffff16565b14611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f742073756d20757020746f205a45524f000000000000000000000000000081525060200191505060405180910390fd5b83518551146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b8151835114611a3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b60005b8351811015611b30576000151560086000868481518110611a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f4578656d7074656400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8080600101915050611a41565b5060005b8351811015611c4d57611beb838281518110611b4c57fe5b60200260200101516040518060400160405280602081526020017f42617463682073756220616d6f756e7420657863656564732062616c616e6365815250600080888681518110611b9957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b600080868481518110611bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611b34565b5060005b8551811015611d3357611cd1858281518110611c6957fe5b6020026020010151600080898581518110611c8057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b600080888481518110611ce057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611c51565b5060019050949350505050565b6000611d6a8260076000868152602001908152602001600020600001612d0590919063ffffffff16565b905092915050565b6000611d9c8260076000868152602001908152602001600020600001612d1f90919063ffffffff16565b905092915050565b606060058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e3c5780601f10611e1157610100808354040283529160200191611e3c565b820191906000526020600020905b815481529060010190602001808311611e1f57829003601f168201915b5050505050905090565b6000801b81565b6000611f023384611efd8560405180606001604052806025815260200161312760259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b61234b565b6001905092915050565b6000611f193384846125d6565b6001905092915050565b60006001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611ffa60076000848152602001908152602001600020600001612d4f565b9050919050565b612028600760008481526020019081526020016000206002015461202361294c565b611d72565b61207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806130866030913960400191505060405180910390fd5b6120878282612b9b565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561225b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130186026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612343836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612d64565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806131036024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061303e6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61256a816007600085815260200190815260200160002060000161231b90919063ffffffff16565b156125d25761257761294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130de6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612fc66023913960400191505060405180910390fd5b61274d81604051806060016040528060268152602001613060602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128fe5780820151818401526020810190506128e3565b50505050905090810190601f16801561292b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b600254612a0f82600354612c2f90919063ffffffff16565b1115612a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e206e6f7420657863656564206d6178546f74616c537570706c7900000081525060200191505060405180910390fd5b612a9881600354612c2f90919063ffffffff16565b600381905550612aef816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b612bc38160076000858152602001908152602001600020600001612dd490919063ffffffff16565b15612c2b57612bd061294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080828401905083811015612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060005b8351811015612cfb57612cec848281518110612cd557fe5b602002602001015183612c2f90919063ffffffff16565b91508080600101915050612cbd565b5080915050919050565b6000612d148360000183612e04565b60001c905092915050565b6000612d47836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e87565b905092915050565b6000612d5d82600001612eaa565b9050919050565b6000612d708383612e87565b612dc9578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612dce565b600090505b92915050565b6000612dfc836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ebb565b905092915050565b600081836000018054905011612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fa46022913960400191505060405180910390fd5b826000018281548110612e7457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114612f975760006001820390506000600186600001805490500390506000866000018281548110612f0657fe5b9060005260206000200154905080876000018481548110612f2357fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480612f5b57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612f9d565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220f7359ae6fd873541c1545cceb557517e351a56741375b6bbd13a5599a096984864736f6c63430007000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063ca15c87311610071578063ca15c87314610dd2578063d547741f14610e14578063dd62ed3e14610e62578063f2fde38b14610eda576101da565b8063a457c2d714610c90578063a9059cbb14610cf4578063b05fb15814610d58578063bfe262cc14610d78576101da565b80639010d07c116100de5780639010d07c14610b2957806391d1485414610b8b57806395d89b4114610bef578063a217fddf14610c72576101da565b806370a08231146108135780638da5cb5b1461086b578063900126421461089f576101da565b80632f2ff15d1161017c578063395093511161014b578063395093511461068b57806340c10f19146106ef5780635db30bb11461073d5780636669eb681461075b576101da565b80632f2ff15d146104825780632f81bc71146104d0578063313ce5671461061c57806336568abe1461063d576101da565b80631680c901116101b85780631680c9011461037e57806318160ddd1461039e57806323b872dd146103bc578063248a9ca314610440576101da565b806306fdde03146101df578063095ea7b314610262578063151375a6146102c6575b600080fd5b6101e7610f1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc0565b60405180821515815260200191505060405180910390f35b61037c600480360360208110156102dc57600080fd5b81019080803590602001906401000000008111156102f957600080fd5b82018360208201111561030b57600080fd5b8035906020019184602083028401116401000000008311171561032d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610fd7565b005b6103866110eb565b60405180821515815260200191505060405180910390f35b6103a6611143565b6040518082815260200191505060405180910390f35b610428600480360360608110156103d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114d565b60405180821515815260200191505060405180910390f35b61046c6004803603602081101561045657600080fd5b8101908080359060200190929190505050611218565b6040518082815260200191505060405180910390f35b6104ce6004803603604081101561049857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611238565b005b61061a600480360360408110156104e657600080fd5b810190808035906020019064010000000081111561050357600080fd5b82018360208201111561051557600080fd5b8035906020019184602083028401116401000000008311171561053757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561059757600080fd5b8201836020820111156105a957600080fd5b803590602001918460208302840111640100000000831117156105cb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506112c2565b005b61062461144a565b604051808260ff16815260200191505060405180910390f35b6106896004803603604081101561065357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611461565b005b6106d7600480360360408110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114fa565b60405180821515815260200191505060405180910390f35b61073b6004803603604081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061159f565b005b610745611670565b6040518082815260200191505060405180910390f35b6108116004803603602081101561077157600080fd5b810190808035906020019064010000000081111561078e57600080fd5b8201836020820111156107a057600080fd5b803590602001918460208302840111640100000000831117156107c257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061167a565b005b6108556004803603602081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178e565b6040518082815260200191505060405180910390f35b6108736117d6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b11600480360360808110156108b557600080fd5b81019080803590602001906401000000008111156108d257600080fd5b8201836020820111156108e457600080fd5b8035906020019184602083028401116401000000008311171561090657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561096657600080fd5b82018360208201111561097857600080fd5b8035906020019184602083028401116401000000008311171561099a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a8e57600080fd5b820183602082011115610aa057600080fd5b80359060200191846020830284011164010000000083111715610ac257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611800565b60405180821515815260200191505060405180910390f35b610b5f60048036036040811015610b3f57600080fd5b810190808035906020019092919080359060200190929190505050611d40565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bd760048036036040811015610ba157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d72565b60405180821515815260200191505060405180910390f35b610bf7611da4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c37578082015181840152602081019050610c1c565b50505050905090810190601f168015610c645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c7a611e46565b6040518082815260200191505060405180910390f35b610cdc60048036036040811015610ca657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e4d565b60405180821515815260200191505060405180910390f35b610d4060048036036040811015610d0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f0c565b60405180821515815260200191505060405180910390f35b610d60611f23565b60405180821515815260200191505060405180910390f35b610dba60048036036020811015610d8e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f84565b60405180821515815260200191505060405180910390f35b610dfe60048036036020811015610de857600080fd5b8101908080359060200190929190505050611fda565b6040518082815260200191505060405180910390f35b610e6060048036036040811015610e2a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612001565b005b610ec460048036036040811015610e7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061208b565b6040518082815260200191505060405180910390f35b610f1c60048036036020811015610ef057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612112565b005b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b6000610fcd33848461234b565b6001905092915050565b610fe46000801b33611d72565b8061103c57503373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6110ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616c6c6572206973206e6f7420616e2061646d696e206f72206f776e65720081525060200191505060405180910390fd5b60005b81518110156110e7576110da6000801b8383815181106110cd57fe5b6020026020010151612542565b80806001019150506110b1565b5050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690556001905090565b6000600354905090565b600061115a8484846125d6565b61120d8433611208856040518060600160405280602881526020016130b660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b61234b565b600190509392505050565b600060076000838152602001908152602001600020600201549050919050565b61125f600760008481526020019081526020016000206002015461125a61294c565b611d72565b6112b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612fe9602f913960400191505060405180910390fd5b6112be8282612542565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80518251146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b60005b82518110156114455761143883828151811061141757fe5b602002602001015183838151811061142b57fe5b6020026020010151612954565b80806001019150506113ff565b505050565b6000600660009054906101000a900460ff16905090565b61146961294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061314c602f913960400191505060405180910390fd5b6114f68282612b9b565b5050565b6000611595338461159085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b61234b565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61166c8282612954565b5050565b6000600254905090565b6116876000801b33611d72565b806116df57503373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616c6c6572206973206e6f7420616e2061646d696e206f72206f776e65720081525060200191505060405180910390fd5b60005b815181101561178a5761177d6000801b83838151811061177057fe5b6020026020010151612b9b565b8080600101915050611754565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061180f6000801b33611d72565b611881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616c6c6572206973206e6f7420616e2061646d696e0000000000000000000081525060200191505060405180910390fd5b60006118dd61188f84612cb7565b6040518060400160405280601281526020017f4e6f742073756d20757020746f205a45524f00000000000000000000000000008152506118ce88612cb7565b61288c9092919063ffffffff16565b14611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f742073756d20757020746f205a45524f000000000000000000000000000081525060200191505060405180910390fd5b83518551146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b8151835114611a3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4c656e67746873206d69736d617463680000000000000000000000000000000081525060200191505060405180910390fd5b60005b8351811015611b30576000151560086000868481518110611a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f4578656d7074656400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8080600101915050611a41565b5060005b8351811015611c4d57611beb838281518110611b4c57fe5b60200260200101516040518060400160405280602081526020017f42617463682073756220616d6f756e7420657863656564732062616c616e6365815250600080888681518110611b9957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b600080868481518110611bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611b34565b5060005b8551811015611d3357611cd1858281518110611c6957fe5b6020026020010151600080898581518110611c8057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b600080888481518110611ce057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050611c51565b5060019050949350505050565b6000611d6a8260076000868152602001908152602001600020600001612d0590919063ffffffff16565b905092915050565b6000611d9c8260076000868152602001908152602001600020600001612d1f90919063ffffffff16565b905092915050565b606060058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e3c5780601f10611e1157610100808354040283529160200191611e3c565b820191906000526020600020905b815481529060010190602001808311611e1f57829003601f168201915b5050505050905090565b6000801b81565b6000611f023384611efd8560405180606001604052806025815260200161312760259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b61234b565b6001905092915050565b6000611f193384846125d6565b6001905092915050565b60006001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611ffa60076000848152602001908152602001600020600001612d4f565b9050919050565b612028600760008481526020019081526020016000206002015461202361294c565b611d72565b61207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806130866030913960400191505060405180910390fd5b6120878282612b9b565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561225b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130186026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612343836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612d64565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806131036024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061303e6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61256a816007600085815260200190815260200160002060000161231b90919063ffffffff16565b156125d25761257761294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806130de6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612fc66023913960400191505060405180910390fd5b61274d81604051806060016040528060268152602001613060602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128fe5780820151818401526020810190506128e3565b50505050905090810190601f16801561292b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b600254612a0f82600354612c2f90919063ffffffff16565b1115612a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e206e6f7420657863656564206d6178546f74616c537570706c7900000081525060200191505060405180910390fd5b612a9881600354612c2f90919063ffffffff16565b600381905550612aef816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b612bc38160076000858152602001908152602001600020600001612dd490919063ffffffff16565b15612c2b57612bd061294c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080828401905083811015612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060005b8351811015612cfb57612cec848281518110612cd557fe5b602002602001015183612c2f90919063ffffffff16565b91508080600101915050612cbd565b5080915050919050565b6000612d148360000183612e04565b60001c905092915050565b6000612d47836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e87565b905092915050565b6000612d5d82600001612eaa565b9050919050565b6000612d708383612e87565b612dc9578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612dce565b600090505b92915050565b6000612dfc836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ebb565b905092915050565b600081836000018054905011612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612fa46022913960400191505060405180910390fd5b826000018281548110612e7457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114612f975760006001820390506000600186600001805490500390506000866000018281548110612f0657fe5b9060005260206000200154905080876000018481548110612f2357fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480612f5b57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612f9d565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220f7359ae6fd873541c1545cceb557517e351a56741375b6bbd13a5599a096984864736f6c63430007000033
Deployed Bytecode Sourcemap
8808:3546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4481:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5904:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11642:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10314:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5141:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6129:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21122:112:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21484:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9343:274:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5000:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22658:205:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6546:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9162:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8706:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12032:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5297:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2273:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10513:1055;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20805:136:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19790:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4675:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18567:49:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6862:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5471:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10125:119;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9947:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20095:125:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21941:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5699:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2701:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4481:81;4518:13;4550:5;4543:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4481:81;:::o;5904:164::-;5987:4;6003:37;6012:10;6024:7;6033:6;6003:8;:37::i;:::-;6057:4;6050:11;;5904:164;;;;:::o;11642:315::-;11724:39;18612:4:1;11732:18:0;;11752:10;11724:7;:39::i;:::-;:63;;;;11777:10;11767:20;;:6;;;;;;;;;;;:20;;;11724:63;11716:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11837:9;11833:118;11852:13;:20;11848:1;:24;11833:118;;;11892:48;18612:4:1;11903:18:0;;11923:13;11937:1;11923:16;;;;;;;;;;;;;;11892:10;:48::i;:::-;11874:3;;;;;;;11833:118;;;;11642:315;:::o;10314:125::-;10358:4;10381:18;:30;10400:10;10381:30;;;;;;;;;;;;;;;;10374:37;;;;;;;;;;;10428:4;10421:11;;10314:125;:::o;5141:98::-;5194:7;5220:12;;5213:19;;5141:98;:::o;6129:312::-;6235:4;6251:36;6261:6;6269:9;6280:6;6251:9;:36::i;:::-;6297:116;6306:6;6313:10;6325:87;6361:6;6325:87;;;;;;;;;;;;;;;;;:11;:19;6337:6;6325:19;;;;;;;;;;;;;;;:31;6345:10;6325:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;6297:8;:116::i;:::-;6430:4;6423:11;;6129:312;;;;;:::o;21122:112:1:-;21179:7;21205:6;:12;21212:4;21205:12;;;;;;;;;;;:22;;;21198:29;;21122:112;;;:::o;21484:223::-;21567:45;21575:6;:12;21582:4;21575:12;;;;;;;;;;;:22;;;21599:12;:10;:12::i;:::-;21567:7;:45::i;:::-;21559:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21675:25;21686:4;21692:7;21675:10;:25::i;:::-;21484:223;;:::o;9343:274:0:-;2487:10;2477:20;;:6;;;;;;;;;;;:20;;;2469:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9467:7:::1;:14;9449:7;:14;:32;9441:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9517:9;9512:99;9536:7;:14;9532:1;:18;9512:99;;;9571:29;9577:7;9585:1;9577:10;;;;;;;;;;;;;;9589:7;9597:1;9589:10;;;;;;;;;;;;;;9571:5;:29::i;:::-;9552:3;;;;;;;9512:99;;;;9343:274:::0;;:::o;5000:81::-;5041:5;5065:9;;;;;;;;;;;5058:16;;5000:81;:::o;22658:205:1:-;22755:12;:10;:12::i;:::-;22744:23;;:7;:23;;;22736:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22830:26;22842:4;22848:7;22830:11;:26::i;:::-;22658:205;;:::o;6546:211:0:-;6634:4;6650:79;6659:10;6671:7;6680:48;6717:10;6680:11;:23;6692:10;6680:23;;;;;;;;;;;;;;;:32;6704:7;6680:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;6650:8;:79::i;:::-;6746:4;6739:11;;6546:211;;;;:::o;9162:93::-;2487:10;2477:20;;:6;;;;;;;;;;;:20;;;2469:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9231:17:::1;9237:2;9241:6;9231:5;:17::i;:::-;9162:93:::0;;:::o;8706:98::-;8756:7;8782:15;;8775:22;;8706:98;:::o;12032:320::-;12116:39;18612:4:1;12124:18:0;;12144:10;12116:7;:39::i;:::-;:63;;;;12169:10;12159:20;;:6;;;;;;;;;;;:20;;;12116:63;12108:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12229:9;12225:121;12244:14;:21;12240:1;:25;12225:121;;;12285:50;18612:4:1;12297:18:0;;12317:14;12332:1;12317:17;;;;;;;;;;;;;;12285:11;:50::i;:::-;12267:3;;;;;;;12225:121;;;;12032:320;:::o;5297:117::-;5363:7;5389:9;:18;5399:7;5389:18;;;;;;;;;;;;;;;;5382:25;;5297:117;;;:::o;2273:77::-;2311:7;2337:6;;;;;;;;;;;2330:13;;2273:77;:::o;10513:1055::-;10684:4;10708:39;18612:4:1;10716:18:0;;10736:10;10708:7;:39::i;:::-;10700:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10864:1;10792:68;10817:20;10822:14;10817:4;:20::i;:::-;10792:68;;;;;;;;;;;;;;;;;:20;10797:14;10792:4;:20::i;:::-;:24;;:68;;;;;:::i;:::-;:73;10784:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10929:14;:21;10907:11;:18;:43;10899:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11011:14;:21;10989:11;:18;:43;10981:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11068:9;11064:132;11083:11;:18;11079:1;:22;11064:132;;;11167:5;11129:43;;:18;:34;11148:11;11160:1;11148:14;;;;;;;;;;;;;;11129:34;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;11121:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11103:3;;;;;;;11064:132;;;;11210:9;11206:180;11225:11;:18;11221:1;:22;11206:180;;;11291:84;11321:14;11336:1;11321:17;;;;;;;;;;;;;;11291:84;;;;;;;;;;;;;;;;;:9;:25;11301:11;11313:1;11301:14;;;;;;;;;;;;;;11291:25;;;;;;;;;;;;;;;;:29;;:84;;;;;:::i;:::-;11263:9;:25;11273:11;11285:1;11273:14;;;;;;;;;;;;;;11263:25;;;;;;;;;;;;;;;:112;;;;11245:3;;;;;;;11206:180;;;;11400:9;11396:144;11415:11;:18;11411:1;:22;11396:144;;;11481:48;11511:14;11526:1;11511:17;;;;;;;;;;;;;;11481:9;:25;11491:11;11503:1;11491:14;;;;;;;;;;;;;;11481:25;;;;;;;;;;;;;;;;:29;;:48;;;;:::i;:::-;11453:9;:25;11463:11;11475:1;11463:14;;;;;;;;;;;;;;11453:25;;;;;;;;;;;;;;;:76;;;;11435:3;;;;;;;11396:144;;;;11557:4;11550:11;;10513:1055;;;;;;:::o;20805:136:1:-;20878:7;20904:30;20928:5;20904:6;:12;20911:4;20904:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;20897:37;;20805:136;;;;:::o;19790:137::-;19859:4;19882:38;19912:7;19882:6;:12;19889:4;19882:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;19875:45;;19790:137;;;;:::o;4675:85:0:-;4714:13;4746:7;4739:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4675:85;:::o;18567:49:1:-;18612:4;18567:49;;;:::o;6862:262:0:-;6955:4;6971:125;6980:10;6992:7;7001:94;7038:15;7001:94;;;;;;;;;;;;;;;;;:11;:23;7013:10;7001:23;;;;;;;;;;;;;;;:32;7025:7;7001:32;;;;;;;;;;;;;;;;:36;;:94;;;;;:::i;:::-;6971:8;:125::i;:::-;7113:4;7106:11;;6862:262;;;;:::o;5471:170::-;5557:4;5573:40;5583:10;5595:9;5606:6;5573:9;:40::i;:::-;5630:4;5623:11;;5471:170;;;;:::o;10125:119::-;10163:4;10212;10179:18;:30;10198:10;10179:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;10233:4;10226:11;;10125:119;:::o;9947:113::-;10003:4;10026:18;:27;10045:7;10026:27;;;;;;;;;;;;;;;;;;;;;;;;;10019:34;;9947:113;;;:::o;20095:125:1:-;20158:7;20184:29;:6;:12;20191:4;20184:12;;;;;;;;;;;:20;;:27;:29::i;:::-;20177:36;;20095:125;;;:::o;21941:226::-;22025:45;22033:6;:12;22040:4;22033:12;;;;;;;;;;;:22;;;22057:12;:10;:12::i;:::-;22025:7;:45::i;:::-;22017:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22134:26;22146:4;22152:7;22134:11;:26::i;:::-;21941:226;;:::o;5699:149:0:-;5788:7;5814:11;:18;5826:5;5814:18;;;;;;;;;;;;;;;:27;5833:7;5814:27;;;;;;;;;;;;;;;;5807:34;;5699:149;;;;:::o;2701:232::-;2487:10;2477:20;;:6;;;;;;;;;;;:20;;;2469:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2801:1:::1;2781:22;;:8;:22;;;;2773:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2890:8;2861:38;;2882:6;;;;;;;;;;;2861:38;;;;;;;;;;;;2918:8;2909:6;;:17;;;;;;;;;;;;;;;;;;2701:232:::0;:::o;7306:141:1:-;7376:4;7399:41;7404:3;:10;;7432:5;7424:14;;7416:23;;7399:4;:41::i;:::-;7392:48;;7306:141;;;;:::o;8310:340:0:-;8428:1;8411:19;;:5;:19;;;;8403:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8508:1;8489:21;;:7;:21;;;;8481:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8590:6;8560:11;:18;8572:5;8560:18;;;;;;;;;;;;;;;:27;8579:7;8560:27;;;;;;;;;;;;;;;:36;;;;8627:7;8611:32;;8620:5;8611:32;;;8636:6;8611:32;;;;;;;;;;;;;;;;;;8310:340;;;:::o;23865:185:1:-;23939:33;23964:7;23939:6;:12;23946:4;23939:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;23935:109;;;24020:12;:10;:12::i;:::-;23993:40;;24011:7;23993:40;;24005:4;23993:40;;;;;;;;;;23935:109;23865:185;;:::o;7210:472:0:-;7333:1;7315:20;;:6;:20;;;;7307:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7416:1;7395:23;;:9;:23;;;;7387:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7489;7511:6;7489:71;;;;;;;;;;;;;;;;;:9;:17;7499:6;7489:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7469:9;:17;7479:6;7469:17;;;;;;;;;;;;;;;:91;;;;7593:32;7618:6;7593:9;:20;7603:9;7593:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7570:9;:20;7580:9;7570:20;;;;;;;;;;;;;;;:55;;;;7657:9;7640:35;;7649:6;7640:35;;;7668:6;7640:35;;;;;;;;;;;;;;;;;;7210:472;;;:::o;512:187::-;598:7;630:1;625;:6;;633:12;617:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;656:9;672:1;668;:5;656:17;;691:1;684:8;;;512:187;;;;;:::o;598:104:1:-;651:15;685:10;678:17;;598:104;:::o;7800:405:0:-;7902:1;7883:21;;:7;:21;;;;7875:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7986:15;;7958:24;7975:6;7958:12;;:16;;:24;;;;:::i;:::-;:43;;7950:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8061:24;8078:6;8061:12;;:16;;:24;;;;:::i;:::-;8046:12;:39;;;;8116:30;8139:6;8116:9;:18;8126:7;8116:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;8095:9;:18;8105:7;8095:18;;;;;;;;;;;;;;;:51;;;;8182:7;8161:37;;8178:1;8161:37;;;8191:6;8161:37;;;;;;;;;;;;;;;;;;7800:405;;:::o;24056:189:1:-;24131:36;24159:7;24131:6;:12;24138:4;24131:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;24127:112;;;24215:12;:10;:12::i;:::-;24188:40;;24206:7;24188:40;;24200:4;24188:40;;;;;;;;;;24127:112;24056:189;;:::o;190:176:0:-;248:7;267:9;283:1;279;:5;267:17;;307:1;302;:6;;294:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;358:1;351:8;;;190:176;;;;:::o;9671:208::-;9730:7;9749:11;9774:9;9770:83;9789:4;:11;9785:1;:15;9770:83;;;9826:16;9834:4;9839:1;9834:7;;;;;;;;;;;;;;9826:3;:7;;:16;;;;:::i;:::-;9820:22;;9802:3;;;;;;;9770:83;;;;9869:3;9862:10;;;9671:208;;;:::o;8527:147:1:-;8601:7;8643:22;8647:3;:10;;8659:5;8643:3;:22::i;:::-;8635:31;;8620:47;;8527:147;;;;:::o;7843:156::-;7923:4;7946:46;7956:3;:10;;7984:5;7976:14;;7968:23;;7946:9;:46::i;:::-;7939:53;;7843:156;;;;:::o;8080:115::-;8143:7;8169:19;8177:3;:10;;8169:7;:19::i;:::-;8162:26;;8080:115;;;:::o;2517:404::-;2580:4;2601:21;2611:3;2616:5;2601:9;:21::i;:::-;2596:319;;2638:3;:11;;2655:5;2638:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2818:3;:11;;:18;;;;2796:3;:12;;:19;2809:5;2796:19;;;;;;;;;;;:40;;;;2857:4;2850:11;;;;2596:319;2899:5;2892:12;;2517:404;;;;;:::o;7615:147::-;7688:4;7711:44;7719:3;:10;;7747:5;7739:14;;7731:23;;7711:7;:44::i;:::-;7704:51;;7615:147;;;;:::o;5329:201::-;5396:7;5444:5;5423:3;:11;;:18;;;;:26;5415:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5505:3;:11;;5517:5;5505:18;;;;;;;;;;;;;;;;5498:25;;5329:201;;;;:::o;4682:127::-;4755:4;4801:1;4778:3;:12;;:19;4791:5;4778:19;;;;;;;;;;;;:24;;4771:31;;4682:127;;;;:::o;4890:107::-;4946:7;4972:3;:11;;:18;;;;4965:25;;4890:107;;;:::o;3089:1512::-;3155:4;3271:18;3292:3;:12;;:19;3305:5;3292:19;;;;;;;;;;;;3271:40;;3340:1;3326:10;:15;3322:1273;;3683:21;3720:1;3707:10;:14;3683:38;;3735:17;3776:1;3755:3;:11;;:18;;;;:22;3735:42;;4017:17;4037:3;:11;;4049:9;4037:22;;;;;;;;;;;;;;;;4017:42;;4180:9;4151:3;:11;;4163:13;4151:26;;;;;;;;;;;;;;;:38;;;;4297:1;4281:13;:17;4255:3;:12;;:23;4268:9;4255:23;;;;;;;;;;;:43;;;;4404:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;4496:3;:12;;:19;4509:5;4496:19;;;;;;;;;;;4489:26;;;4537:4;4530:11;;;;;;;;3322:1273;4579:5;4572:12;;;3089:1512;;;;;:::o
Swarm Source
ipfs://f7359ae6fd873541c1545cceb557517e351a56741375b6bbd13a5599a0969848
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.