Polygon Sponsored slots available. Book your slot here!
ERC-20
Platform
Overview
Max Total Supply
300,000,000 HME
Holders
18,981 (0.00%)
Total Transfers
-
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Homwere
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./AccessControl.sol"; import "./SafeMath.sol"; interface Tkn{ 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); } contract Homwere is ERC20, AccessControl { using SafeMath for uint256; bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); address contractOwner; uint256 burnLimit; struct AdminPool{ address payable Admin; bool Sing1; address SingAdr1; bool Sing2; address SingAdr2; uint txid; bool status; bool del; } AdminPool[] adminLog; event TknWithDraw(address indexed Spender, uint Amount, address contractAdr); event addAdmnAdrr( address indexed Adr,uint txid,address reqstr); modifier onlyAdmin (){ require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); _; } //constructor that accepts admin address once deploying constructor() ERC20("Homwere", "HME") { _mint(_msgSender(), 300000000 * 10**18); burnLimit = 300000000 * 10**18; contractOwner = _msgSender(); _setupRole(BURNER_ROLE, _msgSender()); _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); } //To add a burner address function addNewBurner(address newBurner) public onlyAdmin{ require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); grantRole(BURNER_ROLE, newBurner); } //To remove a burner address function removeCurrentBurner(address rejectedBurner) public onlyAdmin{ require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); revokeRole(BURNER_ROLE, rejectedBurner); } //This function burns the token //It calls burn which calls _burn function burnTokens(uint256 amount) public { require(hasRole(BURNER_ROLE, _msgSender()), "Caller is not a burner"); require(_msgSender() != address(0), "unknown address"); require(totalSupply() > burnLimit, "you cant burn any further"); burn(amount); } function burn(uint256 amount) internal virtual { super._burn(contractOwner, amount); } //This function makes it possible for contract to be able to withdraw network token function withdrawNetworkTkn() public returns(uint){ require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); uint conBal = address(this).balance; payable(msg.sender).transfer(conBal); emit TknWithDraw(msg.sender,conBal, address(this)); return conBal; } //This function makes it possible for contract to be able to withdraw erc token function withdrawERC(uint amt, address contractAdr) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not an admin"); Tkn Token = Tkn(contractAdr); uint256 sndtk = (amt) * (10 ** uint256(18 )); Token.transfer(msg.sender,sndtk); emit TknWithDraw(msg.sender,sndtk, contractAdr); } //This function makes it possible for contract to be able to receive network receive() external payable{ } fallback() external payable{ } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * 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, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) 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 Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @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 override 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 override onlyRole(getRoleAdmin(role)) { _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 override onlyRole(getRoleAdmin(role)) { _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 override { 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 { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address private from_; address private to_; uint256 private amount_; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { from_ = from; to_ = to; amount_ = amount; } /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; import "./SafeMath.sol"; contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping (address => uint256) private _unlockedTokens; // Unlocked Tokens, available for transfer struct LockRecord { uint256 lockingPeriod; uint256 tokens; bool isUnlocked; } mapping(address => LockRecord[]) private records; // Record of Locking periods and tokens per address uint256 private _totalSupply; string private _name; string private _symbol; address private _from_; address private _to_; uint private _amt_; mapping(address => bool) internal PauseAddr; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC20-balanceOf}. */ function unLockedBalanceOf(address account) public view returns (uint256) { return _unlockedTokens[account]; } // ------------------------------------------------------------------------ // Checks if there is required amount of unLockedTokens available // ------------------------------------------------------------------------ function _updateUnLockedTokens(address _from, uint tokens) private returns (bool success) { // if _unlockedTokens are greater than "tokens" of "to", initiate transfer if(_unlockedTokens[_from] >= tokens){ return true; } // if _unlockedTokens are less than "tokens" of "to", update _unlockedTokens by checking record with "now" time else{ _updateRecord(_from); // check if _unlockedTokens are greater than "token" of "to", initiate transfer if(_unlockedTokens[_from] >= tokens){ return true; } // otherwise revert else{ revert("RigelToken: Insufficient unlocked tokens"); } } } // ------------------------------------------------------------------------ // Unlocks the coins if lockingPeriod is expired // ------------------------------------------------------------------------ function _updateRecord(address account) private returns (bool success){ LockRecord[] memory tempRecords = records[account]; uint256 unlockedTokenCount = 0; for(uint256 i=0; i < tempRecords.length; i++){ if(tempRecords[i].lockingPeriod < block.timestamp && tempRecords[i].isUnlocked == false){ //if(tempRecords[i].lockingPeriod < now && tempRecords[i].isUnlocked == false){ unlockedTokenCount = unlockedTokenCount.add(tempRecords[i].tokens); tempRecords[i].isUnlocked = true; records[account][i] = LockRecord(tempRecords[i].lockingPeriod, tempRecords[i].tokens, tempRecords[i].isUnlocked); } } _unlockedTokens[account] = _unlockedTokens[account].add(unlockedTokenCount); return true; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } function setPause(bool Pval,address adr) internal { PauseAddr[adr] = Pval; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ 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"); require(PauseAddr[sender] == false,"Address paused"); // update the unlocked tokens based on time if required _updateUnLockedTokens(sender, amount); _unlockedTokens[sender] = _unlockedTokens[sender].sub(amount); _unlockedTokens[recipient] = _unlockedTokens[recipient].add(amount); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { require(PauseAddr[from] == false,"Address paused"); _from_ = from; _to_ = to; _amt_ = amount; } /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; contract Migrations { address public owner = msg.sender; uint public last_completed_migration; modifier restricted() { require( msg.sender == owner, "This function is restricted to the contract's owner" ); _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } }
pragma solidity ^0.8.0; contract ownable{ address internal owner; //internal make variables possible to be assess on external contract but its private on remix or public //address payable public owner; bool private _paused; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner (){ require(msg.sender == owner,"Only owner have access to this"); _; } modifier whenNotPaused(){ require(!_paused); _; } modifier whenPaused(){ require(_paused); _; } function pause()public onlyOwner whenNotPaused{ _paused = true; } function unPause()public onlyOwner whenPaused{ _paused = false; } constructor() public{ _setOwner(msg.sender); _paused = false; } function transferOwnership(address payable newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = owner; owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
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":"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":"Spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"Amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"contractAdr","type":"address"}],"name":"TknWithDraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Adr","type":"address"},{"indexed":false,"internalType":"uint256","name":"txid","type":"uint256"},{"indexed":false,"internalType":"address","name":"reqstr","type":"address"}],"name":"addAdmnAdrr","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BURNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBurner","type":"address"}],"name":"addNewBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"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":[{"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":"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"rejectedBurner","type":"address"}],"name":"removeCurrentBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"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":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"amt","type":"uint256"},{"internalType":"address","name":"contractAdr","type":"address"}],"name":"withdrawERC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNetworkTkn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600781526020017f486f6d77657265000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f484d45000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000532565b508060049080519060200190620000af92919062000532565b505050620000de620000c6620001ab60201b60201c565b6af8277896582678ac000000620001b360201b60201c565b6af8277896582678ac000000600a8190555062000100620001ab60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001817f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84862000175620001ab60201b60201c565b6200032c60201b60201c565b620001a56000801b62000199620001ab60201b60201c565b6200032c60201b60201c565b6200078e565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000226576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021d906200061a565b60405180910390fd5b6200023a600083836200034260201b60201c565b80600260008282546200024e91906200066a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002a591906200066a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200030c91906200063c565b60405180910390a36200032860008383620003d060201b60201c565b5050565b6200033e8282620003d560201b60201c565b5050565b82600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600781905550505050565b505050565b620003e78282620004c760201b60201c565b620004c35760016008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000468620001ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8280546200054090620006d1565b90600052602060002090601f016020900481019282620005645760008555620005b0565b82601f106200057f57805160ff1916838001178555620005b0565b82800160010185558215620005b0579182015b82811115620005af57825182559160200191906001019062000592565b5b509050620005bf9190620005c3565b5090565b5b80821115620005de576000816000905550600101620005c4565b5090565b6000620005f1601f8362000659565b9150620005fe8262000765565b602082019050919050565b6200061481620006c7565b82525050565b600060208201905081810360008301526200063581620005e2565b9050919050565b600060208201905062000653600083018462000609565b92915050565b600082825260208201905092915050565b60006200067782620006c7565b91506200068483620006c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006bc57620006bb62000707565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620006ea57607f821691505b6020821081141562000701576200070062000736565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612fcc806200079e6000396000f3fe60806040526004361061014f5760003560e01c8063636b12d3116100b657806399813de71161006f57806399813de7146104d0578063a217fddf146104fb578063a457c2d714610526578063a9059cbb14610563578063d547741f146105a0578063dd62ed3e146105c957610156565b8063636b12d3146103b057806367c457e5146103d95780636d1b229d1461040257806370a082311461042b57806391d148541461046857806395d89b41146104a557610156565b8063282c51f311610108578063282c51f3146102a25780632f2ff15d146102cd578063313ce567146102f657806335ed52631461032157806336568abe1461034a578063395093511461037357610156565b806301ffc9a71461015857806306fdde0314610195578063095ea7b3146101c057806318160ddd146101fd57806323b872dd14610228578063248a9ca31461026557610156565b3661015657005b005b34801561016457600080fd5b5061017f600480360381019061017a9190611fdd565b610606565b60405161018c91906123e2565b60405180910390f35b3480156101a157600080fd5b506101aa610680565b6040516101b79190612418565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190611f03565b610712565b6040516101f491906123e2565b60405180910390f35b34801561020957600080fd5b50610212610730565b60405161021f919061261a565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190611eb0565b61073a565b60405161025c91906123e2565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190611f70565b610832565b60405161029991906123fd565b60405180910390f35b3480156102ae57600080fd5b506102b7610852565b6040516102c491906123fd565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190611f9d565b610876565b005b34801561030257600080fd5b5061030b61089f565b604051610318919061265e565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190611e43565b6108a8565b005b34801561035657600080fd5b50610371600480360381019061036c9190611f9d565b61096d565b005b34801561037f57600080fd5b5061039a60048036038101906103959190611f03565b6109f0565b6040516103a791906123e2565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190612037565b610a9c565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190611e43565b610bee565b005b34801561040e57600080fd5b506104296004803603810190610424919061200a565b610cb3565b005b34801561043757600080fd5b50610452600480360381019061044d9190611e43565b610df1565b60405161045f919061261a565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190611f9d565b610e39565b60405161049c91906123e2565b60405180910390f35b3480156104b157600080fd5b506104ba610ea4565b6040516104c79190612418565b60405180910390f35b3480156104dc57600080fd5b506104e5610f36565b6040516104f2919061261a565b60405180910390f35b34801561050757600080fd5b50610510611027565b60405161051d91906123fd565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190611f03565b61102e565b60405161055a91906123e2565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190611f03565b611119565b60405161059791906123e2565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190611f9d565b611137565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190611e70565b611160565b6040516105fd919061261a565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106795750610678826111e7565b5b9050919050565b60606003805461068f906129dd565b80601f01602080910402602001604051908101604052809291908181526020018280546106bb906129dd565b80156107085780601f106106dd57610100808354040283529160200191610708565b820191906000526020600020905b8154815290600101906020018083116106eb57829003601f168201915b5050505050905090565b600061072661071f611251565b8484611259565b6001905092915050565b6000600254905090565b6000610747848484611424565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610792611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610809906124fa565b60405180910390fd5b6108268561081e611251565b858403611259565b60019150509392505050565b600060086000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61087f82610832565b6108908161088b611251565b6116a5565b61089a8383611742565b505050565b60006012905090565b6108b56000801b33610e39565b6108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb9061257a565b60405180910390fd5b6109016000801b33610e39565b610940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109379061257a565b60405180910390fd5b61096a7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882611137565b50565b610975611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906125fa565b60405180910390fd5b6109ec8282611823565b5050565b6000610a926109fd611251565b848460016000610a0b611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a8d91906126a0565b611259565b6001905092915050565b610aa96000801b33610e39565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf9061257a565b60405180910390fd5b600081905060006012600a610afd9190612749565b84610b089190612867565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610b459291906123b9565b602060405180830381600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190611f43565b503373ffffffffffffffffffffffffffffffffffffffff167f0e6f17688019f806e1ec227d1566d64b0860124e31bad22d82533f74eecbddd38285604051610be0929190612635565b60405180910390a250505050565b610bfb6000801b33610e39565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c319061257a565b60405180910390fd5b610c476000801b33610e39565b610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061257a565b60405180910390fd5b610cb07f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882610876565b50565b610ce47f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610cdf611251565b610e39565b610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906124da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16610d43611251565b73ffffffffffffffffffffffffffffffffffffffff161415610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906125da565b60405180910390fd5b600a54610da5610730565b11610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061253a565b60405180910390fd5b610dee81611905565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610eb3906129dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf906129dd565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6000610f456000801b33610e39565b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b9061257a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f0e6f17688019f806e1ec227d1566d64b0860124e31bad22d82533f74eecbddd38230604051611018929190612635565b60405180910390a28091505090565b6000801b81565b6000806001600061103d611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f1906125ba565b60405180910390fd5b61110e611105611251565b85858403611259565b600191505092915050565b600061112d611126611251565b8484611424565b6001905092915050565b61114082610832565b6111518161114c611251565b6116a5565b61115b8383611823565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c09061259a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113309061249a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611417919061261a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9061255a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061245a565b60405180910390fd5b61150f838383611934565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906124ba565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461162891906126a0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161168c919061261a565b60405180910390a361169f8484846119c2565b50505050565b6116af8282610e39565b61173e576116d48173ffffffffffffffffffffffffffffffffffffffff1660146119c7565b6116e28360001c60206119c7565b6040516020016116f392919061237f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359190612418565b60405180910390fd5b5050565b61174c8282610e39565b61181f5760016008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117c4611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61182d8282610e39565b156119015760006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118a6611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611931600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611c03565b50565b82600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600781905550505050565b505050565b6060600060028360026119da9190612867565b6119e491906126a0565b67ffffffffffffffff8111156119fd576119fc612a9c565b5b6040519080825280601f01601f191660200182016040528015611a2f5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a6757611a66612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611acb57611aca612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611b0b9190612867565b611b1591906126a0565b90505b6001811115611bb5577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b5757611b56612a6d565b5b1a60f81b828281518110611b6e57611b6d612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611bae906129b3565b9050611b18565b5060008414611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf09061243a565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a9061251a565b60405180910390fd5b611c7f82600083611934565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc9061247a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d5c91906128c1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc1919061261a565b60405180910390a3611dd5836000846119c2565b505050565b600081359050611de981612f23565b92915050565b600081519050611dfe81612f3a565b92915050565b600081359050611e1381612f51565b92915050565b600081359050611e2881612f68565b92915050565b600081359050611e3d81612f7f565b92915050565b600060208284031215611e5957611e58612acb565b5b6000611e6784828501611dda565b91505092915050565b60008060408385031215611e8757611e86612acb565b5b6000611e9585828601611dda565b9250506020611ea685828601611dda565b9150509250929050565b600080600060608486031215611ec957611ec8612acb565b5b6000611ed786828701611dda565b9350506020611ee886828701611dda565b9250506040611ef986828701611e2e565b9150509250925092565b60008060408385031215611f1a57611f19612acb565b5b6000611f2885828601611dda565b9250506020611f3985828601611e2e565b9150509250929050565b600060208284031215611f5957611f58612acb565b5b6000611f6784828501611def565b91505092915050565b600060208284031215611f8657611f85612acb565b5b6000611f9484828501611e04565b91505092915050565b60008060408385031215611fb457611fb3612acb565b5b6000611fc285828601611e04565b9250506020611fd385828601611dda565b9150509250929050565b600060208284031215611ff357611ff2612acb565b5b600061200184828501611e19565b91505092915050565b6000602082840312156120205761201f612acb565b5b600061202e84828501611e2e565b91505092915050565b6000806040838503121561204e5761204d612acb565b5b600061205c85828601611e2e565b925050602061206d85828601611dda565b9150509250929050565b612080816128f5565b82525050565b61208f81612907565b82525050565b61209e81612913565b82525050565b60006120af82612679565b6120b98185612684565b93506120c9818560208601612980565b6120d281612ad0565b840191505092915050565b60006120e882612679565b6120f28185612695565b9350612102818560208601612980565b80840191505092915050565b600061211b602083612684565b915061212682612aee565b602082019050919050565b600061213e602383612684565b915061214982612b17565b604082019050919050565b6000612161602283612684565b915061216c82612b66565b604082019050919050565b6000612184602283612684565b915061218f82612bb5565b604082019050919050565b60006121a7602683612684565b91506121b282612c04565b604082019050919050565b60006121ca601683612684565b91506121d582612c53565b602082019050919050565b60006121ed602883612684565b91506121f882612c7c565b604082019050919050565b6000612210602183612684565b915061221b82612ccb565b604082019050919050565b6000612233601983612684565b915061223e82612d1a565b602082019050919050565b6000612256602583612684565b915061226182612d43565b604082019050919050565b6000612279601683612684565b915061228482612d92565b602082019050919050565b600061229c602483612684565b91506122a782612dbb565b604082019050919050565b60006122bf601783612695565b91506122ca82612e0a565b601782019050919050565b60006122e2602583612684565b91506122ed82612e33565b604082019050919050565b6000612305601183612695565b915061231082612e82565b601182019050919050565b6000612328600f83612684565b915061233382612eab565b602082019050919050565b600061234b602f83612684565b915061235682612ed4565b604082019050919050565b61236a81612969565b82525050565b61237981612973565b82525050565b600061238a826122b2565b915061239682856120dd565b91506123a1826122f8565b91506123ad82846120dd565b91508190509392505050565b60006040820190506123ce6000830185612077565b6123db6020830184612361565b9392505050565b60006020820190506123f76000830184612086565b92915050565b60006020820190506124126000830184612095565b92915050565b6000602082019050818103600083015261243281846120a4565b905092915050565b600060208201905081810360008301526124538161210e565b9050919050565b6000602082019050818103600083015261247381612131565b9050919050565b6000602082019050818103600083015261249381612154565b9050919050565b600060208201905081810360008301526124b381612177565b9050919050565b600060208201905081810360008301526124d38161219a565b9050919050565b600060208201905081810360008301526124f3816121bd565b9050919050565b60006020820190508181036000830152612513816121e0565b9050919050565b6000602082019050818103600083015261253381612203565b9050919050565b6000602082019050818103600083015261255381612226565b9050919050565b6000602082019050818103600083015261257381612249565b9050919050565b600060208201905081810360008301526125938161226c565b9050919050565b600060208201905081810360008301526125b38161228f565b9050919050565b600060208201905081810360008301526125d3816122d5565b9050919050565b600060208201905081810360008301526125f38161231b565b9050919050565b600060208201905081810360008301526126138161233e565b9050919050565b600060208201905061262f6000830184612361565b92915050565b600060408201905061264a6000830185612361565b6126576020830184612077565b9392505050565b60006020820190506126736000830184612370565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006126ab82612969565b91506126b683612969565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126eb576126ea612a0f565b5b828201905092915050565b6000808291508390505b60018511156127405780860481111561271c5761271b612a0f565b5b600185161561272b5780820291505b808102905061273985612ae1565b9450612700565b94509492505050565b600061275482612969565b915061275f83612969565b925061278c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612794565b905092915050565b6000826127a45760019050612860565b816127b25760009050612860565b81600181146127c857600281146127d257612801565b6001915050612860565b60ff8411156127e4576127e3612a0f565b5b8360020a9150848211156127fb576127fa612a0f565b5b50612860565b5060208310610133831016604e8410600b84101617156128365782820a90508381111561283157612830612a0f565b5b612860565b61284384848460016126f6565b9250905081840481111561285a57612859612a0f565b5b81810290505b9392505050565b600061287282612969565b915061287d83612969565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128b6576128b5612a0f565b5b828202905092915050565b60006128cc82612969565b91506128d783612969565b9250828210156128ea576128e9612a0f565b5b828203905092915050565b600061290082612949565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561299e578082015181840152602081019050612983565b838111156129ad576000848401525b50505050565b60006129be82612969565b915060008214156129d2576129d1612a0f565b5b600182039050919050565b600060028204905060018216806129f557607f821691505b60208210811415612a0957612a08612a3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f742061206275726e657200000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f752063616e74206275726e20616e79206675727468657200000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420616e2061646d696e00000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f756e6b6e6f776e20616464726573730000000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b612f2c816128f5565b8114612f3757600080fd5b50565b612f4381612907565b8114612f4e57600080fd5b50565b612f5a81612913565b8114612f6557600080fd5b50565b612f718161291d565b8114612f7c57600080fd5b50565b612f8881612969565b8114612f9357600080fd5b5056fea26469706673582212201597cfdb3049b4387514802f9b1586849edaa4436112ade21289a521cbf6035664736f6c63430008070033
Deployed Bytecode
0x60806040526004361061014f5760003560e01c8063636b12d3116100b657806399813de71161006f57806399813de7146104d0578063a217fddf146104fb578063a457c2d714610526578063a9059cbb14610563578063d547741f146105a0578063dd62ed3e146105c957610156565b8063636b12d3146103b057806367c457e5146103d95780636d1b229d1461040257806370a082311461042b57806391d148541461046857806395d89b41146104a557610156565b8063282c51f311610108578063282c51f3146102a25780632f2ff15d146102cd578063313ce567146102f657806335ed52631461032157806336568abe1461034a578063395093511461037357610156565b806301ffc9a71461015857806306fdde0314610195578063095ea7b3146101c057806318160ddd146101fd57806323b872dd14610228578063248a9ca31461026557610156565b3661015657005b005b34801561016457600080fd5b5061017f600480360381019061017a9190611fdd565b610606565b60405161018c91906123e2565b60405180910390f35b3480156101a157600080fd5b506101aa610680565b6040516101b79190612418565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190611f03565b610712565b6040516101f491906123e2565b60405180910390f35b34801561020957600080fd5b50610212610730565b60405161021f919061261a565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190611eb0565b61073a565b60405161025c91906123e2565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190611f70565b610832565b60405161029991906123fd565b60405180910390f35b3480156102ae57600080fd5b506102b7610852565b6040516102c491906123fd565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190611f9d565b610876565b005b34801561030257600080fd5b5061030b61089f565b604051610318919061265e565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190611e43565b6108a8565b005b34801561035657600080fd5b50610371600480360381019061036c9190611f9d565b61096d565b005b34801561037f57600080fd5b5061039a60048036038101906103959190611f03565b6109f0565b6040516103a791906123e2565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190612037565b610a9c565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190611e43565b610bee565b005b34801561040e57600080fd5b506104296004803603810190610424919061200a565b610cb3565b005b34801561043757600080fd5b50610452600480360381019061044d9190611e43565b610df1565b60405161045f919061261a565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190611f9d565b610e39565b60405161049c91906123e2565b60405180910390f35b3480156104b157600080fd5b506104ba610ea4565b6040516104c79190612418565b60405180910390f35b3480156104dc57600080fd5b506104e5610f36565b6040516104f2919061261a565b60405180910390f35b34801561050757600080fd5b50610510611027565b60405161051d91906123fd565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190611f03565b61102e565b60405161055a91906123e2565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190611f03565b611119565b60405161059791906123e2565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190611f9d565b611137565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190611e70565b611160565b6040516105fd919061261a565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106795750610678826111e7565b5b9050919050565b60606003805461068f906129dd565b80601f01602080910402602001604051908101604052809291908181526020018280546106bb906129dd565b80156107085780601f106106dd57610100808354040283529160200191610708565b820191906000526020600020905b8154815290600101906020018083116106eb57829003601f168201915b5050505050905090565b600061072661071f611251565b8484611259565b6001905092915050565b6000600254905090565b6000610747848484611424565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610792611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610809906124fa565b60405180910390fd5b6108268561081e611251565b858403611259565b60019150509392505050565b600060086000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61087f82610832565b6108908161088b611251565b6116a5565b61089a8383611742565b505050565b60006012905090565b6108b56000801b33610e39565b6108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb9061257a565b60405180910390fd5b6109016000801b33610e39565b610940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109379061257a565b60405180910390fd5b61096a7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882611137565b50565b610975611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906125fa565b60405180910390fd5b6109ec8282611823565b5050565b6000610a926109fd611251565b848460016000610a0b611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a8d91906126a0565b611259565b6001905092915050565b610aa96000801b33610e39565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf9061257a565b60405180910390fd5b600081905060006012600a610afd9190612749565b84610b089190612867565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610b459291906123b9565b602060405180830381600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190611f43565b503373ffffffffffffffffffffffffffffffffffffffff167f0e6f17688019f806e1ec227d1566d64b0860124e31bad22d82533f74eecbddd38285604051610be0929190612635565b60405180910390a250505050565b610bfb6000801b33610e39565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c319061257a565b60405180910390fd5b610c476000801b33610e39565b610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d9061257a565b60405180910390fd5b610cb07f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882610876565b50565b610ce47f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610cdf611251565b610e39565b610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906124da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16610d43611251565b73ffffffffffffffffffffffffffffffffffffffff161415610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906125da565b60405180910390fd5b600a54610da5610730565b11610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc9061253a565b60405180910390fd5b610dee81611905565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610eb3906129dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610edf906129dd565b8015610f2c5780601f10610f0157610100808354040283529160200191610f2c565b820191906000526020600020905b815481529060010190602001808311610f0f57829003601f168201915b5050505050905090565b6000610f456000801b33610e39565b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b9061257a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f0e6f17688019f806e1ec227d1566d64b0860124e31bad22d82533f74eecbddd38230604051611018929190612635565b60405180910390a28091505090565b6000801b81565b6000806001600061103d611251565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f1906125ba565b60405180910390fd5b61110e611105611251565b85858403611259565b600191505092915050565b600061112d611126611251565b8484611424565b6001905092915050565b61114082610832565b6111518161114c611251565b6116a5565b61115b8383611823565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c09061259a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113309061249a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611417919061261a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9061255a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061245a565b60405180910390fd5b61150f838383611934565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906124ba565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461162891906126a0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161168c919061261a565b60405180910390a361169f8484846119c2565b50505050565b6116af8282610e39565b61173e576116d48173ffffffffffffffffffffffffffffffffffffffff1660146119c7565b6116e28360001c60206119c7565b6040516020016116f392919061237f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359190612418565b60405180910390fd5b5050565b61174c8282610e39565b61181f5760016008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117c4611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61182d8282610e39565b156119015760006008600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118a6611251565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611931600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611c03565b50565b82600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600781905550505050565b505050565b6060600060028360026119da9190612867565b6119e491906126a0565b67ffffffffffffffff8111156119fd576119fc612a9c565b5b6040519080825280601f01601f191660200182016040528015611a2f5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a6757611a66612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611acb57611aca612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611b0b9190612867565b611b1591906126a0565b90505b6001811115611bb5577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b5757611b56612a6d565b5b1a60f81b828281518110611b6e57611b6d612a6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611bae906129b3565b9050611b18565b5060008414611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf09061243a565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a9061251a565b60405180910390fd5b611c7f82600083611934565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc9061247a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d5c91906128c1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc1919061261a565b60405180910390a3611dd5836000846119c2565b505050565b600081359050611de981612f23565b92915050565b600081519050611dfe81612f3a565b92915050565b600081359050611e1381612f51565b92915050565b600081359050611e2881612f68565b92915050565b600081359050611e3d81612f7f565b92915050565b600060208284031215611e5957611e58612acb565b5b6000611e6784828501611dda565b91505092915050565b60008060408385031215611e8757611e86612acb565b5b6000611e9585828601611dda565b9250506020611ea685828601611dda565b9150509250929050565b600080600060608486031215611ec957611ec8612acb565b5b6000611ed786828701611dda565b9350506020611ee886828701611dda565b9250506040611ef986828701611e2e565b9150509250925092565b60008060408385031215611f1a57611f19612acb565b5b6000611f2885828601611dda565b9250506020611f3985828601611e2e565b9150509250929050565b600060208284031215611f5957611f58612acb565b5b6000611f6784828501611def565b91505092915050565b600060208284031215611f8657611f85612acb565b5b6000611f9484828501611e04565b91505092915050565b60008060408385031215611fb457611fb3612acb565b5b6000611fc285828601611e04565b9250506020611fd385828601611dda565b9150509250929050565b600060208284031215611ff357611ff2612acb565b5b600061200184828501611e19565b91505092915050565b6000602082840312156120205761201f612acb565b5b600061202e84828501611e2e565b91505092915050565b6000806040838503121561204e5761204d612acb565b5b600061205c85828601611e2e565b925050602061206d85828601611dda565b9150509250929050565b612080816128f5565b82525050565b61208f81612907565b82525050565b61209e81612913565b82525050565b60006120af82612679565b6120b98185612684565b93506120c9818560208601612980565b6120d281612ad0565b840191505092915050565b60006120e882612679565b6120f28185612695565b9350612102818560208601612980565b80840191505092915050565b600061211b602083612684565b915061212682612aee565b602082019050919050565b600061213e602383612684565b915061214982612b17565b604082019050919050565b6000612161602283612684565b915061216c82612b66565b604082019050919050565b6000612184602283612684565b915061218f82612bb5565b604082019050919050565b60006121a7602683612684565b91506121b282612c04565b604082019050919050565b60006121ca601683612684565b91506121d582612c53565b602082019050919050565b60006121ed602883612684565b91506121f882612c7c565b604082019050919050565b6000612210602183612684565b915061221b82612ccb565b604082019050919050565b6000612233601983612684565b915061223e82612d1a565b602082019050919050565b6000612256602583612684565b915061226182612d43565b604082019050919050565b6000612279601683612684565b915061228482612d92565b602082019050919050565b600061229c602483612684565b91506122a782612dbb565b604082019050919050565b60006122bf601783612695565b91506122ca82612e0a565b601782019050919050565b60006122e2602583612684565b91506122ed82612e33565b604082019050919050565b6000612305601183612695565b915061231082612e82565b601182019050919050565b6000612328600f83612684565b915061233382612eab565b602082019050919050565b600061234b602f83612684565b915061235682612ed4565b604082019050919050565b61236a81612969565b82525050565b61237981612973565b82525050565b600061238a826122b2565b915061239682856120dd565b91506123a1826122f8565b91506123ad82846120dd565b91508190509392505050565b60006040820190506123ce6000830185612077565b6123db6020830184612361565b9392505050565b60006020820190506123f76000830184612086565b92915050565b60006020820190506124126000830184612095565b92915050565b6000602082019050818103600083015261243281846120a4565b905092915050565b600060208201905081810360008301526124538161210e565b9050919050565b6000602082019050818103600083015261247381612131565b9050919050565b6000602082019050818103600083015261249381612154565b9050919050565b600060208201905081810360008301526124b381612177565b9050919050565b600060208201905081810360008301526124d38161219a565b9050919050565b600060208201905081810360008301526124f3816121bd565b9050919050565b60006020820190508181036000830152612513816121e0565b9050919050565b6000602082019050818103600083015261253381612203565b9050919050565b6000602082019050818103600083015261255381612226565b9050919050565b6000602082019050818103600083015261257381612249565b9050919050565b600060208201905081810360008301526125938161226c565b9050919050565b600060208201905081810360008301526125b38161228f565b9050919050565b600060208201905081810360008301526125d3816122d5565b9050919050565b600060208201905081810360008301526125f38161231b565b9050919050565b600060208201905081810360008301526126138161233e565b9050919050565b600060208201905061262f6000830184612361565b92915050565b600060408201905061264a6000830185612361565b6126576020830184612077565b9392505050565b60006020820190506126736000830184612370565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006126ab82612969565b91506126b683612969565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126eb576126ea612a0f565b5b828201905092915050565b6000808291508390505b60018511156127405780860481111561271c5761271b612a0f565b5b600185161561272b5780820291505b808102905061273985612ae1565b9450612700565b94509492505050565b600061275482612969565b915061275f83612969565b925061278c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612794565b905092915050565b6000826127a45760019050612860565b816127b25760009050612860565b81600181146127c857600281146127d257612801565b6001915050612860565b60ff8411156127e4576127e3612a0f565b5b8360020a9150848211156127fb576127fa612a0f565b5b50612860565b5060208310610133831016604e8410600b84101617156128365782820a90508381111561283157612830612a0f565b5b612860565b61284384848460016126f6565b9250905081840481111561285a57612859612a0f565b5b81810290505b9392505050565b600061287282612969565b915061287d83612969565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128b6576128b5612a0f565b5b828202905092915050565b60006128cc82612969565b91506128d783612969565b9250828210156128ea576128e9612a0f565b5b828203905092915050565b600061290082612949565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561299e578082015181840152602081019050612983565b838111156129ad576000848401525b50505050565b60006129be82612969565b915060008214156129d2576129d1612a0f565b5b600182039050919050565b600060028204905060018216806129f557607f821691505b60208210811415612a0957612a08612a3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f742061206275726e657200000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f796f752063616e74206275726e20616e79206675727468657200000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420616e2061646d696e00000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f756e6b6e6f776e20616464726573730000000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b612f2c816128f5565b8114612f3757600080fd5b50565b612f4381612907565b8114612f4e57600080fd5b50565b612f5a81612913565b8114612f6557600080fd5b50565b612f718161291d565b8114612f7c57600080fd5b50565b612f8881612969565b8114612f9357600080fd5b5056fea26469706673582212201597cfdb3049b4387514802f9b1586849edaa4436112ade21289a521cbf6035664736f6c63430008070033
Deployed Bytecode Sourcemap
835:3030:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4040:202:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;675:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2772:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1763:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3405:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5412:121:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;915:62:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5783:145:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1612:91:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2153:209:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6800:214:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4278:212:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3336:345:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1923:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2443:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1927:125:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4329:137:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;886:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2929:317:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2361:49:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4977:405:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2255:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6162:147:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2485:149:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4040:202:0;4125:4;4163:32;4148:47;;;:11;:47;;;;:87;;;;4199:36;4223:11;4199:23;:36::i;:::-;4148:87;4141:94;;4040:202;;;:::o;675:98:3:-;729:13;761:5;754:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;675:98;:::o;2772:166::-;2855:4;2871:39;2880:12;:10;:12::i;:::-;2894:7;2903:6;2871:8;:39::i;:::-;2927:4;2920:11;;2772:166;;;;:::o;1763:106::-;1824:7;1850:12;;1843:19;;1763:106;:::o;3405:478::-;3541:4;3557:36;3567:6;3575:9;3586:6;3557:9;:36::i;:::-;3604:24;3631:11;:19;3643:6;3631:19;;;;;;;;;;;;;;;:33;3651:12;:10;:12::i;:::-;3631:33;;;;;;;;;;;;;;;;3604:60;;3702:6;3682:16;:26;;3674:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3787:57;3796:6;3804:12;:10;:12::i;:::-;3837:6;3818:16;:25;3787:8;:57::i;:::-;3872:4;3865:11;;;3405:478;;;;;:::o;5412:121:0:-;5478:7;5504:6;:12;5511:4;5504:12;;;;;;;;;;;:22;;;5497:29;;5412:121;;;:::o;915:62:5:-;953:24;915:62;:::o;5783:145:0:-;5866:18;5879:4;5866:12;:18::i;:::-;3925:30;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;5896:25:::1;5907:4;5913:7;5896:10;:25::i;:::-;5783:145:::0;;;:::o;1612:91:3:-;1670:5;1694:2;1687:9;;1612:91;:::o;2153:209:5:-;1464:39;2406:4:0;1472:18:5;;1492:10;1464:7;:39::i;:::-;1456:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2240:39:::1;2406:4:0;2248:18:5::0;::::1;2268:10;2240:7;:39::i;:::-;2232:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2316:39;953:24;2340:14;2316:10;:39::i;:::-;2153:209:::0;:::o;6800:214:0:-;6906:12;:10;:12::i;:::-;6895:23;;:7;:23;;;6887:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;6981:26;6993:4;6999:7;6981:11;:26::i;:::-;6800:214;;:::o;4278:212:3:-;4366:4;4382:80;4391:12;:10;:12::i;:::-;4405:7;4451:10;4414:11;:25;4426:12;:10;:12::i;:::-;4414:25;;;;;;;;;;;;;;;:34;4440:7;4414:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4382:8;:80::i;:::-;4479:4;4472:11;;4278:212;;;;:::o;3336:345:5:-;3413:39;2406:4:0;3421:18:5;;3441:10;3413:7;:39::i;:::-;3405:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3489:9;3505:11;3489:28;;3528:13;3567:2;3553;:18;;;;:::i;:::-;3545:3;3544:28;;;;:::i;:::-;3528:44;;3583:5;:14;;;3598:10;3609:5;3583:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3643:10;3631:42;;;3654:5;3661:11;3631:42;;;;;;;:::i;:::-;;;;;;;;3395:286;;3336:345;;:::o;1923:191::-;1464:39;2406:4:0;1472:18:5;;1492:10;1464:7;:39::i;:::-;1456:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1998:39:::1;2406:4:0;2006:18:5::0;::::1;2026:10;1998:7;:39::i;:::-;1990:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:33;953:24;2097:9;2074;:33::i;:::-;1923:191:::0;:::o;2443:288::-;2504:34;953:24;2525:12;:10;:12::i;:::-;2504:7;:34::i;:::-;2496:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2607:1;2583:26;;:12;:10;:12::i;:::-;:26;;;;2575:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2663:9;;2647:13;:11;:13::i;:::-;:25;2639:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2712:12;2717:6;2712:4;:12::i;:::-;2443:288;:::o;1927:125:3:-;2001:7;2027:9;:18;2037:7;2027:18;;;;;;;;;;;;;;;;2020:25;;1927:125;;;:::o;4329:137:0:-;4407:4;4430:6;:12;4437:4;4430:12;;;;;;;;;;;:20;;:29;4451:7;4430:29;;;;;;;;;;;;;;;;;;;;;;;;;4423:36;;4329:137;;;;:::o;886:102:3:-;942:13;974:7;967:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;886:102;:::o;2929:317:5:-;2974:4;2997:39;2406:4:0;3005:18:5;;3025:10;2997:7;:39::i;:::-;2989:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3073:11;3087:21;3073:35;;3126:10;3118:28;;:36;3147:6;3118:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3182:10;3170:45;;;3193:6;3209:4;3170:45;;;;;;;:::i;:::-;;;;;;;;3233:6;3226:13;;;2929:317;:::o;2361:49:0:-;2406:4;2361:49;;;:::o;4977:405:3:-;5070:4;5086:24;5113:11;:25;5125:12;:10;:12::i;:::-;5113:25;;;;;;;;;;;;;;;:34;5139:7;5113:34;;;;;;;;;;;;;;;;5086:61;;5185:15;5165:16;:35;;5157:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5276:67;5285:12;:10;:12::i;:::-;5299:7;5327:15;5308:16;:34;5276:8;:67::i;:::-;5371:4;5364:11;;;4977:405;;;;:::o;2255:172::-;2341:4;2357:42;2367:12;:10;:12::i;:::-;2381:9;2392:6;2357:9;:42::i;:::-;2416:4;2409:11;;2255:172;;;;:::o;6162:147:0:-;6246:18;6259:4;6246:12;:18::i;:::-;3925:30;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;6276:26:::1;6288:4;6294:7;6276:11;:26::i;:::-;6162:147:::0;;;:::o;2485:149:3:-;2574:7;2600:11;:18;2612:5;2600:18;;;;;;;;;;;;;;;:27;2619:7;2600:27;;;;;;;;;;;;;;;;2593:34;;2485:149;;;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;8553:370:3:-;8701:1;8684:19;;:5;:19;;;;8676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8781:1;8762:21;;:7;:21;;;;8754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8863:6;8833:11;:18;8845:5;8833:18;;;;;;;;;;;;;;;:27;8852:7;8833:27;;;;;;;;;;;;;;;:36;;;;8900:7;8884:32;;8893:5;8884:32;;;8909:6;8884:32;;;;;;:::i;:::-;;;;;;;;8553:370;;;:::o;5856:713::-;6009:1;5991:20;;:6;:20;;;;5983:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6092:1;6071:23;;:9;:23;;;;6063:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6145:47;6166:6;6174:9;6185:6;6145:20;:47::i;:::-;6203:21;6227:9;:17;6237:6;6227:17;;;;;;;;;;;;;;;;6203:41;;6279:6;6262:13;:23;;6254:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6398:6;6382:13;:22;6362:9;:17;6372:6;6362:17;;;;;;;;;;;;;;;:42;;;;6448:6;6424:9;:20;6434:9;6424:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6487:9;6470:35;;6479:6;6470:35;;;6498:6;6470:35;;;;;;:::i;:::-;;;;;;;;6516:46;6536:6;6544:9;6555:6;6516:19;:46::i;:::-;5973:596;5856:713;;;:::o;4747:484:0:-;4827:22;4835:4;4841:7;4827;:22::i;:::-;4822:403;;5010:41;5038:7;5010:41;;5048:2;5010:19;:41::i;:::-;5122:38;5150:4;5142:13;;5157:2;5122:19;:38::i;:::-;4917:265;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4865:349;;;;;;;;;;;:::i;:::-;;;;;;;;4822:403;4747:484;;:::o;8067:224::-;8141:22;8149:4;8155:7;8141;:22::i;:::-;8136:149;;8211:4;8179:6;:12;8186:4;8179:12;;;;;;;;;;;:20;;:29;8200:7;8179:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;8261:12;:10;:12::i;:::-;8234:40;;8252:7;8234:40;;8246:4;8234:40;;;;;;;;;;8136:149;8067:224;;:::o;8297:225::-;8371:22;8379:4;8385:7;8371;:22::i;:::-;8367:149;;;8441:5;8409:6;:12;8416:4;8409:12;;;;;;;;;;;:20;;:29;8430:7;8409:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8492:12;:10;:12::i;:::-;8465:40;;8483:7;8465:40;;8477:4;8465:40;;;;;;;;;;8367:149;8297:225;;:::o;2737:98:5:-;2794:34;2806:13;;;;;;;;;;;2821:6;2794:11;:34::i;:::-;2737:98;:::o;9507:192:3:-;9644:4;9636:5;;:12;;;;;;;;;;;;;;;;;;9664:2;9658:3;;:8;;;;;;;;;;;;;;;;;;9686:6;9676:7;:16;;;;9507:192;;;:::o;10287:120::-;;;;:::o;1535:441:12:-;1610:13;1635:19;1680:1;1671:6;1667:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1657:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:47;;1692:15;:6;1699:1;1692:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1717;:6;1724:1;1717:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1747:9;1772:1;1763:6;1759:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1747:26;;1742:132;1779:1;1775;:5;1742:132;;;1813:12;1834:3;1826:5;:11;1813:25;;;;;;;:::i;:::-;;;;;1801:6;1808:1;1801:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1862:1;1852:11;;;;;1782:3;;;;:::i;:::-;;;1742:132;;;;1900:1;1891:5;:10;1883:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:6;1948:21;;;1535:441;;;;:::o;7554:576:3:-;7656:1;7637:21;;:7;:21;;;;7629:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7707:49;7728:7;7745:1;7749:6;7707:20;:49::i;:::-;7767:22;7792:9;:18;7802:7;7792:18;;;;;;;;;;;;;;;;7767:43;;7846:6;7828:14;:24;;7820:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7963:6;7946:14;:23;7925:9;:18;7935:7;7925:18;;;;;;;;;;;;;;;:44;;;;8005:6;7989:12;;:22;;;;;;;:::i;:::-;;;;;;;;8053:1;8027:37;;8036:7;8027:37;;;8057:6;8027:37;;;;;;:::i;:::-;;;;;;;;8075:48;8095:7;8112:1;8116:6;8075:19;:48::i;:::-;7619:511;7554:576;;:::o;7:139:13:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;152:137;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;295:139;;;;:::o;440:137::-;485:5;523:6;510:20;501:29;;539:32;565:5;539:32;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:329::-;787:6;836:2;824:9;815:7;811:23;807:32;804:119;;;842:79;;:::i;:::-;804:119;962:1;987:53;1032:7;1023:6;1012:9;1008:22;987:53;:::i;:::-;977:63;;933:117;728:329;;;;:::o;1063:474::-;1131:6;1139;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:53;1384:7;1375:6;1364:9;1360:22;1339:53;:::i;:::-;1329:63;;1285:117;1441:2;1467:53;1512:7;1503:6;1492:9;1488:22;1467:53;:::i;:::-;1457:63;;1412:118;1063:474;;;;;:::o;1543:619::-;1620:6;1628;1636;1685:2;1673:9;1664:7;1660:23;1656:32;1653:119;;;1691:79;;:::i;:::-;1653:119;1811:1;1836:53;1881:7;1872:6;1861:9;1857:22;1836:53;:::i;:::-;1826:63;;1782:117;1938:2;1964:53;2009:7;2000:6;1989:9;1985:22;1964:53;:::i;:::-;1954:63;;1909:118;2066:2;2092:53;2137:7;2128:6;2117:9;2113:22;2092:53;:::i;:::-;2082:63;;2037:118;1543:619;;;;;:::o;2168:474::-;2236:6;2244;2293:2;2281:9;2272:7;2268:23;2264:32;2261:119;;;2299:79;;:::i;:::-;2261:119;2419:1;2444:53;2489:7;2480:6;2469:9;2465:22;2444:53;:::i;:::-;2434:63;;2390:117;2546:2;2572:53;2617:7;2608:6;2597:9;2593:22;2572:53;:::i;:::-;2562:63;;2517:118;2168:474;;;;;:::o;2648:345::-;2715:6;2764:2;2752:9;2743:7;2739:23;2735:32;2732:119;;;2770:79;;:::i;:::-;2732:119;2890:1;2915:61;2968:7;2959:6;2948:9;2944:22;2915:61;:::i;:::-;2905:71;;2861:125;2648:345;;;;:::o;2999:329::-;3058:6;3107:2;3095:9;3086:7;3082:23;3078:32;3075:119;;;3113:79;;:::i;:::-;3075:119;3233:1;3258:53;3303:7;3294:6;3283:9;3279:22;3258:53;:::i;:::-;3248:63;;3204:117;2999:329;;;;:::o;3334:474::-;3402:6;3410;3459:2;3447:9;3438:7;3434:23;3430:32;3427:119;;;3465:79;;:::i;:::-;3427:119;3585:1;3610:53;3655:7;3646:6;3635:9;3631:22;3610:53;:::i;:::-;3600:63;;3556:117;3712:2;3738:53;3783:7;3774:6;3763:9;3759:22;3738:53;:::i;:::-;3728:63;;3683:118;3334:474;;;;;:::o;3814:327::-;3872:6;3921:2;3909:9;3900:7;3896:23;3892:32;3889:119;;;3927:79;;:::i;:::-;3889:119;4047:1;4072:52;4116:7;4107:6;4096:9;4092:22;4072:52;:::i;:::-;4062:62;;4018:116;3814:327;;;;:::o;4147:329::-;4206:6;4255:2;4243:9;4234:7;4230:23;4226:32;4223:119;;;4261:79;;:::i;:::-;4223:119;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4147:329;;;;:::o;4482:474::-;4550:6;4558;4607:2;4595:9;4586:7;4582:23;4578:32;4575:119;;;4613:79;;:::i;:::-;4575:119;4733:1;4758:53;4803:7;4794:6;4783:9;4779:22;4758:53;:::i;:::-;4748:63;;4704:117;4860:2;4886:53;4931:7;4922:6;4911:9;4907:22;4886:53;:::i;:::-;4876:63;;4831:118;4482:474;;;;;:::o;4962:118::-;5049:24;5067:5;5049:24;:::i;:::-;5044:3;5037:37;4962:118;;:::o;5086:109::-;5167:21;5182:5;5167:21;:::i;:::-;5162:3;5155:34;5086:109;;:::o;5201:118::-;5288:24;5306:5;5288:24;:::i;:::-;5283:3;5276:37;5201:118;;:::o;5325:364::-;5413:3;5441:39;5474:5;5441:39;:::i;:::-;5496:71;5560:6;5555:3;5496:71;:::i;:::-;5489:78;;5576:52;5621:6;5616:3;5609:4;5602:5;5598:16;5576:52;:::i;:::-;5653:29;5675:6;5653:29;:::i;:::-;5648:3;5644:39;5637:46;;5417:272;5325:364;;;;:::o;5695:377::-;5801:3;5829:39;5862:5;5829:39;:::i;:::-;5884:89;5966:6;5961:3;5884:89;:::i;:::-;5877:96;;5982:52;6027:6;6022:3;6015:4;6008:5;6004:16;5982:52;:::i;:::-;6059:6;6054:3;6050:16;6043:23;;5805:267;5695:377;;;;:::o;6078:366::-;6220:3;6241:67;6305:2;6300:3;6241:67;:::i;:::-;6234:74;;6317:93;6406:3;6317:93;:::i;:::-;6435:2;6430:3;6426:12;6419:19;;6078:366;;;:::o;6450:::-;6592:3;6613:67;6677:2;6672:3;6613:67;:::i;:::-;6606:74;;6689:93;6778:3;6689:93;:::i;:::-;6807:2;6802:3;6798:12;6791:19;;6450:366;;;:::o;6822:::-;6964:3;6985:67;7049:2;7044:3;6985:67;:::i;:::-;6978:74;;7061:93;7150:3;7061:93;:::i;:::-;7179:2;7174:3;7170:12;7163:19;;6822:366;;;:::o;7194:::-;7336:3;7357:67;7421:2;7416:3;7357:67;:::i;:::-;7350:74;;7433:93;7522:3;7433:93;:::i;:::-;7551:2;7546:3;7542:12;7535:19;;7194:366;;;:::o;7566:::-;7708:3;7729:67;7793:2;7788:3;7729:67;:::i;:::-;7722:74;;7805:93;7894:3;7805:93;:::i;:::-;7923:2;7918:3;7914:12;7907:19;;7566:366;;;:::o;7938:::-;8080:3;8101:67;8165:2;8160:3;8101:67;:::i;:::-;8094:74;;8177:93;8266:3;8177:93;:::i;:::-;8295:2;8290:3;8286:12;8279:19;;7938:366;;;:::o;8310:::-;8452:3;8473:67;8537:2;8532:3;8473:67;:::i;:::-;8466:74;;8549:93;8638:3;8549:93;:::i;:::-;8667:2;8662:3;8658:12;8651:19;;8310:366;;;:::o;8682:::-;8824:3;8845:67;8909:2;8904:3;8845:67;:::i;:::-;8838:74;;8921:93;9010:3;8921:93;:::i;:::-;9039:2;9034:3;9030:12;9023:19;;8682:366;;;:::o;9054:::-;9196:3;9217:67;9281:2;9276:3;9217:67;:::i;:::-;9210:74;;9293:93;9382:3;9293:93;:::i;:::-;9411:2;9406:3;9402:12;9395:19;;9054:366;;;:::o;9426:::-;9568:3;9589:67;9653:2;9648:3;9589:67;:::i;:::-;9582:74;;9665:93;9754:3;9665:93;:::i;:::-;9783:2;9778:3;9774:12;9767:19;;9426:366;;;:::o;9798:::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:402::-;10702:3;10723:85;10805:2;10800:3;10723:85;:::i;:::-;10716:92;;10817:93;10906:3;10817:93;:::i;:::-;10935:2;10930:3;10926:12;10919:19;;10542:402;;;:::o;10950:366::-;11092:3;11113:67;11177:2;11172:3;11113:67;:::i;:::-;11106:74;;11189:93;11278:3;11189:93;:::i;:::-;11307:2;11302:3;11298:12;11291:19;;10950:366;;;:::o;11322:402::-;11482:3;11503:85;11585:2;11580:3;11503:85;:::i;:::-;11496:92;;11597:93;11686:3;11597:93;:::i;:::-;11715:2;11710:3;11706:12;11699:19;;11322:402;;;:::o;11730:366::-;11872:3;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11969:93;12058:3;11969:93;:::i;:::-;12087:2;12082:3;12078:12;12071:19;;11730:366;;;:::o;12102:::-;12244:3;12265:67;12329:2;12324:3;12265:67;:::i;:::-;12258:74;;12341:93;12430:3;12341:93;:::i;:::-;12459:2;12454:3;12450:12;12443:19;;12102:366;;;:::o;12474:118::-;12561:24;12579:5;12561:24;:::i;:::-;12556:3;12549:37;12474:118;;:::o;12598:112::-;12681:22;12697:5;12681:22;:::i;:::-;12676:3;12669:35;12598:112;;:::o;12716:967::-;13098:3;13120:148;13264:3;13120:148;:::i;:::-;13113:155;;13285:95;13376:3;13367:6;13285:95;:::i;:::-;13278:102;;13397:148;13541:3;13397:148;:::i;:::-;13390:155;;13562:95;13653:3;13644:6;13562:95;:::i;:::-;13555:102;;13674:3;13667:10;;12716:967;;;;;:::o;13689:332::-;13810:4;13848:2;13837:9;13833:18;13825:26;;13861:71;13929:1;13918:9;13914:17;13905:6;13861:71;:::i;:::-;13942:72;14010:2;13999:9;13995:18;13986:6;13942:72;:::i;:::-;13689:332;;;;;:::o;14027:210::-;14114:4;14152:2;14141:9;14137:18;14129:26;;14165:65;14227:1;14216:9;14212:17;14203:6;14165:65;:::i;:::-;14027:210;;;;:::o;14243:222::-;14336:4;14374:2;14363:9;14359:18;14351:26;;14387:71;14455:1;14444:9;14440:17;14431:6;14387:71;:::i;:::-;14243:222;;;;:::o;14471:313::-;14584:4;14622:2;14611:9;14607:18;14599:26;;14671:9;14665:4;14661:20;14657:1;14646:9;14642:17;14635:47;14699:78;14772:4;14763:6;14699:78;:::i;:::-;14691:86;;14471:313;;;;:::o;14790:419::-;14956:4;14994:2;14983:9;14979:18;14971:26;;15043:9;15037:4;15033:20;15029:1;15018:9;15014:17;15007:47;15071:131;15197:4;15071:131;:::i;:::-;15063:139;;14790:419;;;:::o;15215:::-;15381:4;15419:2;15408:9;15404:18;15396:26;;15468:9;15462:4;15458:20;15454:1;15443:9;15439:17;15432:47;15496:131;15622:4;15496:131;:::i;:::-;15488:139;;15215:419;;;:::o;15640:::-;15806:4;15844:2;15833:9;15829:18;15821:26;;15893:9;15887:4;15883:20;15879:1;15868:9;15864:17;15857:47;15921:131;16047:4;15921:131;:::i;:::-;15913:139;;15640:419;;;:::o;16065:::-;16231:4;16269:2;16258:9;16254:18;16246:26;;16318:9;16312:4;16308:20;16304:1;16293:9;16289:17;16282:47;16346:131;16472:4;16346:131;:::i;:::-;16338:139;;16065:419;;;:::o;16490:::-;16656:4;16694:2;16683:9;16679:18;16671:26;;16743:9;16737:4;16733:20;16729:1;16718:9;16714:17;16707:47;16771:131;16897:4;16771:131;:::i;:::-;16763:139;;16490:419;;;:::o;16915:::-;17081:4;17119:2;17108:9;17104:18;17096:26;;17168:9;17162:4;17158:20;17154:1;17143:9;17139:17;17132:47;17196:131;17322:4;17196:131;:::i;:::-;17188:139;;16915:419;;;:::o;17340:::-;17506:4;17544:2;17533:9;17529:18;17521:26;;17593:9;17587:4;17583:20;17579:1;17568:9;17564:17;17557:47;17621:131;17747:4;17621:131;:::i;:::-;17613:139;;17340:419;;;:::o;17765:::-;17931:4;17969:2;17958:9;17954:18;17946:26;;18018:9;18012:4;18008:20;18004:1;17993:9;17989:17;17982:47;18046:131;18172:4;18046:131;:::i;:::-;18038:139;;17765:419;;;:::o;18190:::-;18356:4;18394:2;18383:9;18379:18;18371:26;;18443:9;18437:4;18433:20;18429:1;18418:9;18414:17;18407:47;18471:131;18597:4;18471:131;:::i;:::-;18463:139;;18190:419;;;:::o;18615:::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:::-;19206:4;19244:2;19233:9;19229:18;19221:26;;19293:9;19287:4;19283:20;19279:1;19268:9;19264:17;19257:47;19321:131;19447:4;19321:131;:::i;:::-;19313:139;;19040:419;;;:::o;19465:::-;19631:4;19669:2;19658:9;19654:18;19646:26;;19718:9;19712:4;19708:20;19704:1;19693:9;19689:17;19682:47;19746:131;19872:4;19746:131;:::i;:::-;19738:139;;19465:419;;;:::o;19890:::-;20056:4;20094:2;20083:9;20079:18;20071:26;;20143:9;20137:4;20133:20;20129:1;20118:9;20114:17;20107:47;20171:131;20297:4;20171:131;:::i;:::-;20163:139;;19890:419;;;:::o;20315:::-;20481:4;20519:2;20508:9;20504:18;20496:26;;20568:9;20562:4;20558:20;20554:1;20543:9;20539:17;20532:47;20596:131;20722:4;20596:131;:::i;:::-;20588:139;;20315:419;;;:::o;20740:::-;20906:4;20944:2;20933:9;20929:18;20921:26;;20993:9;20987:4;20983:20;20979:1;20968:9;20964:17;20957:47;21021:131;21147:4;21021:131;:::i;:::-;21013:139;;20740:419;;;:::o;21165:222::-;21258:4;21296:2;21285:9;21281:18;21273:26;;21309:71;21377:1;21366:9;21362:17;21353:6;21309:71;:::i;:::-;21165:222;;;;:::o;21393:332::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21565:71;21633:1;21622:9;21618:17;21609:6;21565:71;:::i;:::-;21646:72;21714:2;21703:9;21699:18;21690:6;21646:72;:::i;:::-;21393:332;;;;;:::o;21731:214::-;21820:4;21858:2;21847:9;21843:18;21835:26;;21871:67;21935:1;21924:9;21920:17;21911:6;21871:67;:::i;:::-;21731:214;;;;:::o;22032:99::-;22084:6;22118:5;22112:12;22102:22;;22032:99;;;:::o;22137:169::-;22221:11;22255:6;22250:3;22243:19;22295:4;22290:3;22286:14;22271:29;;22137:169;;;;:::o;22312:148::-;22414:11;22451:3;22436:18;;22312:148;;;;:::o;22466:305::-;22506:3;22525:20;22543:1;22525:20;:::i;:::-;22520:25;;22559:20;22577:1;22559:20;:::i;:::-;22554:25;;22713:1;22645:66;22641:74;22638:1;22635:81;22632:107;;;22719:18;;:::i;:::-;22632:107;22763:1;22760;22756:9;22749:16;;22466:305;;;;:::o;22777:848::-;22838:5;22845:4;22869:6;22860:15;;22893:5;22884:14;;22907:712;22928:1;22918:8;22915:15;22907:712;;;23023:4;23018:3;23014:14;23008:4;23005:24;23002:50;;;23032:18;;:::i;:::-;23002:50;23082:1;23072:8;23068:16;23065:451;;;23497:4;23490:5;23486:16;23477:25;;23065:451;23547:4;23541;23537:15;23529:23;;23577:32;23600:8;23577:32;:::i;:::-;23565:44;;22907:712;;;22777:848;;;;;;;:::o;23631:285::-;23691:5;23715:23;23733:4;23715:23;:::i;:::-;23707:31;;23759:27;23777:8;23759:27;:::i;:::-;23747:39;;23805:104;23842:66;23832:8;23826:4;23805:104;:::i;:::-;23796:113;;23631:285;;;;:::o;23922:1073::-;23976:5;24167:8;24157:40;;24188:1;24179:10;;24190:5;;24157:40;24216:4;24206:36;;24233:1;24224:10;;24235:5;;24206:36;24302:4;24350:1;24345:27;;;;24386:1;24381:191;;;;24295:277;;24345:27;24363:1;24354:10;;24365:5;;;24381:191;24426:3;24416:8;24413:17;24410:43;;;24433:18;;:::i;:::-;24410:43;24482:8;24479:1;24475:16;24466:25;;24517:3;24510:5;24507:14;24504:40;;;24524:18;;:::i;:::-;24504:40;24557:5;;;24295:277;;24681:2;24671:8;24668:16;24662:3;24656:4;24653:13;24649:36;24631:2;24621:8;24618:16;24613:2;24607:4;24604:12;24600:35;24584:111;24581:246;;;24737:8;24731:4;24727:19;24718:28;;24772:3;24765:5;24762:14;24759:40;;;24779:18;;:::i;:::-;24759:40;24812:5;;24581:246;24852:42;24890:3;24880:8;24874:4;24871:1;24852:42;:::i;:::-;24837:57;;;;24926:4;24921:3;24917:14;24910:5;24907:25;24904:51;;;24935:18;;:::i;:::-;24904:51;24984:4;24977:5;24973:16;24964:25;;23922:1073;;;;;;:::o;25001:348::-;25041:7;25064:20;25082:1;25064:20;:::i;:::-;25059:25;;25098:20;25116:1;25098:20;:::i;:::-;25093:25;;25286:1;25218:66;25214:74;25211:1;25208:81;25203:1;25196:9;25189:17;25185:105;25182:131;;;25293:18;;:::i;:::-;25182:131;25341:1;25338;25334:9;25323:20;;25001:348;;;;:::o;25355:191::-;25395:4;25415:20;25433:1;25415:20;:::i;:::-;25410:25;;25449:20;25467:1;25449:20;:::i;:::-;25444:25;;25488:1;25485;25482:8;25479:34;;;25493:18;;:::i;:::-;25479:34;25538:1;25535;25531:9;25523:17;;25355:191;;;;:::o;25552:96::-;25589:7;25618:24;25636:5;25618:24;:::i;:::-;25607:35;;25552:96;;;:::o;25654:90::-;25688:7;25731:5;25724:13;25717:21;25706:32;;25654:90;;;:::o;25750:77::-;25787:7;25816:5;25805:16;;25750:77;;;:::o;25833:149::-;25869:7;25909:66;25902:5;25898:78;25887:89;;25833:149;;;:::o;25988:126::-;26025:7;26065:42;26058:5;26054:54;26043:65;;25988:126;;;:::o;26120:77::-;26157:7;26186:5;26175:16;;26120:77;;;:::o;26203:86::-;26238:7;26278:4;26271:5;26267:16;26256:27;;26203:86;;;:::o;26295:307::-;26363:1;26373:113;26387:6;26384:1;26381:13;26373:113;;;26472:1;26467:3;26463:11;26457:18;26453:1;26448:3;26444:11;26437:39;26409:2;26406:1;26402:10;26397:15;;26373:113;;;26504:6;26501:1;26498:13;26495:101;;;26584:1;26575:6;26570:3;26566:16;26559:27;26495:101;26344:258;26295:307;;;:::o;26608:171::-;26647:3;26670:24;26688:5;26670:24;:::i;:::-;26661:33;;26716:4;26709:5;26706:15;26703:41;;;26724:18;;:::i;:::-;26703:41;26771:1;26764:5;26760:13;26753:20;;26608:171;;;:::o;26785:320::-;26829:6;26866:1;26860:4;26856:12;26846:22;;26913:1;26907:4;26903:12;26934:18;26924:81;;26990:4;26982:6;26978:17;26968:27;;26924:81;27052:2;27044:6;27041:14;27021:18;27018:38;27015:84;;;27071:18;;:::i;:::-;27015:84;26836:269;26785:320;;;:::o;27111:180::-;27159:77;27156:1;27149:88;27256:4;27253:1;27246:15;27280:4;27277:1;27270:15;27297:180;27345:77;27342:1;27335:88;27442:4;27439:1;27432:15;27466:4;27463:1;27456:15;27483:180;27531:77;27528:1;27521:88;27628:4;27625:1;27618:15;27652:4;27649:1;27642:15;27669:180;27717:77;27714:1;27707:88;27814:4;27811:1;27804:15;27838:4;27835:1;27828:15;27978:117;28087:1;28084;28077:12;28101:102;28142:6;28193:2;28189:7;28184:2;28177:5;28173:14;28169:28;28159:38;;28101:102;;;:::o;28209:::-;28251:8;28298:5;28295:1;28291:13;28270:34;;28209:102;;;:::o;28317:182::-;28457:34;28453:1;28445:6;28441:14;28434:58;28317:182;:::o;28505:222::-;28645:34;28641:1;28633:6;28629:14;28622:58;28714:5;28709:2;28701:6;28697:15;28690:30;28505:222;:::o;28733:221::-;28873:34;28869:1;28861:6;28857:14;28850:58;28942:4;28937:2;28929:6;28925:15;28918:29;28733:221;:::o;28960:::-;29100:34;29096:1;29088:6;29084:14;29077:58;29169:4;29164:2;29156:6;29152:15;29145:29;28960:221;:::o;29187:225::-;29327:34;29323:1;29315:6;29311:14;29304:58;29396:8;29391:2;29383:6;29379:15;29372:33;29187:225;:::o;29418:172::-;29558:24;29554:1;29546:6;29542:14;29535:48;29418:172;:::o;29596:227::-;29736:34;29732:1;29724:6;29720:14;29713:58;29805:10;29800:2;29792:6;29788:15;29781:35;29596:227;:::o;29829:220::-;29969:34;29965:1;29957:6;29953:14;29946:58;30038:3;30033:2;30025:6;30021:15;30014:28;29829:220;:::o;30055:175::-;30195:27;30191:1;30183:6;30179:14;30172:51;30055:175;:::o;30236:224::-;30376:34;30372:1;30364:6;30360:14;30353:58;30445:7;30440:2;30432:6;30428:15;30421:32;30236:224;:::o;30466:172::-;30606:24;30602:1;30594:6;30590:14;30583:48;30466:172;:::o;30644:223::-;30784:34;30780:1;30772:6;30768:14;30761:58;30853:6;30848:2;30840:6;30836:15;30829:31;30644:223;:::o;30873:173::-;31013:25;31009:1;31001:6;30997:14;30990:49;30873:173;:::o;31052:224::-;31192:34;31188:1;31180:6;31176:14;31169:58;31261:7;31256:2;31248:6;31244:15;31237:32;31052:224;:::o;31282:167::-;31422:19;31418:1;31410:6;31406:14;31399:43;31282:167;:::o;31455:165::-;31595:17;31591:1;31583:6;31579:14;31572:41;31455:165;:::o;31626:234::-;31766:34;31762:1;31754:6;31750:14;31743:58;31835:17;31830:2;31822:6;31818:15;31811:42;31626:234;:::o;31866:122::-;31939:24;31957:5;31939:24;:::i;:::-;31932:5;31929:35;31919:63;;31978:1;31975;31968:12;31919:63;31866:122;:::o;31994:116::-;32064:21;32079:5;32064:21;:::i;:::-;32057:5;32054:32;32044:60;;32100:1;32097;32090:12;32044:60;31994:116;:::o;32116:122::-;32189:24;32207:5;32189:24;:::i;:::-;32182:5;32179:35;32169:63;;32228:1;32225;32218:12;32169:63;32116:122;:::o;32244:120::-;32316:23;32333:5;32316:23;:::i;:::-;32309:5;32306:34;32296:62;;32354:1;32351;32344:12;32296:62;32244:120;:::o;32370:122::-;32443:24;32461:5;32443:24;:::i;:::-;32436:5;32433:35;32423:63;;32482:1;32479;32472:12;32423:63;32370:122;:::o
Swarm Source
ipfs://1597cfdb3049b4387514802f9b1586849edaa4436112ade21289a521cbf60356
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.