ERC-20
Overview
Max Total Supply
30,000,000,000 DAR
Holders
896
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$6,181,200.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
3,268 DARValue
$0.67 ( ~0.000171173296879699 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PowerfulERC20
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-23 */ /** *Submitted for verification at Etherscan.io on 2021-09-28 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity 0.8.9; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity 0.8.9; /** * @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); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity 0.8.9; /** * @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; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity 0.8.9; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 {} /** * @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 {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol pragma solidity 0.8.9; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol pragma solidity 0.8.9; /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 private immutable _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor(uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override { require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); super._mint(account, amount); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity 0.8.9; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity 0.8.9; /** * @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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity 0.8.9; /** * @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; } } // File: erc-payable-token/contracts/token/ERC1363/IERC1363.sol pragma solidity 0.8.9; /** * @title IERC1363 Interface * @dev Interface for a Payable Token contract as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363 is IERC20, IERC165 { /** * @notice Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferAndCall(address recipient, uint256 amount) external returns (bool); /** * @notice Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `recipient` * @return true unless throwing */ function transferAndCall( address recipient, uint256 amount, bytes calldata data ) external returns (bool); /** * @notice Transfer tokens from one address to another and then call `onTransferReceived` on receiver * @param sender address The address which you want to send tokens from * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferFromAndCall( address sender, address recipient, uint256 amount ) external returns (bool); /** * @notice Transfer tokens from one address to another and then call `onTransferReceived` on receiver * @param sender address The address which you want to send tokens from * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `recipient` * @return true unless throwing */ function transferFromAndCall( address sender, address recipient, uint256 amount, bytes calldata data ) external returns (bool); /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender. * 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 * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent */ function approveAndCall(address spender, uint256 amount) external returns (bool); /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender. * 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 * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format, sent in call to `spender` */ function approveAndCall( address spender, uint256 amount, bytes calldata data ) external returns (bool); } // File: erc-payable-token/contracts/token/ERC1363/IERC1363Receiver.sol pragma solidity 0.8.9; /** * @title IERC1363Receiver Interface * @dev Interface for any contract that wants to support transferAndCall or transferFromAndCall * from ERC1363 token contracts as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363Receiver { /** * @notice Handle the receipt of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the * transfer. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function * @param sender address The address which are token transferred from * @param amount uint256 The amount of tokens transferred * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` unless throwing */ function onTransferReceived( address operator, address sender, uint256 amount, bytes calldata data ) external returns (bytes4); } // File: erc-payable-token/contracts/token/ERC1363/IERC1363Spender.sol pragma solidity 0.8.9; /** * @title IERC1363Spender Interface * @dev Interface for any contract that wants to support approveAndCall * from ERC1363 token contracts as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363Spender { /** * @notice Handle the approval of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after an `approve`. This function MAY throw to revert and reject the * approval. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param sender address The address which called `approveAndCall` function * @param amount uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` unless throwing */ function onApprovalReceived( address sender, uint256 amount, bytes calldata data ) external returns (bytes4); } // File: erc-payable-token/contracts/token/ERC1363/ERC1363.sol pragma solidity 0.8.9; /** * @title ERC1363 * @dev Implementation of an ERC1363 interface */ abstract contract ERC1363 is ERC20, IERC1363, ERC165 { using Address for address; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1363).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Transfer tokens to a specified address and then execute a callback on recipient. * @param recipient The address to transfer to. * @param amount The amount to be transferred. * @return A boolean that indicates if the operation was successful. */ function transferAndCall(address recipient, uint256 amount) public virtual override returns (bool) { return transferAndCall(recipient, amount, ""); } /** * @dev Transfer tokens to a specified address and then execute a callback on recipient. * @param recipient The address to transfer to * @param amount The amount to be transferred * @param data Additional data with no specified format * @return A boolean that indicates if the operation was successful. */ function transferAndCall( address recipient, uint256 amount, bytes memory data ) public virtual override returns (bool) { transfer(recipient, amount); require(_checkAndCallTransfer(_msgSender(), recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts"); return true; } /** * @dev Transfer tokens from one address to another and then execute a callback on recipient. * @param sender The address which you want to send tokens from * @param recipient The address which you want to transfer to * @param amount The amount of tokens to be transferred * @return A boolean that indicates if the operation was successful. */ function transferFromAndCall( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { return transferFromAndCall(sender, recipient, amount, ""); } /** * @dev Transfer tokens from one address to another and then execute a callback on recipient. * @param sender The address which you want to send tokens from * @param recipient The address which you want to transfer to * @param amount The amount of tokens to be transferred * @param data Additional data with no specified format * @return A boolean that indicates if the operation was successful. */ function transferFromAndCall( address sender, address recipient, uint256 amount, bytes memory data ) public virtual override returns (bool) { transferFrom(sender, recipient, amount); require(_checkAndCallTransfer(sender, recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts"); return true; } /** * @dev Approve spender to transfer tokens and then execute a callback on recipient. * @param spender The address allowed to transfer to * @param amount The amount allowed to be transferred * @return A boolean that indicates if the operation was successful. */ function approveAndCall(address spender, uint256 amount) public virtual override returns (bool) { return approveAndCall(spender, amount, ""); } /** * @dev Approve spender to transfer tokens and then execute a callback on recipient. * @param spender The address allowed to transfer to. * @param amount The amount allowed to be transferred. * @param data Additional data with no specified format. * @return A boolean that indicates if the operation was successful. */ function approveAndCall( address spender, uint256 amount, bytes memory data ) public virtual override returns (bool) { approve(spender, amount); require(_checkAndCallApprove(spender, amount, data), "ERC1363: _checkAndCallApprove reverts"); return true; } /** * @dev Internal function to invoke `onTransferReceived` on a target address * The call is not executed if the target address is not a contract * @param sender address Representing the previous owner of the given token value * @param recipient address Target address that will receive the tokens * @param amount uint256 The amount mount of tokens to be transferred * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallTransfer( address sender, address recipient, uint256 amount, bytes memory data ) internal virtual returns (bool) { if (!recipient.isContract()) { return false; } bytes4 retval = IERC1363Receiver(recipient).onTransferReceived(_msgSender(), sender, amount, data); return (retval == IERC1363Receiver(recipient).onTransferReceived.selector); } /** * @dev Internal function to invoke `onApprovalReceived` on a target address * The call is not executed if the target address is not a contract * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallApprove( address spender, uint256 amount, bytes memory data ) internal virtual returns (bool) { if (!spender.isContract()) { return false; } bytes4 retval = IERC1363Spender(spender).onApprovalReceived(_msgSender(), amount, data); return (retval == IERC1363Spender(spender).onApprovalReceived.selector); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity 0.8.9; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: eth-token-recover/contracts/TokenRecover.sol pragma solidity 0.8.9; /** * @title TokenRecover * @dev Allows owner to recover any ERC20 sent into the contract */ contract TokenRecover is Ownable { /** * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual onlyOwner { require(IERC20(tokenAddress).transfer(owner(), tokenAmount), "TokenRecover: Tranfer failed"); } } // File: contracts/token/ERC20/behaviours/ERC20Decimals.sol pragma solidity 0.8.9; /** * @title ERC20Decimals * @dev Implementation of the ERC20Decimals. Extension of {ERC20} that adds decimals storage slot. */ abstract contract ERC20Decimals is ERC20 { uint8 private immutable _decimals; /** * @dev Sets the value of the `decimals`. This value is immutable, it can only be * set once during construction. */ constructor(uint8 decimals_) { _decimals = decimals_; } function decimals() public view virtual override returns (uint8) { return _decimals; } } // File: contracts/token/ERC20/behaviours/ERC20Mintable.sol pragma solidity 0.8.9; /** * @title ERC20Mintable * @dev Implementation of the ERC20Mintable. Extension of {ERC20} that adds a minting behaviour. */ abstract contract ERC20Mintable is ERC20 { // indicates if minting is finished bool private _mintingFinished = false; /** * @dev Emitted during finish minting */ event MintFinished(); /** * @dev Tokens can be minted only before minting finished. */ modifier canMint() { require(!_mintingFinished, "ERC20Mintable: minting is finished"); _; } /** * @return if minting is finished or not. */ function mintingFinished() external view returns (bool) { return _mintingFinished; } /** * @dev Function to mint tokens. * * WARNING: it allows everyone to mint new tokens. Access controls MUST be defined in derived contracts. * * @param account The address that will receive the minted tokens * @param amount The amount of tokens to mint */ function mint(address account, uint256 amount) external canMint { _mint(account, amount); } /** * @dev Function to stop minting new tokens. * * WARNING: it allows everyone to finish minting. Access controls MUST be defined in derived contracts. */ function finishMinting() external canMint { _finishMinting(); } /** * @dev Function to stop minting new tokens. */ function _finishMinting() internal virtual { _mintingFinished = true; emit MintFinished(); } } // File: @openzeppelin/contracts/access/IAccessControl.sol pragma solidity 0.8.9; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @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 {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @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) external; /** * @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) external; /** * @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) external; } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity 0.8.9; /** * @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); } } // File: @openzeppelin/contracts/access/AccessControl.sol pragma solidity 0.8.9; /** * @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 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()); } } } // File: contracts/access/Roles.sol pragma solidity 0.8.9; contract Roles is AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER"); bytes32 public constant BURNER_ROLE = keccak256("BURNER"); constructor() { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(BURNER_ROLE, _msgSender()); } modifier onlyMinter() { require(hasRole(MINTER_ROLE, _msgSender()), "Roles: caller does not have the MINTER role"); _; } modifier onlyBurner() { require(hasRole(BURNER_ROLE, _msgSender()), "Roles: caller does not have the BURNER role"); _; } } // File: Newly Added pragma solidity 0.8.9; /** * @title PreviousERC20ContractReferer * @dev Refer to the previous token contract */ contract PreviousERC20ContractReferer is Ownable { address private _previousContractAddress; bytes32 private _previousTokenBurnedAt; function setPreviousContractAddress(address previousTokenAddress) external onlyOwner { _previousContractAddress = previousTokenAddress; } function previousContractAddress() public view returns (address) { return _previousContractAddress; } function tokenBurnedAt() public view returns (bytes32) { return _previousTokenBurnedAt; } function setTokenBurnedAt(bytes32 txHash) external onlyOwner { _previousTokenBurnedAt = txHash; } } // File: contracts/token/ERC20/PowerfulERC20.sol pragma solidity 0.8.9; /** * @title PowerfulERC20 * @dev Implementation of the PowerfulERC20 */ contract PowerfulERC20 is ERC20Decimals, ERC20Capped, ERC20Mintable, ERC20Burnable, ERC1363, TokenRecover, Roles, PreviousERC20ContractReferer { constructor( string memory name_, string memory symbol_, uint8 decimals_, uint256 cap_, uint256 initialBalance_ ) payable ERC20(name_, symbol_) ERC20Decimals(decimals_) ERC20Capped(cap_) { // Immutable variables cannot be read during contract creation time // https://github.com/ethereum/solidity/issues/10463 require(initialBalance_ <= cap_, "ERC20Capped: cap exceeded"); ERC20._mint(_msgSender(), initialBalance_); } function decimals() public view virtual override(ERC20, ERC20Decimals) returns (uint8) { return super.decimals(); } function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, ERC1363) returns (bool) { return super.supportsInterface(interfaceId); } function burn(uint256 amount) public override onlyBurner { super.burn(amount); } function burnFrom(address account, uint256 amount) public override onlyBurner { super.burnFrom(account, amount); } /** * @dev Function to mint tokens. * * NOTE: restricting access to addresses with MINTER role. See {ERC20Mintable-mint}. * * @param account The address that will receive the minted tokens * @param amount The amount of tokens to mint */ function _mint(address account, uint256 amount) internal override(ERC20, ERC20Capped) onlyMinter { super._mint(account, amount); } /** * @dev Function to stop minting new tokens. * * NOTE: restricting access to owner only. See {ERC20Mintable-finishMinting}. */ function _finishMinting() internal override onlyOwner { super._finishMinting(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"cap_","type":"uint256"},{"internalType":"uint256","name":"initialBalance_","type":"uint256"}],"stateMutability":"payable","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":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"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":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishMinting","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"address","name":"previousTokenAddress","type":"address"}],"name":"setPreviousContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"setTokenBurnedAt","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":"tokenBurnedAt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","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":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000600560006101000a81548160ff02191690831515021790555060405162004cee38038062004cee8339818101604052810190620000449190620008a1565b81838686816003908051906020019062000060929190620005db565b50806004908051906020019062000079929190620005db565b5050508060ff1660808160ff16815250505060008111620000d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c890620009c8565b60405180910390fd5b8060a0818152505050620000fa620000ee6200021760201b60201c565b6200021f60201b60201c565b6200011e6000801b620001126200021760201b60201c565b620002e560201b60201c565b6200015f7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9620001536200021760201b60201c565b620002e560201b60201c565b620001a07f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8620001946200021760201b60201c565b620002e560201b60201c565b81811115620001e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001dd9062000a3a565b60405180910390fd5b6200020c620001fa6200021760201b60201c565b82620002fb60201b620016801760201c565b505050505062000bed565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002f782826200047460201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200036e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003659062000aac565b60405180910390fd5b62000382600083836200056660201b60201c565b806002600082825462000396919062000afd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003ed919062000afd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000454919062000b6b565b60405180910390a362000470600083836200056b60201b60201c565b5050565b6200048682826200057060201b60201c565b620005625760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005076200021760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054620005e99062000bb7565b90600052602060002090601f0160209004810192826200060d576000855562000659565b82601f106200062857805160ff191683800117855562000659565b8280016001018555821562000659579182015b82811115620006585782518255916020019190600101906200063b565b5b5090506200066891906200066c565b5090565b5b80821115620006875760008160009055506001016200066d565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006f482620006a9565b810181811067ffffffffffffffff82111715620007165762000715620006ba565b5b80604052505050565b60006200072b6200068b565b9050620007398282620006e9565b919050565b600067ffffffffffffffff8211156200075c576200075b620006ba565b5b6200076782620006a9565b9050602081019050919050565b60005b838110156200079457808201518184015260208101905062000777565b83811115620007a4576000848401525b50505050565b6000620007c1620007bb846200073e565b6200071f565b905082815260208101848484011115620007e057620007df620006a4565b5b620007ed84828562000774565b509392505050565b600082601f8301126200080d576200080c6200069f565b5b81516200081f848260208601620007aa565b91505092915050565b600060ff82169050919050565b620008408162000828565b81146200084c57600080fd5b50565b600081519050620008608162000835565b92915050565b6000819050919050565b6200087b8162000866565b81146200088757600080fd5b50565b6000815190506200089b8162000870565b92915050565b600080600080600060a08688031215620008c057620008bf62000695565b5b600086015167ffffffffffffffff811115620008e157620008e06200069a565b5b620008ef88828901620007f5565b955050602086015167ffffffffffffffff8111156200091357620009126200069a565b5b6200092188828901620007f5565b945050604062000934888289016200084f565b935050606062000947888289016200088a565b92505060806200095a888289016200088a565b9150509295509295909350565b600082825260208201905092915050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b6000620009b060158362000967565b9150620009bd8262000978565b602082019050919050565b60006020820190508181036000830152620009e381620009a1565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b600062000a2260198362000967565b915062000a2f82620009ea565b602082019050919050565b6000602082019050818103600083015262000a558162000a13565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a94601f8362000967565b915062000aa18262000a5c565b602082019050919050565b6000602082019050818103600083015262000ac78162000a85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b0a8262000866565b915062000b178362000866565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b4f5762000b4e62000ace565b5b828201905092915050565b62000b658162000866565b82525050565b600060208201905062000b82600083018462000b5a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bd057607f821691505b6020821081141562000be75762000be662000b88565b5b50919050565b60805160a0516140db62000c136000396000610a8e01526000611e3001526140db6000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063a457c2d7116100b8578063d53913931161007c578063d53913931461072b578063d547741f14610749578063d8fbe99414610765578063dd62ed3e14610795578063f2fde38b146107c557610248565b8063a457c2d71461064f578063a9059cbb1461067f578063bc3931f5146106af578063c1d34b89146106cb578063cae9ca51146106fb57610248565b80638da5cb5b116100ff5780638da5cb5b146105a757806391d14854146105c557806393fffddc146105f557806395d89b4114610613578063a217fddf1461063157610248565b806370a082311461052b578063715018a61461055b57806379cc6790146105655780637d64bcb4146105815780638980f11f1461058b57610248565b80632f2ff15d116101c9578063395093511161018d57806339509351146104775780634000aea0146104a757806340c10f19146104d757806342966c68146104f357806354a03c921461050f57610248565b80632f2ff15d146103d3578063313ce567146103ef5780633177029f1461040d578063355274ea1461043d57806336568abe1461045b57610248565b806318160ddd1161021057806318160ddd146103195780631dc5cc7c1461033757806323b872dd14610355578063248a9ca314610385578063282c51f3146103b557610248565b806301ffc9a71461024d57806305d2035b1461027d57806306fdde031461029b578063095ea7b3146102b95780631296ee62146102e9575b600080fd5b610267600480360381019061026291906129fb565b6107e1565b6040516102749190612a43565b60405180910390f35b6102856107f3565b6040516102929190612a43565b60405180910390f35b6102a361080a565b6040516102b09190612af7565b60405180910390f35b6102d360048036038101906102ce9190612bad565b61089c565b6040516102e09190612a43565b60405180910390f35b61030360048036038101906102fe9190612bad565b6108ba565b6040516103109190612a43565b60405180910390f35b6103216108de565b60405161032e9190612bfc565b60405180910390f35b61033f6108e8565b60405161034c9190612c30565b60405180910390f35b61036f600480360381019061036a9190612c4b565b6108f2565b60405161037c9190612a43565b60405180910390f35b61039f600480360381019061039a9190612cca565b6109ea565b6040516103ac9190612c30565b60405180910390f35b6103bd610a0a565b6040516103ca9190612c30565b60405180910390f35b6103ed60048036038101906103e89190612cf7565b610a2e565b005b6103f7610a57565b6040516104049190612d53565b60405180910390f35b61042760048036038101906104229190612bad565b610a66565b6040516104349190612a43565b60405180910390f35b610445610a8a565b6040516104529190612bfc565b60405180910390f35b61047560048036038101906104709190612cf7565b610ab2565b005b610491600480360381019061048c9190612bad565b610b35565b60405161049e9190612a43565b60405180910390f35b6104c160048036038101906104bc9190612ea3565b610be1565b6040516104ce9190612a43565b60405180910390f35b6104f160048036038101906104ec9190612bad565b610c4b565b005b61050d60048036038101906105089190612f12565b610ca9565b005b61052960048036038101906105249190612f3f565b610d25565b005b61054560048036038101906105409190612f3f565b610de5565b6040516105529190612bfc565b60405180910390f35b610563610e2d565b005b61057f600480360381019061057a9190612bad565b610eb5565b005b610589610f33565b005b6105a560048036038101906105a09190612bad565b610f8d565b005b6105af6110e0565b6040516105bc9190612f7b565b60405180910390f35b6105df60048036038101906105da9190612cf7565b61110a565b6040516105ec9190612a43565b60405180910390f35b6105fd611175565b60405161060a9190612f7b565b60405180910390f35b61061b61119f565b6040516106289190612af7565b60405180910390f35b610639611231565b6040516106469190612c30565b60405180910390f35b61066960048036038101906106649190612bad565b611238565b6040516106769190612a43565b60405180910390f35b61069960048036038101906106949190612bad565b611323565b6040516106a69190612a43565b60405180910390f35b6106c960048036038101906106c49190612cca565b611341565b005b6106e560048036038101906106e09190612f96565b6113c7565b6040516106f29190612a43565b60405180910390f35b61071560048036038101906107109190612ea3565b61142c565b6040516107229190612a43565b60405180910390f35b61073361148e565b6040516107409190612c30565b60405180910390f35b610763600480360381019061075e9190612cf7565b6114b2565b005b61077f600480360381019061077a9190612c4b565b6114db565b60405161078c9190612a43565b60405180910390f35b6107af60048036038101906107aa9190613019565b611501565b6040516107bc9190612bfc565b60405180910390f35b6107df60048036038101906107da9190612f3f565b611588565b005b60006107ec826117e0565b9050919050565b6000600560009054906101000a900460ff16905090565b60606003805461081990613088565b80601f016020809104026020016040519081016040528092919081815260200182805461084590613088565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108b06108a961185a565b8484611862565b6001905092915050565b60006108d6838360405180602001604052806000815250610be1565b905092915050565b6000600254905090565b6000600854905090565b60006108ff848484611a2d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094a61185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061312c565b60405180910390fd5b6109de856109d661185a565b858403611862565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b610a37826109ea565b610a4881610a4361185a565b611cae565b610a528383611d4b565b505050565b6000610a61611e2c565b905090565b6000610a8283836040518060200160405280600081525061142c565b905092915050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610aba61185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906131be565b60405180910390fd5b610b318282611e54565b5050565b6000610bd7610b4261185a565b848460016000610b5061185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd2919061320d565b611862565b6001905092915050565b6000610bed8484611323565b50610c01610bf961185a565b858585611f36565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906132d5565b60405180910390fd5b600190509392505050565b600560009054906101000a900460ff1615610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290613367565b60405180910390fd5b610ca58282612054565b5050565b610cda7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610cd561185a565b61110a565b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d10906133f9565b60405180910390fd5b610d22816120d2565b50565b610d2d61185a565b73ffffffffffffffffffffffffffffffffffffffff16610d4b6110e0565b73ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9890613465565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e3561185a565b73ffffffffffffffffffffffffffffffffffffffff16610e536110e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea090613465565b60405180910390fd5b610eb360006120e6565b565b610ee67f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610ee161185a565b61110a565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906133f9565b60405180910390fd5b610f2f82826121ac565b5050565b600560009054906101000a900460ff1615610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613367565b60405180910390fd5b610f8b612227565b565b610f9561185a565b73ffffffffffffffffffffffffffffffffffffffff16610fb36110e0565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613465565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61102d6110e0565b836040518363ffffffff1660e01b815260040161104b929190613485565b602060405180830381600087803b15801561106557600080fd5b505af1158015611079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109d91906134da565b6110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613553565b60405180910390fd5b5050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111ae90613088565b80601f01602080910402602001604051908101604052809291908181526020018280546111da90613088565b80156112275780601f106111fc57610100808354040283529160200191611227565b820191906000526020600020905b81548152906001019060200180831161120a57829003601f168201915b5050505050905090565b6000801b81565b6000806001600061124761185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e5565b60405180910390fd5b61131861130f61185a565b85858403611862565b600191505092915050565b600061133761133061185a565b8484611a2d565b6001905092915050565b61134961185a565b73ffffffffffffffffffffffffffffffffffffffff166113676110e0565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613465565b60405180910390fd5b8060088190555050565b60006113d48585856108f2565b506113e185858585611f36565b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906132d5565b60405180910390fd5b60019050949350505050565b6000611438848461089c565b506114448484846122ad565b611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90613677565b60405180910390fd5b600190509392505050565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6114bb826109ea565b6114cc816114c761185a565b611cae565b6114d68383611e54565b505050565b60006114f8848484604051806020016040528060008152506113c7565b90509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61159061185a565b73ffffffffffffffffffffffffffffffffffffffff166115ae6110e0565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90613465565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90613709565b60405180910390fd5b61167d816120e6565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613775565b60405180910390fd5b6116fc600083836123c8565b806002600082825461170e919061320d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611763919061320d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117c89190612bfc565b60405180910390a36117dc600083836123cd565b5050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118535750611852826123d2565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613807565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613899565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a209190612bfc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a949061392b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b04906139bd565b60405180910390fd5b611b188383836123c8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590613a4f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c31919061320d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c959190612bfc565b60405180910390a3611ca88484846123cd565b50505050565b611cb8828261110a565b611d4757611cdd8173ffffffffffffffffffffffffffffffffffffffff16601461244c565b611ceb8360001c602061244c565b604051602001611cfc929190613b43565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9190612af7565b60405180910390fd5b5050565b611d55828261110a565b611e285760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611dcd61185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b611e5e828261110a565b15611f325760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ed761185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611f578473ffffffffffffffffffffffffffffffffffffffff16612688565b611f64576000905061204c565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c611f8a61185a565b8887876040518563ffffffff1660e01b8152600401611fac9493929190613bd2565b602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe9190613c33565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6120857ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961208061185a565b61110a565b6120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613cd2565b60405180910390fd5b6120ce828261269b565b5050565b6120e36120dd61185a565b82612705565b50565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121bf836121ba61185a565b611501565b905081811015612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90613d64565b60405180910390fd5b6122188361221061185a565b848403611862565b6122228383612705565b505050565b61222f61185a565b73ffffffffffffffffffffffffffffffffffffffff1661224d6110e0565b73ffffffffffffffffffffffffffffffffffffffff16146122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a90613465565b60405180910390fd5b6122ab6128dc565b565b60006122ce8473ffffffffffffffffffffffffffffffffffffffff16612688565b6122db57600090506123c1565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d061230161185a565b86866040518463ffffffff1660e01b815260040161232193929190613d84565b602060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123739190613c33565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b505050565b505050565b60007fb0202a11000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612445575061244482612925565b5b9050919050565b60606000600283600261245f9190613dc2565b612469919061320d565b67ffffffffffffffff81111561248257612481612d78565b5b6040519080825280601f01601f1916602001820160405280156124b45781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106124ec576124eb613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106125505761254f613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026125909190613dc2565b61259a919061320d565b90505b600181111561263a577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106125dc576125db613e1c565b5b1a60f81b8282815181106125f3576125f2613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061263390613e4b565b905061259d565b506000841461267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590613ec1565b60405180910390fd5b8091505092915050565b600080823b905060008111915050919050565b6126a3610a8a565b816126ac6108de565b6126b6919061320d565b11156126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90613f2d565b60405180910390fd5b6127018282611680565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c90613fbf565b60405180910390fd5b612781826000836123c8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614051565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461285e9190614071565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128c39190612bfc565b60405180910390a36128d7836000846123cd565b505050565b6001600560006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d8816129a3565b81146129e357600080fd5b50565b6000813590506129f5816129cf565b92915050565b600060208284031215612a1157612a10612999565b5b6000612a1f848285016129e6565b91505092915050565b60008115159050919050565b612a3d81612a28565b82525050565b6000602082019050612a586000830184612a34565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a98578082015181840152602081019050612a7d565b83811115612aa7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac982612a5e565b612ad38185612a69565b9350612ae3818560208601612a7a565b612aec81612aad565b840191505092915050565b60006020820190508181036000830152612b118184612abe565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4482612b19565b9050919050565b612b5481612b39565b8114612b5f57600080fd5b50565b600081359050612b7181612b4b565b92915050565b6000819050919050565b612b8a81612b77565b8114612b9557600080fd5b50565b600081359050612ba781612b81565b92915050565b60008060408385031215612bc457612bc3612999565b5b6000612bd285828601612b62565b9250506020612be385828601612b98565b9150509250929050565b612bf681612b77565b82525050565b6000602082019050612c116000830184612bed565b92915050565b6000819050919050565b612c2a81612c17565b82525050565b6000602082019050612c456000830184612c21565b92915050565b600080600060608486031215612c6457612c63612999565b5b6000612c7286828701612b62565b9350506020612c8386828701612b62565b9250506040612c9486828701612b98565b9150509250925092565b612ca781612c17565b8114612cb257600080fd5b50565b600081359050612cc481612c9e565b92915050565b600060208284031215612ce057612cdf612999565b5b6000612cee84828501612cb5565b91505092915050565b60008060408385031215612d0e57612d0d612999565b5b6000612d1c85828601612cb5565b9250506020612d2d85828601612b62565b9150509250929050565b600060ff82169050919050565b612d4d81612d37565b82525050565b6000602082019050612d686000830184612d44565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612db082612aad565b810181811067ffffffffffffffff82111715612dcf57612dce612d78565b5b80604052505050565b6000612de261298f565b9050612dee8282612da7565b919050565b600067ffffffffffffffff821115612e0e57612e0d612d78565b5b612e1782612aad565b9050602081019050919050565b82818337600083830152505050565b6000612e46612e4184612df3565b612dd8565b905082815260208101848484011115612e6257612e61612d73565b5b612e6d848285612e24565b509392505050565b600082601f830112612e8a57612e89612d6e565b5b8135612e9a848260208601612e33565b91505092915050565b600080600060608486031215612ebc57612ebb612999565b5b6000612eca86828701612b62565b9350506020612edb86828701612b98565b925050604084013567ffffffffffffffff811115612efc57612efb61299e565b5b612f0886828701612e75565b9150509250925092565b600060208284031215612f2857612f27612999565b5b6000612f3684828501612b98565b91505092915050565b600060208284031215612f5557612f54612999565b5b6000612f6384828501612b62565b91505092915050565b612f7581612b39565b82525050565b6000602082019050612f906000830184612f6c565b92915050565b60008060008060808587031215612fb057612faf612999565b5b6000612fbe87828801612b62565b9450506020612fcf87828801612b62565b9350506040612fe087828801612b98565b925050606085013567ffffffffffffffff8111156130015761300061299e565b5b61300d87828801612e75565b91505092959194509250565b600080604083850312156130305761302f612999565b5b600061303e85828601612b62565b925050602061304f85828601612b62565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130a057607f821691505b602082108114156130b4576130b3613059565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613116602883612a69565b9150613121826130ba565b604082019050919050565b6000602082019050818103600083015261314581613109565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006131a8602f83612a69565b91506131b38261314c565b604082019050919050565b600060208201905081810360008301526131d78161319b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061321882612b77565b915061322383612b77565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613258576132576131de565b5b828201905092915050565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b60006132bf602683612a69565b91506132ca82613263565b604082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f45524332304d696e7461626c653a206d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613351602283612a69565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652060008201527f4255524e455220726f6c65000000000000000000000000000000000000000000602082015250565b60006133e3602b83612a69565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061344f602083612a69565b915061345a82613419565b602082019050919050565b6000602082019050818103600083015261347e81613442565b9050919050565b600060408201905061349a6000830185612f6c565b6134a76020830184612bed565b9392505050565b6134b781612a28565b81146134c257600080fd5b50565b6000815190506134d4816134ae565b92915050565b6000602082840312156134f0576134ef612999565b5b60006134fe848285016134c5565b91505092915050565b7f546f6b656e5265636f7665723a205472616e666572206661696c656400000000600082015250565b600061353d601c83612a69565b915061354882613507565b602082019050919050565b6000602082019050818103600083015261356c81613530565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135cf602583612a69565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b6000613661602583612a69565b915061366c82613605565b604082019050919050565b6000602082019050818103600083015261369081613654565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136f3602683612a69565b91506136fe82613697565b604082019050919050565b60006020820190508181036000830152613722816136e6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061375f601f83612a69565b915061376a82613729565b602082019050919050565b6000602082019050818103600083015261378e81613752565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137f1602483612a69565b91506137fc82613795565b604082019050919050565b60006020820190508181036000830152613820816137e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613883602283612a69565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613915602583612a69565b9150613920826138b9565b604082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602383612a69565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a39602683612a69565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613ab0601783613a6f565b9150613abb82613a7a565b601782019050919050565b6000613ad182612a5e565b613adb8185613a6f565b9350613aeb818560208601612a7a565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000613b2d601183613a6f565b9150613b3882613af7565b601182019050919050565b6000613b4e82613aa3565b9150613b5a8285613ac6565b9150613b6582613b20565b9150613b718284613ac6565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613ba482613b7d565b613bae8185613b88565b9350613bbe818560208601612a7a565b613bc781612aad565b840191505092915050565b6000608082019050613be76000830187612f6c565b613bf46020830186612f6c565b613c016040830185612bed565b8181036060830152613c138184613b99565b905095945050505050565b600081519050613c2d816129cf565b92915050565b600060208284031215613c4957613c48612999565b5b6000613c5784828501613c1e565b91505092915050565b7f526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652060008201527f4d494e54455220726f6c65000000000000000000000000000000000000000000602082015250565b6000613cbc602b83612a69565b9150613cc782613c60565b604082019050919050565b60006020820190508181036000830152613ceb81613caf565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613d4e602483612a69565b9150613d5982613cf2565b604082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b6000606082019050613d996000830186612f6c565b613da66020830185612bed565b8181036040830152613db88184613b99565b9050949350505050565b6000613dcd82612b77565b9150613dd883612b77565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1157613e106131de565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e5682612b77565b91506000821415613e6a57613e696131de565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613eab602083612a69565b9150613eb682613e75565b602082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b6000613f17601983612a69565b9150613f2282613ee1565b602082019050919050565b60006020820190508181036000830152613f4681613f0a565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa9602183612a69565b9150613fb482613f4d565b604082019050919050565b60006020820190508181036000830152613fd881613f9c565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061403b602283612a69565b915061404682613fdf565b604082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b600061407c82612b77565b915061408783612b77565b92508282101561409a576140996131de565b5b82820390509291505056fea2646970667358221220efe0d1b5eeeafc07f500ddce7f73293ae2e1de9fa8ac7e29fca932458f6d41f364736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000183bdac6ae9bc1c8cc0000000000000000000000000000000000000000000000060ef6b1aba6f072330000000000000000000000000000000000000000000000000000000000000000000001a4469676974616c2041737365742052696768747320546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000034441520000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063a457c2d7116100b8578063d53913931161007c578063d53913931461072b578063d547741f14610749578063d8fbe99414610765578063dd62ed3e14610795578063f2fde38b146107c557610248565b8063a457c2d71461064f578063a9059cbb1461067f578063bc3931f5146106af578063c1d34b89146106cb578063cae9ca51146106fb57610248565b80638da5cb5b116100ff5780638da5cb5b146105a757806391d14854146105c557806393fffddc146105f557806395d89b4114610613578063a217fddf1461063157610248565b806370a082311461052b578063715018a61461055b57806379cc6790146105655780637d64bcb4146105815780638980f11f1461058b57610248565b80632f2ff15d116101c9578063395093511161018d57806339509351146104775780634000aea0146104a757806340c10f19146104d757806342966c68146104f357806354a03c921461050f57610248565b80632f2ff15d146103d3578063313ce567146103ef5780633177029f1461040d578063355274ea1461043d57806336568abe1461045b57610248565b806318160ddd1161021057806318160ddd146103195780631dc5cc7c1461033757806323b872dd14610355578063248a9ca314610385578063282c51f3146103b557610248565b806301ffc9a71461024d57806305d2035b1461027d57806306fdde031461029b578063095ea7b3146102b95780631296ee62146102e9575b600080fd5b610267600480360381019061026291906129fb565b6107e1565b6040516102749190612a43565b60405180910390f35b6102856107f3565b6040516102929190612a43565b60405180910390f35b6102a361080a565b6040516102b09190612af7565b60405180910390f35b6102d360048036038101906102ce9190612bad565b61089c565b6040516102e09190612a43565b60405180910390f35b61030360048036038101906102fe9190612bad565b6108ba565b6040516103109190612a43565b60405180910390f35b6103216108de565b60405161032e9190612bfc565b60405180910390f35b61033f6108e8565b60405161034c9190612c30565b60405180910390f35b61036f600480360381019061036a9190612c4b565b6108f2565b60405161037c9190612a43565b60405180910390f35b61039f600480360381019061039a9190612cca565b6109ea565b6040516103ac9190612c30565b60405180910390f35b6103bd610a0a565b6040516103ca9190612c30565b60405180910390f35b6103ed60048036038101906103e89190612cf7565b610a2e565b005b6103f7610a57565b6040516104049190612d53565b60405180910390f35b61042760048036038101906104229190612bad565b610a66565b6040516104349190612a43565b60405180910390f35b610445610a8a565b6040516104529190612bfc565b60405180910390f35b61047560048036038101906104709190612cf7565b610ab2565b005b610491600480360381019061048c9190612bad565b610b35565b60405161049e9190612a43565b60405180910390f35b6104c160048036038101906104bc9190612ea3565b610be1565b6040516104ce9190612a43565b60405180910390f35b6104f160048036038101906104ec9190612bad565b610c4b565b005b61050d60048036038101906105089190612f12565b610ca9565b005b61052960048036038101906105249190612f3f565b610d25565b005b61054560048036038101906105409190612f3f565b610de5565b6040516105529190612bfc565b60405180910390f35b610563610e2d565b005b61057f600480360381019061057a9190612bad565b610eb5565b005b610589610f33565b005b6105a560048036038101906105a09190612bad565b610f8d565b005b6105af6110e0565b6040516105bc9190612f7b565b60405180910390f35b6105df60048036038101906105da9190612cf7565b61110a565b6040516105ec9190612a43565b60405180910390f35b6105fd611175565b60405161060a9190612f7b565b60405180910390f35b61061b61119f565b6040516106289190612af7565b60405180910390f35b610639611231565b6040516106469190612c30565b60405180910390f35b61066960048036038101906106649190612bad565b611238565b6040516106769190612a43565b60405180910390f35b61069960048036038101906106949190612bad565b611323565b6040516106a69190612a43565b60405180910390f35b6106c960048036038101906106c49190612cca565b611341565b005b6106e560048036038101906106e09190612f96565b6113c7565b6040516106f29190612a43565b60405180910390f35b61071560048036038101906107109190612ea3565b61142c565b6040516107229190612a43565b60405180910390f35b61073361148e565b6040516107409190612c30565b60405180910390f35b610763600480360381019061075e9190612cf7565b6114b2565b005b61077f600480360381019061077a9190612c4b565b6114db565b60405161078c9190612a43565b60405180910390f35b6107af60048036038101906107aa9190613019565b611501565b6040516107bc9190612bfc565b60405180910390f35b6107df60048036038101906107da9190612f3f565b611588565b005b60006107ec826117e0565b9050919050565b6000600560009054906101000a900460ff16905090565b60606003805461081990613088565b80601f016020809104026020016040519081016040528092919081815260200182805461084590613088565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108b06108a961185a565b8484611862565b6001905092915050565b60006108d6838360405180602001604052806000815250610be1565b905092915050565b6000600254905090565b6000600854905090565b60006108ff848484611a2d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094a61185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061312c565b60405180910390fd5b6109de856109d661185a565b858403611862565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b610a37826109ea565b610a4881610a4361185a565b611cae565b610a528383611d4b565b505050565b6000610a61611e2c565b905090565b6000610a8283836040518060200160405280600081525061142c565b905092915050565b60007f000000000000000000000000000000000000000183bdac6ae9bc1c8cc0000000905090565b610aba61185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906131be565b60405180910390fd5b610b318282611e54565b5050565b6000610bd7610b4261185a565b848460016000610b5061185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd2919061320d565b611862565b6001905092915050565b6000610bed8484611323565b50610c01610bf961185a565b858585611f36565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906132d5565b60405180910390fd5b600190509392505050565b600560009054906101000a900460ff1615610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290613367565b60405180910390fd5b610ca58282612054565b5050565b610cda7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610cd561185a565b61110a565b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d10906133f9565b60405180910390fd5b610d22816120d2565b50565b610d2d61185a565b73ffffffffffffffffffffffffffffffffffffffff16610d4b6110e0565b73ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9890613465565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e3561185a565b73ffffffffffffffffffffffffffffffffffffffff16610e536110e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea090613465565b60405180910390fd5b610eb360006120e6565b565b610ee67f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610ee161185a565b61110a565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906133f9565b60405180910390fd5b610f2f82826121ac565b5050565b600560009054906101000a900460ff1615610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613367565b60405180910390fd5b610f8b612227565b565b610f9561185a565b73ffffffffffffffffffffffffffffffffffffffff16610fb36110e0565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100090613465565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61102d6110e0565b836040518363ffffffff1660e01b815260040161104b929190613485565b602060405180830381600087803b15801561106557600080fd5b505af1158015611079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109d91906134da565b6110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613553565b60405180910390fd5b5050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111ae90613088565b80601f01602080910402602001604051908101604052809291908181526020018280546111da90613088565b80156112275780601f106111fc57610100808354040283529160200191611227565b820191906000526020600020905b81548152906001019060200180831161120a57829003601f168201915b5050505050905090565b6000801b81565b6000806001600061124761185a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e5565b60405180910390fd5b61131861130f61185a565b85858403611862565b600191505092915050565b600061133761133061185a565b8484611a2d565b6001905092915050565b61134961185a565b73ffffffffffffffffffffffffffffffffffffffff166113676110e0565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613465565b60405180910390fd5b8060088190555050565b60006113d48585856108f2565b506113e185858585611f36565b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906132d5565b60405180910390fd5b60019050949350505050565b6000611438848461089c565b506114448484846122ad565b611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90613677565b60405180910390fd5b600190509392505050565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b6114bb826109ea565b6114cc816114c761185a565b611cae565b6114d68383611e54565b505050565b60006114f8848484604051806020016040528060008152506113c7565b90509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61159061185a565b73ffffffffffffffffffffffffffffffffffffffff166115ae6110e0565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90613465565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90613709565b60405180910390fd5b61167d816120e6565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613775565b60405180910390fd5b6116fc600083836123c8565b806002600082825461170e919061320d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611763919061320d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117c89190612bfc565b60405180910390a36117dc600083836123cd565b5050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118535750611852826123d2565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613807565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613899565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a209190612bfc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a949061392b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b04906139bd565b60405180910390fd5b611b188383836123c8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590613a4f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c31919061320d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c959190612bfc565b60405180910390a3611ca88484846123cd565b50505050565b611cb8828261110a565b611d4757611cdd8173ffffffffffffffffffffffffffffffffffffffff16601461244c565b611ceb8360001c602061244c565b604051602001611cfc929190613b43565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9190612af7565b60405180910390fd5b5050565b611d55828261110a565b611e285760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611dcd61185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60007f0000000000000000000000000000000000000000000000000000000000000012905090565b611e5e828261110a565b15611f325760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ed761185a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611f578473ffffffffffffffffffffffffffffffffffffffff16612688565b611f64576000905061204c565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c611f8a61185a565b8887876040518563ffffffff1660e01b8152600401611fac9493929190613bd2565b602060405180830381600087803b158015611fc657600080fd5b505af1158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe9190613c33565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6120857ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961208061185a565b61110a565b6120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613cd2565b60405180910390fd5b6120ce828261269b565b5050565b6120e36120dd61185a565b82612705565b50565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121bf836121ba61185a565b611501565b905081811015612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90613d64565b60405180910390fd5b6122188361221061185a565b848403611862565b6122228383612705565b505050565b61222f61185a565b73ffffffffffffffffffffffffffffffffffffffff1661224d6110e0565b73ffffffffffffffffffffffffffffffffffffffff16146122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a90613465565b60405180910390fd5b6122ab6128dc565b565b60006122ce8473ffffffffffffffffffffffffffffffffffffffff16612688565b6122db57600090506123c1565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d061230161185a565b86866040518463ffffffff1660e01b815260040161232193929190613d84565b602060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123739190613c33565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b505050565b505050565b60007fb0202a11000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612445575061244482612925565b5b9050919050565b60606000600283600261245f9190613dc2565b612469919061320d565b67ffffffffffffffff81111561248257612481612d78565b5b6040519080825280601f01601f1916602001820160405280156124b45781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106124ec576124eb613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106125505761254f613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026125909190613dc2565b61259a919061320d565b90505b600181111561263a577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106125dc576125db613e1c565b5b1a60f81b8282815181106125f3576125f2613e1c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061263390613e4b565b905061259d565b506000841461267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590613ec1565b60405180910390fd5b8091505092915050565b600080823b905060008111915050919050565b6126a3610a8a565b816126ac6108de565b6126b6919061320d565b11156126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90613f2d565b60405180910390fd5b6127018282611680565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c90613fbf565b60405180910390fd5b612781826000836123c8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614051565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461285e9190614071565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128c39190612bfc565b60405180910390a36128d7836000846123cd565b505050565b6001600560006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d8816129a3565b81146129e357600080fd5b50565b6000813590506129f5816129cf565b92915050565b600060208284031215612a1157612a10612999565b5b6000612a1f848285016129e6565b91505092915050565b60008115159050919050565b612a3d81612a28565b82525050565b6000602082019050612a586000830184612a34565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a98578082015181840152602081019050612a7d565b83811115612aa7576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac982612a5e565b612ad38185612a69565b9350612ae3818560208601612a7a565b612aec81612aad565b840191505092915050565b60006020820190508181036000830152612b118184612abe565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4482612b19565b9050919050565b612b5481612b39565b8114612b5f57600080fd5b50565b600081359050612b7181612b4b565b92915050565b6000819050919050565b612b8a81612b77565b8114612b9557600080fd5b50565b600081359050612ba781612b81565b92915050565b60008060408385031215612bc457612bc3612999565b5b6000612bd285828601612b62565b9250506020612be385828601612b98565b9150509250929050565b612bf681612b77565b82525050565b6000602082019050612c116000830184612bed565b92915050565b6000819050919050565b612c2a81612c17565b82525050565b6000602082019050612c456000830184612c21565b92915050565b600080600060608486031215612c6457612c63612999565b5b6000612c7286828701612b62565b9350506020612c8386828701612b62565b9250506040612c9486828701612b98565b9150509250925092565b612ca781612c17565b8114612cb257600080fd5b50565b600081359050612cc481612c9e565b92915050565b600060208284031215612ce057612cdf612999565b5b6000612cee84828501612cb5565b91505092915050565b60008060408385031215612d0e57612d0d612999565b5b6000612d1c85828601612cb5565b9250506020612d2d85828601612b62565b9150509250929050565b600060ff82169050919050565b612d4d81612d37565b82525050565b6000602082019050612d686000830184612d44565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612db082612aad565b810181811067ffffffffffffffff82111715612dcf57612dce612d78565b5b80604052505050565b6000612de261298f565b9050612dee8282612da7565b919050565b600067ffffffffffffffff821115612e0e57612e0d612d78565b5b612e1782612aad565b9050602081019050919050565b82818337600083830152505050565b6000612e46612e4184612df3565b612dd8565b905082815260208101848484011115612e6257612e61612d73565b5b612e6d848285612e24565b509392505050565b600082601f830112612e8a57612e89612d6e565b5b8135612e9a848260208601612e33565b91505092915050565b600080600060608486031215612ebc57612ebb612999565b5b6000612eca86828701612b62565b9350506020612edb86828701612b98565b925050604084013567ffffffffffffffff811115612efc57612efb61299e565b5b612f0886828701612e75565b9150509250925092565b600060208284031215612f2857612f27612999565b5b6000612f3684828501612b98565b91505092915050565b600060208284031215612f5557612f54612999565b5b6000612f6384828501612b62565b91505092915050565b612f7581612b39565b82525050565b6000602082019050612f906000830184612f6c565b92915050565b60008060008060808587031215612fb057612faf612999565b5b6000612fbe87828801612b62565b9450506020612fcf87828801612b62565b9350506040612fe087828801612b98565b925050606085013567ffffffffffffffff8111156130015761300061299e565b5b61300d87828801612e75565b91505092959194509250565b600080604083850312156130305761302f612999565b5b600061303e85828601612b62565b925050602061304f85828601612b62565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130a057607f821691505b602082108114156130b4576130b3613059565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613116602883612a69565b9150613121826130ba565b604082019050919050565b6000602082019050818103600083015261314581613109565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006131a8602f83612a69565b91506131b38261314c565b604082019050919050565b600060208201905081810360008301526131d78161319b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061321882612b77565b915061322383612b77565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613258576132576131de565b5b828201905092915050565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b60006132bf602683612a69565b91506132ca82613263565b604082019050919050565b600060208201905081810360008301526132ee816132b2565b9050919050565b7f45524332304d696e7461626c653a206d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613351602283612a69565b915061335c826132f5565b604082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b7f526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652060008201527f4255524e455220726f6c65000000000000000000000000000000000000000000602082015250565b60006133e3602b83612a69565b91506133ee82613387565b604082019050919050565b60006020820190508181036000830152613412816133d6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061344f602083612a69565b915061345a82613419565b602082019050919050565b6000602082019050818103600083015261347e81613442565b9050919050565b600060408201905061349a6000830185612f6c565b6134a76020830184612bed565b9392505050565b6134b781612a28565b81146134c257600080fd5b50565b6000815190506134d4816134ae565b92915050565b6000602082840312156134f0576134ef612999565b5b60006134fe848285016134c5565b91505092915050565b7f546f6b656e5265636f7665723a205472616e666572206661696c656400000000600082015250565b600061353d601c83612a69565b915061354882613507565b602082019050919050565b6000602082019050818103600083015261356c81613530565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135cf602583612a69565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b6000613661602583612a69565b915061366c82613605565b604082019050919050565b6000602082019050818103600083015261369081613654565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136f3602683612a69565b91506136fe82613697565b604082019050919050565b60006020820190508181036000830152613722816136e6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061375f601f83612a69565b915061376a82613729565b602082019050919050565b6000602082019050818103600083015261378e81613752565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137f1602483612a69565b91506137fc82613795565b604082019050919050565b60006020820190508181036000830152613820816137e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613883602283612a69565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613915602583612a69565b9150613920826138b9565b604082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139a7602383612a69565b91506139b28261394b565b604082019050919050565b600060208201905081810360008301526139d68161399a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a39602683612a69565b9150613a44826139dd565b604082019050919050565b60006020820190508181036000830152613a6881613a2c565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613ab0601783613a6f565b9150613abb82613a7a565b601782019050919050565b6000613ad182612a5e565b613adb8185613a6f565b9350613aeb818560208601612a7a565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000613b2d601183613a6f565b9150613b3882613af7565b601182019050919050565b6000613b4e82613aa3565b9150613b5a8285613ac6565b9150613b6582613b20565b9150613b718284613ac6565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613ba482613b7d565b613bae8185613b88565b9350613bbe818560208601612a7a565b613bc781612aad565b840191505092915050565b6000608082019050613be76000830187612f6c565b613bf46020830186612f6c565b613c016040830185612bed565b8181036060830152613c138184613b99565b905095945050505050565b600081519050613c2d816129cf565b92915050565b600060208284031215613c4957613c48612999565b5b6000613c5784828501613c1e565b91505092915050565b7f526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652060008201527f4d494e54455220726f6c65000000000000000000000000000000000000000000602082015250565b6000613cbc602b83612a69565b9150613cc782613c60565b604082019050919050565b60006020820190508181036000830152613ceb81613caf565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613d4e602483612a69565b9150613d5982613cf2565b604082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b6000606082019050613d996000830186612f6c565b613da66020830185612bed565b8181036040830152613db88184613b99565b9050949350505050565b6000613dcd82612b77565b9150613dd883612b77565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1157613e106131de565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e5682612b77565b91506000821415613e6a57613e696131de565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613eab602083612a69565b9150613eb682613e75565b602082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b6000613f17601983612a69565b9150613f2282613ee1565b602082019050919050565b60006020820190508181036000830152613f4681613f0a565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa9602183612a69565b9150613fb482613f4d565b604082019050919050565b60006020820190508181036000830152613fd881613f9c565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061403b602283612a69565b915061404682613fdf565b604082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b600061407c82612b77565b915061408783612b77565b92508282101561409a576140996131de565b5b82820390509291505056fea2646970667358221220efe0d1b5eeeafc07f500ddce7f73293ae2e1de9fa8ac7e29fca932458f6d41f364736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000183bdac6ae9bc1c8cc0000000000000000000000000000000000000000000000060ef6b1aba6f072330000000000000000000000000000000000000000000000000000000000000000000001a4469676974616c2041737365742052696768747320546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000034441520000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Digital Asset Rights Token
Arg [1] : symbol_ (string): DAR
Arg [2] : decimals_ (uint8): 18
Arg [3] : cap_ (uint256): 120000000000000000000000000000
Arg [4] : initialBalance_ (uint256): 30000000000000000000000000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000000000000000000183bdac6ae9bc1c8cc0000000
Arg [4] : 000000000000000000000000000000000000000060ef6b1aba6f072330000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [6] : 4469676974616c2041737365742052696768747320546f6b656e000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4441520000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
60858:2002:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61744:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45969:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6508:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8675:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36265:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7628:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60441:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9326:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55926:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59311:57;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56311:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61607:129;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38894:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18348:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57359:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10227:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36786:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46379:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61929:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60159:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7799:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43289:94;;;:::i;:::-;;62031:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46677:77;;;:::i;:::-;;44392:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42638:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54811:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60318:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6727:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53902:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10945:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8139:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60552:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38210:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39422:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59247:57;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56703:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37524:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8377:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43538:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61744:177;61853:4;61877:36;61901:11;61877:23;:36::i;:::-;61870:43;;61744:177;;;:::o;45969:98::-;46019:4;46043:16;;;;;;;;;;;46036:23;;45969:98;:::o;6508:100::-;6562:13;6595:5;6588:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6508:100;:::o;8675:169::-;8758:4;8775:39;8784:12;:10;:12::i;:::-;8798:7;8807:6;8775:8;:39::i;:::-;8832:4;8825:11;;8675:169;;;;:::o;36265:163::-;36358:4;36382:38;36398:9;36409:6;36382:38;;;;;;;;;;;;:15;:38::i;:::-;36375:45;;36265:163;;;;:::o;7628:108::-;7689:7;7716:12;;7709:19;;7628:108;:::o;60441:103::-;60487:7;60514:22;;60507:29;;60441:103;:::o;9326:492::-;9466:4;9483:36;9493:6;9501:9;9512:6;9483:9;:36::i;:::-;9532:24;9559:11;:19;9571:6;9559:19;;;;;;;;;;;;;;;:33;9579:12;:10;:12::i;:::-;9559:33;;;;;;;;;;;;;;;;9532:60;;9631:6;9611:16;:26;;9603:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9718:57;9727:6;9735:12;:10;:12::i;:::-;9768:6;9749:16;:25;9718:8;:57::i;:::-;9806:4;9799:11;;;9326:492;;;;;:::o;55926:123::-;55992:7;56019:6;:12;56026:4;56019:12;;;;;;;;;;;:22;;;56012:29;;55926:123;;;:::o;59311:57::-;59349:19;59311:57;:::o;56311:147::-;56394:18;56407:4;56394:12;:18::i;:::-;54393:30;54404:4;54410:12;:10;:12::i;:::-;54393:10;:30::i;:::-;56425:25:::1;56436:4;56442:7;56425:10;:25::i;:::-;56311:147:::0;;;:::o;61607:129::-;61687:5;61712:16;:14;:16::i;:::-;61705:23;;61607:129;:::o;38894:157::-;38984:4;39008:35;39023:7;39032:6;39008:35;;;;;;;;;;;;:14;:35::i;:::-;39001:42;;38894:157;;;;:::o;18348:83::-;18392:7;18419:4;18412:11;;18348:83;:::o;57359:218::-;57466:12;:10;:12::i;:::-;57455:23;;:7;:23;;;57447:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;57543:26;57555:4;57561:7;57543:11;:26::i;:::-;57359:218;;:::o;10227:215::-;10315:4;10332:80;10341:12;:10;:12::i;:::-;10355:7;10401:10;10364:11;:25;10376:12;:10;:12::i;:::-;10364:25;;;;;;;;;;;;;;;:34;10390:7;10364:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10332:8;:80::i;:::-;10430:4;10423:11;;10227:215;;;;:::o;36786:342::-;36932:4;36949:27;36958:9;36969:6;36949:8;:27::i;:::-;;36995:60;37017:12;:10;:12::i;:::-;37031:9;37042:6;37050:4;36995:21;:60::i;:::-;36987:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37116:4;37109:11;;36786:342;;;;;:::o;46379:105::-;45821:16;;;;;;;;;;;45820:17;45812:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46454:22:::1;46460:7;46469:6;46454:5;:22::i;:::-;46379:105:::0;;:::o;61929:94::-;59748:34;59349:19;59769:12;:10;:12::i;:::-;59748:7;:34::i;:::-;59740:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;61997:18:::1;62008:6;61997:10;:18::i;:::-;61929:94:::0;:::o;60159:151::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60282:20:::1;60255:24;;:47;;;;;;;;;;;;;;;;;;60159:151:::0;:::o;7799:127::-;7873:7;7900:9;:18;7910:7;7900:18;;;;;;;;;;;;;;;;7893:25;;7799:127;;;:::o;43289:94::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43354:21:::1;43372:1;43354:9;:21::i;:::-;43289:94::o:0;62031:128::-;59748:34;59349:19;59769:12;:10;:12::i;:::-;59748:7;:34::i;:::-;59740:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;62120:31:::1;62135:7;62144:6;62120:14;:31::i;:::-;62031:128:::0;;:::o;46677:77::-;45821:16;;;;;;;;;;;45820:17;45812:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46730:16:::1;:14;:16::i;:::-;46677:77::o:0;44392:201::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44507:12:::1;44500:29;;;44530:7;:5;:7::i;:::-;44539:11;44500:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44492:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44392:201:::0;;:::o;42638:87::-;42684:7;42711:6;;;;;;;;;;;42704:13;;42638:87;:::o;54811:139::-;54889:4;54913:6;:12;54920:4;54913:12;;;;;;;;;;;:20;;:29;54934:7;54913:29;;;;;;;;;;;;;;;;;;;;;;;;;54906:36;;54811:139;;;;:::o;60318:115::-;60374:7;60401:24;;;;;;;;;;;60394:31;;60318:115;:::o;6727:104::-;6783:13;6816:7;6809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6727:104;:::o;53902:49::-;53947:4;53902:49;;;:::o;10945:413::-;11038:4;11055:24;11082:11;:25;11094:12;:10;:12::i;:::-;11082:25;;;;;;;;;;;;;;;:34;11108:7;11082:34;;;;;;;;;;;;;;;;11055:61;;11155:15;11135:16;:35;;11127:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11248:67;11257:12;:10;:12::i;:::-;11271:7;11299:15;11280:16;:34;11248:8;:67::i;:::-;11346:4;11339:11;;;10945:413;;;;:::o;8139:175::-;8225:4;8242:42;8252:12;:10;:12::i;:::-;8266:9;8277:6;8242:9;:42::i;:::-;8302:4;8295:11;;8139:175;;;;:::o;60552:111::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60649:6:::1;60624:22;:31;;;;60552:111:::0;:::o;38210:377::-;38385:4;38402:39;38415:6;38423:9;38434:6;38402:12;:39::i;:::-;;38460:54;38482:6;38490:9;38501:6;38509:4;38460:21;:54::i;:::-;38452:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38575:4;38568:11;;38210:377;;;;;;:::o;39422:318::-;39565:4;39582:24;39590:7;39599:6;39582:7;:24::i;:::-;;39625:43;39646:7;39655:6;39663:4;39625:20;:43::i;:::-;39617:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;39728:4;39721:11;;39422:318;;;;;:::o;59247:57::-;59285:19;59247:57;:::o;56703:149::-;56787:18;56800:4;56787:12;:18::i;:::-;54393:30;54404:4;54410:12;:10;:12::i;:::-;54393:10;:30::i;:::-;56818:26:::1;56830:4;56836:7;56818:11;:26::i;:::-;56703:149:::0;;;:::o;37524:229::-;37671:4;37695:50;37715:6;37723:9;37734:6;37695:50;;;;;;;;;;;;:19;:50::i;:::-;37688:57;;37524:229;;;;;:::o;8377:151::-;8466:7;8493:11;:18;8505:5;8493:18;;;;;;;;;;;;;;;:27;8512:7;8493:27;;;;;;;;;;;;;;;;8486:34;;8377:151;;;;:::o;43538:192::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43647:1:::1;43627:22;;:8;:22;;;;43619:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43703:19;43713:8;43703:9;:19::i;:::-;43538:192:::0;:::o;12868:399::-;12971:1;12952:21;;:7;:21;;;;12944:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13022:49;13051:1;13055:7;13064:6;13022:20;:49::i;:::-;13100:6;13084:12;;:22;;;;;;;:::i;:::-;;;;;;;;13139:6;13117:9;:18;13127:7;13117:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13182:7;13161:37;;13178:1;13161:37;;;13191:6;13161:37;;;;;;:::i;:::-;;;;;;;;13211:48;13239:1;13243:7;13252:6;13211:19;:48::i;:::-;12868:399;;:::o;54515:204::-;54600:4;54639:32;54624:47;;;:11;:47;;;;:87;;;;54675:36;54699:11;54675:23;:36::i;:::-;54624:87;54617:94;;54515:204;;;:::o;4222:98::-;4275:7;4302:10;4295:17;;4222:98;:::o;14629:380::-;14782:1;14765:19;;:5;:19;;;;14757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14863:1;14844:21;;:7;:21;;;;14836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14947:6;14917:11;:18;14929:5;14917:18;;;;;;;;;;;;;;;:27;14936:7;14917:27;;;;;;;;;;;;;;;:36;;;;14985:7;14969:32;;14978:5;14969:32;;;14994:6;14969:32;;;;;;:::i;:::-;;;;;;;;14629:380;;;:::o;11848:733::-;12006:1;11988:20;;:6;:20;;;;11980:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12090:1;12069:23;;:9;:23;;;;12061:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12145:47;12166:6;12174:9;12185:6;12145:20;:47::i;:::-;12205:21;12229:9;:17;12239:6;12229:17;;;;;;;;;;;;;;;;12205:41;;12282:6;12265:13;:23;;12257:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12403:6;12387:13;:22;12367:9;:17;12377:6;12367:17;;;;;;;;;;;;;;;:42;;;;12455:6;12431:9;:20;12441:9;12431:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12496:9;12479:35;;12488:6;12479:35;;;12507:6;12479:35;;;;;;:::i;:::-;;;;;;;;12527:46;12547:6;12555:9;12566:6;12527:19;:46::i;:::-;11969:612;11848:733;;;:::o;55240:497::-;55321:22;55329:4;55335:7;55321;:22::i;:::-;55316:414;;55509:41;55537:7;55509:41;;55547:2;55509:19;:41::i;:::-;55623:38;55651:4;55643:13;;55658:2;55623:19;:38::i;:::-;55414:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55360:358;;;;;;;;;;;:::i;:::-;;;;;;;;55316:414;55240:497;;:::o;58663:229::-;58738:22;58746:4;58752:7;58738;:22::i;:::-;58733:152;;58809:4;58777:6;:12;58784:4;58777:12;;;;;;;;;;;:20;;:29;58798:7;58777:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;58860:12;:10;:12::i;:::-;58833:40;;58851:7;58833:40;;58845:4;58833:40;;;;;;;;;;58733:152;58663:229;;:::o;45140:100::-;45198:5;45223:9;45216:16;;45140:100;:::o;58900:230::-;58975:22;58983:4;58989:7;58975;:22::i;:::-;58971:152;;;59046:5;59014:6;:12;59021:4;59014:12;;;;;;;;;;;:20;;:29;59035:7;59014:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;59098:12;:10;:12::i;:::-;59071:40;;59089:7;59071:40;;59083:4;59071:40;;;;;;;;;;58971:152;58900:230;;:::o;40306:456::-;40476:4;40498:22;:9;:20;;;:22::i;:::-;40493:68;;40544:5;40537:12;;;;40493:68;40571:13;40604:9;40587:46;;;40634:12;:10;:12::i;:::-;40648:6;40656;40664:4;40587:82;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40571:98;;40698:55;;;40688:65;;;:6;:65;;;;40680:74;;;40306:456;;;;;;;:::o;62451:144::-;59599:34;59285:19;59620:12;:10;:12::i;:::-;59599:7;:34::i;:::-;59591:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;62559:28:::1;62571:7;62580:6;62559:11;:28::i;:::-;62451:144:::0;;:::o;16959:91::-;17015:27;17021:12;:10;:12::i;:::-;17035:6;17015:5;:27::i;:::-;16959:91;:::o;43738:173::-;43794:16;43813:6;;;;;;;;;;;43794:25;;43839:8;43830:6;;:17;;;;;;;;;;;;;;;;;;43894:8;43863:40;;43884:8;43863:40;;;;;;;;;;;;43783:128;43738:173;:::o;17369:368::-;17446:24;17473:32;17483:7;17492:12;:10;:12::i;:::-;17473:9;:32::i;:::-;17446:59;;17544:6;17524:16;:26;;17516:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17627:58;17636:7;17645:12;:10;:12::i;:::-;17678:6;17659:16;:25;17627:8;:58::i;:::-;17707:22;17713:7;17722:6;17707:5;:22::i;:::-;17435:302;17369:368;;:::o;62762:95::-;42869:12;:10;:12::i;:::-;42858:23;;:7;:5;:7::i;:::-;:23;;;42850:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62827:22:::1;:20;:22::i;:::-;62762:95::o:0;41222:412::-;41364:4;41386:20;:7;:18;;;:20::i;:::-;41381:66;;41430:5;41423:12;;;;41381:66;41457:13;41489:7;41473:43;;;41517:12;:10;:12::i;:::-;41531:6;41539:4;41473:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41457:87;;41573:52;;;41563:62;;;:6;:62;;;;41555:71;;;41222:412;;;;;;:::o;15609:125::-;;;;:::o;16338:124::-;;;;:::o;35751:215::-;35853:4;35892:26;35877:41;;;:11;:41;;;;:81;;;;35922:36;35946:11;35922:23;:36::i;:::-;35877:81;35870:88;;35751:215;;;:::o;51543:451::-;51618:13;51644:19;51689:1;51680:6;51676:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;51666:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51644:47;;51702:15;:6;51709:1;51702:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;51728;:6;51735:1;51728:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;51759:9;51784:1;51775:6;51771:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;51759:26;;51754:135;51791:1;51787;:5;51754:135;;;51826:12;51847:3;51839:5;:11;51826:25;;;;;;;:::i;:::-;;;;;51814:6;51821:1;51814:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;51876:1;51866:11;;;;;51794:3;;;;:::i;:::-;;;51754:135;;;;51916:1;51907:5;:10;51899:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51979:6;51965:21;;;51543:451;;;;:::o;19468:387::-;19528:4;19736:12;19803:7;19791:20;19783:28;;19846:1;19839:4;:8;19832:15;;;19468:387;;;:::o;18489:207::-;18614:5;:3;:5::i;:::-;18604:6;18582:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:37;;18574:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:28;18672:7;18681:6;18660:11;:28::i;:::-;18489:207;;:::o;13600:591::-;13703:1;13684:21;;:7;:21;;;;13676:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13756:49;13777:7;13794:1;13798:6;13756:20;:49::i;:::-;13818:22;13843:9;:18;13853:7;13843:18;;;;;;;;;;;;;;;;13818:43;;13898:6;13880:14;:24;;13872:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14017:6;14000:14;:23;13979:9;:18;13989:7;13979:18;;;;;;;;;;;;;;;:44;;;;14061:6;14045:12;;:22;;;;;;;:::i;:::-;;;;;;;;14111:1;14085:37;;14094:7;14085:37;;;14115:6;14085:37;;;;;;:::i;:::-;;;;;;;;14135:48;14155:7;14172:1;14176:6;14135:19;:48::i;:::-;13665:526;13600:591;;:::o;46830:117::-;46903:4;46884:16;;:23;;;;;;;;;;;;;;;;;;46925:14;;;;;;;;;;46830:117::o;28444:157::-;28529:4;28568:25;28553:40;;;:11;:40;;;;28546:47;;28444:157;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:126::-;2945:7;2985:42;2978:5;2974:54;2963:65;;2908:126;;;:::o;3040:96::-;3077:7;3106:24;3124:5;3106:24;:::i;:::-;3095:35;;3040:96;;;:::o;3142:122::-;3215:24;3233:5;3215:24;:::i;:::-;3208:5;3205:35;3195:63;;3254:1;3251;3244:12;3195:63;3142:122;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:77::-;3452:7;3481:5;3470:16;;3415:77;;;:::o;3498:122::-;3571:24;3589:5;3571:24;:::i;:::-;3564:5;3561:35;3551:63;;3610:1;3607;3600:12;3551:63;3498:122;:::o;3626:139::-;3672:5;3710:6;3697:20;3688:29;;3726:33;3753:5;3726:33;:::i;:::-;3626:139;;;;:::o;3771:474::-;3839:6;3847;3896:2;3884:9;3875:7;3871:23;3867:32;3864:119;;;3902:79;;:::i;:::-;3864:119;4022:1;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3993:117;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3771:474;;;;;:::o;4251:118::-;4338:24;4356:5;4338:24;:::i;:::-;4333:3;4326:37;4251:118;;:::o;4375:222::-;4468:4;4506:2;4495:9;4491:18;4483:26;;4519:71;4587:1;4576:9;4572:17;4563:6;4519:71;:::i;:::-;4375:222;;;;:::o;4603:77::-;4640:7;4669:5;4658:16;;4603:77;;;:::o;4686:118::-;4773:24;4791:5;4773:24;:::i;:::-;4768:3;4761:37;4686:118;;:::o;4810:222::-;4903:4;4941:2;4930:9;4926:18;4918:26;;4954:71;5022:1;5011:9;5007:17;4998:6;4954:71;:::i;:::-;4810:222;;;;:::o;5038:619::-;5115:6;5123;5131;5180:2;5168:9;5159:7;5155:23;5151:32;5148:119;;;5186:79;;:::i;:::-;5148:119;5306:1;5331:53;5376:7;5367:6;5356:9;5352:22;5331:53;:::i;:::-;5321:63;;5277:117;5433:2;5459:53;5504:7;5495:6;5484:9;5480:22;5459:53;:::i;:::-;5449:63;;5404:118;5561:2;5587:53;5632:7;5623:6;5612:9;5608:22;5587:53;:::i;:::-;5577:63;;5532:118;5038:619;;;;;:::o;5663:122::-;5736:24;5754:5;5736:24;:::i;:::-;5729:5;5726:35;5716:63;;5775:1;5772;5765:12;5716:63;5663:122;:::o;5791:139::-;5837:5;5875:6;5862:20;5853:29;;5891:33;5918:5;5891:33;:::i;:::-;5791:139;;;;:::o;5936:329::-;5995:6;6044:2;6032:9;6023:7;6019:23;6015:32;6012:119;;;6050:79;;:::i;:::-;6012:119;6170:1;6195:53;6240:7;6231:6;6220:9;6216:22;6195:53;:::i;:::-;6185:63;;6141:117;5936:329;;;;:::o;6271:474::-;6339:6;6347;6396:2;6384:9;6375:7;6371:23;6367:32;6364:119;;;6402:79;;:::i;:::-;6364:119;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6649:2;6675:53;6720:7;6711:6;6700:9;6696:22;6675:53;:::i;:::-;6665:63;;6620:118;6271:474;;;;;:::o;6751:86::-;6786:7;6826:4;6819:5;6815:16;6804:27;;6751:86;;;:::o;6843:112::-;6926:22;6942:5;6926:22;:::i;:::-;6921:3;6914:35;6843:112;;:::o;6961:214::-;7050:4;7088:2;7077:9;7073:18;7065:26;;7101:67;7165:1;7154:9;7150:17;7141:6;7101:67;:::i;:::-;6961:214;;;;:::o;7181:117::-;7290:1;7287;7280:12;7304:117;7413:1;7410;7403:12;7427:180;7475:77;7472:1;7465:88;7572:4;7569:1;7562:15;7596:4;7593:1;7586:15;7613:281;7696:27;7718:4;7696:27;:::i;:::-;7688:6;7684:40;7826:6;7814:10;7811:22;7790:18;7778:10;7775:34;7772:62;7769:88;;;7837:18;;:::i;:::-;7769:88;7877:10;7873:2;7866:22;7656:238;7613:281;;:::o;7900:129::-;7934:6;7961:20;;:::i;:::-;7951:30;;7990:33;8018:4;8010:6;7990:33;:::i;:::-;7900:129;;;:::o;8035:307::-;8096:4;8186:18;8178:6;8175:30;8172:56;;;8208:18;;:::i;:::-;8172:56;8246:29;8268:6;8246:29;:::i;:::-;8238:37;;8330:4;8324;8320:15;8312:23;;8035:307;;;:::o;8348:154::-;8432:6;8427:3;8422;8409:30;8494:1;8485:6;8480:3;8476:16;8469:27;8348:154;;;:::o;8508:410::-;8585:5;8610:65;8626:48;8667:6;8626:48;:::i;:::-;8610:65;:::i;:::-;8601:74;;8698:6;8691:5;8684:21;8736:4;8729:5;8725:16;8774:3;8765:6;8760:3;8756:16;8753:25;8750:112;;;8781:79;;:::i;:::-;8750:112;8871:41;8905:6;8900:3;8895;8871:41;:::i;:::-;8591:327;8508:410;;;;;:::o;8937:338::-;8992:5;9041:3;9034:4;9026:6;9022:17;9018:27;9008:122;;9049:79;;:::i;:::-;9008:122;9166:6;9153:20;9191:78;9265:3;9257:6;9250:4;9242:6;9238:17;9191:78;:::i;:::-;9182:87;;8998:277;8937:338;;;;:::o;9281:797::-;9367:6;9375;9383;9432:2;9420:9;9411:7;9407:23;9403:32;9400:119;;;9438:79;;:::i;:::-;9400:119;9558:1;9583:53;9628:7;9619:6;9608:9;9604:22;9583:53;:::i;:::-;9573:63;;9529:117;9685:2;9711:53;9756:7;9747:6;9736:9;9732:22;9711:53;:::i;:::-;9701:63;;9656:118;9841:2;9830:9;9826:18;9813:32;9872:18;9864:6;9861:30;9858:117;;;9894:79;;:::i;:::-;9858:117;9999:62;10053:7;10044:6;10033:9;10029:22;9999:62;:::i;:::-;9989:72;;9784:287;9281:797;;;;;:::o;10084:329::-;10143:6;10192:2;10180:9;10171:7;10167:23;10163:32;10160:119;;;10198:79;;:::i;:::-;10160:119;10318:1;10343:53;10388:7;10379:6;10368:9;10364:22;10343:53;:::i;:::-;10333:63;;10289:117;10084:329;;;;:::o;10419:::-;10478:6;10527:2;10515:9;10506:7;10502:23;10498:32;10495:119;;;10533:79;;:::i;:::-;10495:119;10653:1;10678:53;10723:7;10714:6;10703:9;10699:22;10678:53;:::i;:::-;10668:63;;10624:117;10419:329;;;;:::o;10754:118::-;10841:24;10859:5;10841:24;:::i;:::-;10836:3;10829:37;10754:118;;:::o;10878:222::-;10971:4;11009:2;10998:9;10994:18;10986:26;;11022:71;11090:1;11079:9;11075:17;11066:6;11022:71;:::i;:::-;10878:222;;;;:::o;11106:943::-;11201:6;11209;11217;11225;11274:3;11262:9;11253:7;11249:23;11245:33;11242:120;;;11281:79;;:::i;:::-;11242:120;11401:1;11426:53;11471:7;11462:6;11451:9;11447:22;11426:53;:::i;:::-;11416:63;;11372:117;11528:2;11554:53;11599:7;11590:6;11579:9;11575:22;11554:53;:::i;:::-;11544:63;;11499:118;11656:2;11682:53;11727:7;11718:6;11707:9;11703:22;11682:53;:::i;:::-;11672:63;;11627:118;11812:2;11801:9;11797:18;11784:32;11843:18;11835:6;11832:30;11829:117;;;11865:79;;:::i;:::-;11829:117;11970:62;12024:7;12015:6;12004:9;12000:22;11970:62;:::i;:::-;11960:72;;11755:287;11106:943;;;;;;;:::o;12055:474::-;12123:6;12131;12180:2;12168:9;12159:7;12155:23;12151:32;12148:119;;;12186:79;;:::i;:::-;12148:119;12306:1;12331:53;12376:7;12367:6;12356:9;12352:22;12331:53;:::i;:::-;12321:63;;12277:117;12433:2;12459:53;12504:7;12495:6;12484:9;12480:22;12459:53;:::i;:::-;12449:63;;12404:118;12055:474;;;;;:::o;12535:180::-;12583:77;12580:1;12573:88;12680:4;12677:1;12670:15;12704:4;12701:1;12694:15;12721:320;12765:6;12802:1;12796:4;12792:12;12782:22;;12849:1;12843:4;12839:12;12870:18;12860:81;;12926:4;12918:6;12914:17;12904:27;;12860:81;12988:2;12980:6;12977:14;12957:18;12954:38;12951:84;;;13007:18;;:::i;:::-;12951:84;12772:269;12721:320;;;:::o;13047:227::-;13187:34;13183:1;13175:6;13171:14;13164:58;13256:10;13251:2;13243:6;13239:15;13232:35;13047:227;:::o;13280:366::-;13422:3;13443:67;13507:2;13502:3;13443:67;:::i;:::-;13436:74;;13519:93;13608:3;13519:93;:::i;:::-;13637:2;13632:3;13628:12;13621:19;;13280:366;;;:::o;13652:419::-;13818:4;13856:2;13845:9;13841:18;13833:26;;13905:9;13899:4;13895:20;13891:1;13880:9;13876:17;13869:47;13933:131;14059:4;13933:131;:::i;:::-;13925:139;;13652:419;;;:::o;14077:234::-;14217:34;14213:1;14205:6;14201:14;14194:58;14286:17;14281:2;14273:6;14269:15;14262:42;14077:234;:::o;14317:366::-;14459:3;14480:67;14544:2;14539:3;14480:67;:::i;:::-;14473:74;;14556:93;14645:3;14556:93;:::i;:::-;14674:2;14669:3;14665:12;14658:19;;14317:366;;;:::o;14689:419::-;14855:4;14893:2;14882:9;14878:18;14870:26;;14942:9;14936:4;14932:20;14928:1;14917:9;14913:17;14906:47;14970:131;15096:4;14970:131;:::i;:::-;14962:139;;14689:419;;;:::o;15114:180::-;15162:77;15159:1;15152:88;15259:4;15256:1;15249:15;15283:4;15280:1;15273:15;15300:305;15340:3;15359:20;15377:1;15359:20;:::i;:::-;15354:25;;15393:20;15411:1;15393:20;:::i;:::-;15388:25;;15547:1;15479:66;15475:74;15472:1;15469:81;15466:107;;;15553:18;;:::i;:::-;15466:107;15597:1;15594;15590:9;15583:16;;15300:305;;;;:::o;15611:225::-;15751:34;15747:1;15739:6;15735:14;15728:58;15820:8;15815:2;15807:6;15803:15;15796:33;15611:225;:::o;15842:366::-;15984:3;16005:67;16069:2;16064:3;16005:67;:::i;:::-;15998:74;;16081:93;16170:3;16081:93;:::i;:::-;16199:2;16194:3;16190:12;16183:19;;15842:366;;;:::o;16214:419::-;16380:4;16418:2;16407:9;16403:18;16395:26;;16467:9;16461:4;16457:20;16453:1;16442:9;16438:17;16431:47;16495:131;16621:4;16495:131;:::i;:::-;16487:139;;16214:419;;;:::o;16639:221::-;16779:34;16775:1;16767:6;16763:14;16756:58;16848:4;16843:2;16835:6;16831:15;16824:29;16639:221;:::o;16866:366::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:419::-;17404:4;17442:2;17431:9;17427:18;17419:26;;17491:9;17485:4;17481:20;17477:1;17466:9;17462:17;17455:47;17519:131;17645:4;17519:131;:::i;:::-;17511:139;;17238:419;;;:::o;17663:230::-;17803:34;17799:1;17791:6;17787:14;17780:58;17872:13;17867:2;17859:6;17855:15;17848:38;17663:230;:::o;17899:366::-;18041:3;18062:67;18126:2;18121:3;18062:67;:::i;:::-;18055:74;;18138:93;18227:3;18138:93;:::i;:::-;18256:2;18251:3;18247:12;18240:19;;17899:366;;;:::o;18271:419::-;18437:4;18475:2;18464:9;18460:18;18452:26;;18524:9;18518:4;18514:20;18510:1;18499:9;18495:17;18488:47;18552:131;18678:4;18552:131;:::i;:::-;18544:139;;18271:419;;;:::o;18696:182::-;18836:34;18832:1;18824:6;18820:14;18813:58;18696:182;:::o;18884:366::-;19026:3;19047:67;19111:2;19106:3;19047:67;:::i;:::-;19040:74;;19123:93;19212:3;19123:93;:::i;:::-;19241:2;19236:3;19232:12;19225:19;;18884:366;;;:::o;19256:419::-;19422:4;19460:2;19449:9;19445:18;19437:26;;19509:9;19503:4;19499:20;19495:1;19484:9;19480:17;19473:47;19537:131;19663:4;19537:131;:::i;:::-;19529:139;;19256:419;;;:::o;19681:332::-;19802:4;19840:2;19829:9;19825:18;19817:26;;19853:71;19921:1;19910:9;19906:17;19897:6;19853:71;:::i;:::-;19934:72;20002:2;19991:9;19987:18;19978:6;19934:72;:::i;:::-;19681:332;;;;;:::o;20019:116::-;20089:21;20104:5;20089:21;:::i;:::-;20082:5;20079:32;20069:60;;20125:1;20122;20115:12;20069:60;20019:116;:::o;20141:137::-;20195:5;20226:6;20220:13;20211:22;;20242:30;20266:5;20242:30;:::i;:::-;20141:137;;;;:::o;20284:345::-;20351:6;20400:2;20388:9;20379:7;20375:23;20371:32;20368:119;;;20406:79;;:::i;:::-;20368:119;20526:1;20551:61;20604:7;20595:6;20584:9;20580:22;20551:61;:::i;:::-;20541:71;;20497:125;20284:345;;;;:::o;20635:178::-;20775:30;20771:1;20763:6;20759:14;20752:54;20635:178;:::o;20819:366::-;20961:3;20982:67;21046:2;21041:3;20982:67;:::i;:::-;20975:74;;21058:93;21147:3;21058:93;:::i;:::-;21176:2;21171:3;21167:12;21160:19;;20819:366;;;:::o;21191:419::-;21357:4;21395:2;21384:9;21380:18;21372:26;;21444:9;21438:4;21434:20;21430:1;21419:9;21415:17;21408:47;21472:131;21598:4;21472:131;:::i;:::-;21464:139;;21191:419;;;:::o;21616:224::-;21756:34;21752:1;21744:6;21740:14;21733:58;21825:7;21820:2;21812:6;21808:15;21801:32;21616:224;:::o;21846:366::-;21988:3;22009:67;22073:2;22068:3;22009:67;:::i;:::-;22002:74;;22085:93;22174:3;22085:93;:::i;:::-;22203:2;22198:3;22194:12;22187:19;;21846:366;;;:::o;22218:419::-;22384:4;22422:2;22411:9;22407:18;22399:26;;22471:9;22465:4;22461:20;22457:1;22446:9;22442:17;22435:47;22499:131;22625:4;22499:131;:::i;:::-;22491:139;;22218:419;;;:::o;22643:224::-;22783:34;22779:1;22771:6;22767:14;22760:58;22852:7;22847:2;22839:6;22835:15;22828:32;22643:224;:::o;22873:366::-;23015:3;23036:67;23100:2;23095:3;23036:67;:::i;:::-;23029:74;;23112:93;23201:3;23112:93;:::i;:::-;23230:2;23225:3;23221:12;23214:19;;22873:366;;;:::o;23245:419::-;23411:4;23449:2;23438:9;23434:18;23426:26;;23498:9;23492:4;23488:20;23484:1;23473:9;23469:17;23462:47;23526:131;23652:4;23526:131;:::i;:::-;23518:139;;23245:419;;;:::o;23670:225::-;23810:34;23806:1;23798:6;23794:14;23787:58;23879:8;23874:2;23866:6;23862:15;23855:33;23670:225;:::o;23901:366::-;24043:3;24064:67;24128:2;24123:3;24064:67;:::i;:::-;24057:74;;24140:93;24229:3;24140:93;:::i;:::-;24258:2;24253:3;24249:12;24242:19;;23901:366;;;:::o;24273:419::-;24439:4;24477:2;24466:9;24462:18;24454:26;;24526:9;24520:4;24516:20;24512:1;24501:9;24497:17;24490:47;24554:131;24680:4;24554:131;:::i;:::-;24546:139;;24273:419;;;:::o;24698:181::-;24838:33;24834:1;24826:6;24822:14;24815:57;24698:181;:::o;24885:366::-;25027:3;25048:67;25112:2;25107:3;25048:67;:::i;:::-;25041:74;;25124:93;25213:3;25124:93;:::i;:::-;25242:2;25237:3;25233:12;25226:19;;24885:366;;;:::o;25257:419::-;25423:4;25461:2;25450:9;25446:18;25438:26;;25510:9;25504:4;25500:20;25496:1;25485:9;25481:17;25474:47;25538:131;25664:4;25538:131;:::i;:::-;25530:139;;25257:419;;;:::o;25682:223::-;25822:34;25818:1;25810:6;25806:14;25799:58;25891:6;25886:2;25878:6;25874:15;25867:31;25682:223;:::o;25911:366::-;26053:3;26074:67;26138:2;26133:3;26074:67;:::i;:::-;26067:74;;26150:93;26239:3;26150:93;:::i;:::-;26268:2;26263:3;26259:12;26252:19;;25911:366;;;:::o;26283:419::-;26449:4;26487:2;26476:9;26472:18;26464:26;;26536:9;26530:4;26526:20;26522:1;26511:9;26507:17;26500:47;26564:131;26690:4;26564:131;:::i;:::-;26556:139;;26283:419;;;:::o;26708:221::-;26848:34;26844:1;26836:6;26832:14;26825:58;26917:4;26912:2;26904:6;26900:15;26893:29;26708:221;:::o;26935:366::-;27077:3;27098:67;27162:2;27157:3;27098:67;:::i;:::-;27091:74;;27174:93;27263:3;27174:93;:::i;:::-;27292:2;27287:3;27283:12;27276:19;;26935:366;;;:::o;27307:419::-;27473:4;27511:2;27500:9;27496:18;27488:26;;27560:9;27554:4;27550:20;27546:1;27535:9;27531:17;27524:47;27588:131;27714:4;27588:131;:::i;:::-;27580:139;;27307:419;;;:::o;27732:224::-;27872:34;27868:1;27860:6;27856:14;27849:58;27941:7;27936:2;27928:6;27924:15;27917:32;27732:224;:::o;27962:366::-;28104:3;28125:67;28189:2;28184:3;28125:67;:::i;:::-;28118:74;;28201:93;28290:3;28201:93;:::i;:::-;28319:2;28314:3;28310:12;28303:19;;27962:366;;;:::o;28334:419::-;28500:4;28538:2;28527:9;28523:18;28515:26;;28587:9;28581:4;28577:20;28573:1;28562:9;28558:17;28551:47;28615:131;28741:4;28615:131;:::i;:::-;28607:139;;28334:419;;;:::o;28759:222::-;28899:34;28895:1;28887:6;28883:14;28876:58;28968:5;28963:2;28955:6;28951:15;28944:30;28759:222;:::o;28987:366::-;29129:3;29150:67;29214:2;29209:3;29150:67;:::i;:::-;29143:74;;29226:93;29315:3;29226:93;:::i;:::-;29344:2;29339:3;29335:12;29328:19;;28987:366;;;:::o;29359:419::-;29525:4;29563:2;29552:9;29548:18;29540:26;;29612:9;29606:4;29602:20;29598:1;29587:9;29583:17;29576:47;29640:131;29766:4;29640:131;:::i;:::-;29632:139;;29359:419;;;:::o;29784:225::-;29924:34;29920:1;29912:6;29908:14;29901:58;29993:8;29988:2;29980:6;29976:15;29969:33;29784:225;:::o;30015:366::-;30157:3;30178:67;30242:2;30237:3;30178:67;:::i;:::-;30171:74;;30254:93;30343:3;30254:93;:::i;:::-;30372:2;30367:3;30363:12;30356:19;;30015:366;;;:::o;30387:419::-;30553:4;30591:2;30580:9;30576:18;30568:26;;30640:9;30634:4;30630:20;30626:1;30615:9;30611:17;30604:47;30668:131;30794:4;30668:131;:::i;:::-;30660:139;;30387:419;;;:::o;30812:148::-;30914:11;30951:3;30936:18;;30812:148;;;;:::o;30966:173::-;31106:25;31102:1;31094:6;31090:14;31083:49;30966:173;:::o;31145:402::-;31305:3;31326:85;31408:2;31403:3;31326:85;:::i;:::-;31319:92;;31420:93;31509:3;31420:93;:::i;:::-;31538:2;31533:3;31529:12;31522:19;;31145:402;;;:::o;31553:377::-;31659:3;31687:39;31720:5;31687:39;:::i;:::-;31742:89;31824:6;31819:3;31742:89;:::i;:::-;31735:96;;31840:52;31885:6;31880:3;31873:4;31866:5;31862:16;31840:52;:::i;:::-;31917:6;31912:3;31908:16;31901:23;;31663:267;31553:377;;;;:::o;31936:167::-;32076:19;32072:1;32064:6;32060:14;32053:43;31936:167;:::o;32109:402::-;32269:3;32290:85;32372:2;32367:3;32290:85;:::i;:::-;32283:92;;32384:93;32473:3;32384:93;:::i;:::-;32502:2;32497:3;32493:12;32486:19;;32109:402;;;:::o;32517:967::-;32899:3;32921:148;33065:3;32921:148;:::i;:::-;32914:155;;33086:95;33177:3;33168:6;33086:95;:::i;:::-;33079:102;;33198:148;33342:3;33198:148;:::i;:::-;33191:155;;33363:95;33454:3;33445:6;33363:95;:::i;:::-;33356:102;;33475:3;33468:10;;32517:967;;;;;:::o;33490:98::-;33541:6;33575:5;33569:12;33559:22;;33490:98;;;:::o;33594:168::-;33677:11;33711:6;33706:3;33699:19;33751:4;33746:3;33742:14;33727:29;;33594:168;;;;:::o;33768:360::-;33854:3;33882:38;33914:5;33882:38;:::i;:::-;33936:70;33999:6;33994:3;33936:70;:::i;:::-;33929:77;;34015:52;34060:6;34055:3;34048:4;34041:5;34037:16;34015:52;:::i;:::-;34092:29;34114:6;34092:29;:::i;:::-;34087:3;34083:39;34076:46;;33858:270;33768:360;;;;:::o;34134:640::-;34329:4;34367:3;34356:9;34352:19;34344:27;;34381:71;34449:1;34438:9;34434:17;34425:6;34381:71;:::i;:::-;34462:72;34530:2;34519:9;34515:18;34506:6;34462:72;:::i;:::-;34544;34612:2;34601:9;34597:18;34588:6;34544:72;:::i;:::-;34663:9;34657:4;34653:20;34648:2;34637:9;34633:18;34626:48;34691:76;34762:4;34753:6;34691:76;:::i;:::-;34683:84;;34134:640;;;;;;;:::o;34780:141::-;34836:5;34867:6;34861:13;34852:22;;34883:32;34909:5;34883:32;:::i;:::-;34780:141;;;;:::o;34927:349::-;34996:6;35045:2;35033:9;35024:7;35020:23;35016:32;35013:119;;;35051:79;;:::i;:::-;35013:119;35171:1;35196:63;35251:7;35242:6;35231:9;35227:22;35196:63;:::i;:::-;35186:73;;35142:127;34927:349;;;;:::o;35282:230::-;35422:34;35418:1;35410:6;35406:14;35399:58;35491:13;35486:2;35478:6;35474:15;35467:38;35282:230;:::o;35518:366::-;35660:3;35681:67;35745:2;35740:3;35681:67;:::i;:::-;35674:74;;35757:93;35846:3;35757:93;:::i;:::-;35875:2;35870:3;35866:12;35859:19;;35518:366;;;:::o;35890:419::-;36056:4;36094:2;36083:9;36079:18;36071:26;;36143:9;36137:4;36133:20;36129:1;36118:9;36114:17;36107:47;36171:131;36297:4;36171:131;:::i;:::-;36163:139;;35890:419;;;:::o;36315:223::-;36455:34;36451:1;36443:6;36439:14;36432:58;36524:6;36519:2;36511:6;36507:15;36500:31;36315:223;:::o;36544:366::-;36686:3;36707:67;36771:2;36766:3;36707:67;:::i;:::-;36700:74;;36783:93;36872:3;36783:93;:::i;:::-;36901:2;36896:3;36892:12;36885:19;;36544:366;;;:::o;36916:419::-;37082:4;37120:2;37109:9;37105:18;37097:26;;37169:9;37163:4;37159:20;37155:1;37144:9;37140:17;37133:47;37197:131;37323:4;37197:131;:::i;:::-;37189:139;;36916:419;;;:::o;37341:529::-;37508:4;37546:2;37535:9;37531:18;37523:26;;37559:71;37627:1;37616:9;37612:17;37603:6;37559:71;:::i;:::-;37640:72;37708:2;37697:9;37693:18;37684:6;37640:72;:::i;:::-;37759:9;37753:4;37749:20;37744:2;37733:9;37729:18;37722:48;37787:76;37858:4;37849:6;37787:76;:::i;:::-;37779:84;;37341:529;;;;;;:::o;37876:348::-;37916:7;37939:20;37957:1;37939:20;:::i;:::-;37934:25;;37973:20;37991:1;37973:20;:::i;:::-;37968:25;;38161:1;38093:66;38089:74;38086:1;38083:81;38078:1;38071:9;38064:17;38060:105;38057:131;;;38168:18;;:::i;:::-;38057:131;38216:1;38213;38209:9;38198:20;;37876:348;;;;:::o;38230:180::-;38278:77;38275:1;38268:88;38375:4;38372:1;38365:15;38399:4;38396:1;38389:15;38416:171;38455:3;38478:24;38496:5;38478:24;:::i;:::-;38469:33;;38524:4;38517:5;38514:15;38511:41;;;38532:18;;:::i;:::-;38511:41;38579:1;38572:5;38568:13;38561:20;;38416:171;;;:::o;38593:182::-;38733:34;38729:1;38721:6;38717:14;38710:58;38593:182;:::o;38781:366::-;38923:3;38944:67;39008:2;39003:3;38944:67;:::i;:::-;38937:74;;39020:93;39109:3;39020:93;:::i;:::-;39138:2;39133:3;39129:12;39122:19;;38781:366;;;:::o;39153:419::-;39319:4;39357:2;39346:9;39342:18;39334:26;;39406:9;39400:4;39396:20;39392:1;39381:9;39377:17;39370:47;39434:131;39560:4;39434:131;:::i;:::-;39426:139;;39153:419;;;:::o;39578:175::-;39718:27;39714:1;39706:6;39702:14;39695:51;39578:175;:::o;39759:366::-;39901:3;39922:67;39986:2;39981:3;39922:67;:::i;:::-;39915:74;;39998:93;40087:3;39998:93;:::i;:::-;40116:2;40111:3;40107:12;40100:19;;39759:366;;;:::o;40131:419::-;40297:4;40335:2;40324:9;40320:18;40312:26;;40384:9;40378:4;40374:20;40370:1;40359:9;40355:17;40348:47;40412:131;40538:4;40412:131;:::i;:::-;40404:139;;40131:419;;;:::o;40556:220::-;40696:34;40692:1;40684:6;40680:14;40673:58;40765:3;40760:2;40752:6;40748:15;40741:28;40556:220;:::o;40782:366::-;40924:3;40945:67;41009:2;41004:3;40945:67;:::i;:::-;40938:74;;41021:93;41110:3;41021:93;:::i;:::-;41139:2;41134:3;41130:12;41123:19;;40782:366;;;:::o;41154:419::-;41320:4;41358:2;41347:9;41343:18;41335:26;;41407:9;41401:4;41397:20;41393:1;41382:9;41378:17;41371:47;41435:131;41561:4;41435:131;:::i;:::-;41427:139;;41154:419;;;:::o;41579:221::-;41719:34;41715:1;41707:6;41703:14;41696:58;41788:4;41783:2;41775:6;41771:15;41764:29;41579:221;:::o;41806:366::-;41948:3;41969:67;42033:2;42028:3;41969:67;:::i;:::-;41962:74;;42045:93;42134:3;42045:93;:::i;:::-;42163:2;42158:3;42154:12;42147:19;;41806:366;;;:::o;42178:419::-;42344:4;42382:2;42371:9;42367:18;42359:26;;42431:9;42425:4;42421:20;42417:1;42406:9;42402:17;42395:47;42459:131;42585:4;42459:131;:::i;:::-;42451:139;;42178:419;;;:::o;42603:191::-;42643:4;42663:20;42681:1;42663:20;:::i;:::-;42658:25;;42697:20;42715:1;42697:20;:::i;:::-;42692:25;;42736:1;42733;42730:8;42727:34;;;42741:18;;:::i;:::-;42727:34;42786:1;42783;42779:9;42771:17;;42603:191;;;;:::o
Swarm Source
ipfs://efe0d1b5eeeafc07f500ddce7f73293ae2e1de9fa8ac7e29fca932458f6d41f3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.