Latest 25 from a total of 5,970 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 328015265 | 4 days ago | IN | 0 ETH | 0.00000041 | ||||
Transfer | 328014696 | 4 days ago | IN | 0 ETH | 0.00000058 | ||||
Transfer | 322408654 | 20 days ago | IN | 0 ETH | 0.00000042 | ||||
Transfer | 322407647 | 20 days ago | IN | 0 ETH | 0.00000063 | ||||
Transfer | 322287663 | 20 days ago | IN | 0 ETH | 0.00000584 | ||||
Transfer | 322267817 | 20 days ago | IN | 0 ETH | 0.00001105 | ||||
Transfer | 322266321 | 20 days ago | IN | 0 ETH | 0.00003543 | ||||
Transfer | 322254292 | 20 days ago | IN | 0 ETH | 0.00000043 | ||||
Transfer | 322253889 | 20 days ago | IN | 0 ETH | 0.00000065 | ||||
Approve | 322204025 | 20 days ago | IN | 0 ETH | 0.00000064 | ||||
Transfer | 322203780 | 20 days ago | IN | 0 ETH | 0.00000078 | ||||
Transfer | 320191295 | 26 days ago | IN | 0 ETH | 0.00000064 | ||||
Transfer | 319806866 | 27 days ago | IN | 0 ETH | 0.00000043 | ||||
Transfer | 319806486 | 27 days ago | IN | 0 ETH | 0.00000061 | ||||
Transfer | 319804350 | 27 days ago | IN | 0 ETH | 0.00000067 | ||||
Transfer | 317325804 | 35 days ago | IN | 0 ETH | 0.00000047 | ||||
Transfer | 317325660 | 35 days ago | IN | 0 ETH | 0.00000064 | ||||
Transfer | 313973751 | 44 days ago | IN | 0 ETH | 0.00000088 | ||||
Transfer | 313973452 | 44 days ago | IN | 0 ETH | 0.00000111 | ||||
Transfer | 311990919 | 50 days ago | IN | 0 ETH | 0.00000065 | ||||
Transfer | 310911515 | 53 days ago | IN | 0 ETH | 0.00000065 | ||||
Transfer | 309550928 | 57 days ago | IN | 0 ETH | 0.00000265 | ||||
Transfer | 309549721 | 57 days ago | IN | 0 ETH | 0.00000555 | ||||
Transfer | 307976468 | 62 days ago | IN | 0 ETH | 0.00000067 | ||||
Transfer | 306686381 | 65 days ago | IN | 0 ETH | 0.00000183 |
Loading...
Loading
Contract Name:
AICORE
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-08-11 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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); } } interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } 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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require( nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed" ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } interface ICamelotFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function owner() external view returns (address); function feePercentOwner() external view returns (address); function setStableOwner() external view returns (address); function feeTo() external view returns (address); function ownerFeeShare() external view returns (uint256); function referrersFeeShare(address) external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function feeInfo() external view returns (uint256 _ownerFeeShare, address _feeTo); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface ICamelotRouter is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, address referrer, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, address referrer, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, address referrer, uint256 deadline ) external; function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); } interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract AICORE is ERC20Capped, Ownable { using SafeERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; uint256 public constant MAX_CAP = 21_000_000 * 1e18; event Trade( address user, address pair, uint256 amount, uint256 side, uint256 circulatingSupply, uint256 timestamp ); mapping(address => bool) public canAddLiquidityBeforeLaunch; EnumerableSet.AddressSet private _minters; uint256 public launchedAt; uint256 public launchedAtTimestamp; bool private initialized; EnumerableSet.AddressSet private _pairs; address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; constructor() ERC20Capped(MAX_CAP) ERC20("AICORE", "AICORE") { canAddLiquidityBeforeLaunch[_msgSender()] = true; canAddLiquidityBeforeLaunch[address(this)] = true; _mint(_msgSender(),50000000000000000000000); } function mint(address to, uint256 amount) external onlyMinter { _mint(to, amount); } function decimals() public view virtual override returns (uint8) { return 18; } function initializePair(address _pair) external onlyOwner { require(!initialized, "Already initialized"); _pairs.add(_pair); initialized = true; } function transfer(address to, uint256 amount) public virtual override returns (bool) { return _tokenTransfer(_msgSender(), to, amount); } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(sender, spender, amount); return _tokenTransfer(sender, recipient, amount); } function _tokenTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { if (!canAddLiquidityBeforeLaunch[sender]) { require(launched(), "Trading not open yet"); } _transfer(sender, recipient, amount); uint256 side = 0; address user_ = sender; address pair_ = recipient; // Set Fees if (isPair(sender)) { side = 1; user_ = recipient; pair_ = sender; } else if (isPair(recipient)) { side = 2; } if (side > 0) { emit Trade( user_, pair_, amount, side, getCirculatingSupply(), block.timestamp ); } return true; } function launched() internal view returns (bool) { return launchedAt != 0; } function rescueToken(address tokenAddress) external onlyOwner { IERC20(tokenAddress).safeTransfer( msg.sender, IERC20(tokenAddress).balanceOf(address(this)) ); } function clearStuckEthBalance() external onlyOwner { uint256 amountETH = address(this).balance; (bool success, ) = payable(_msgSender()).call{value: amountETH}( new bytes(0) ); require(success, "AICORE: ETH_TRANSFER_FAILED"); } function getCirculatingSupply() public view returns (uint256) { return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO); } /*** ADMIN FUNCTIONS ***/ function launch() public onlyOwner { require(launchedAt == 0, "Already launched"); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function isPair(address account) public view returns (bool) { return _pairs.contains(account); } function addPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "AICORE: pair is the zero address"); return _pairs.add(pair); } function delPair(address pair) public onlyOwner returns (bool) { require(pair != address(0), "AICORE: pair is the zero address"); return _pairs.remove(pair); } function addMinter(address minter) public onlyOwner returns (bool) { require(minter != address(0), "Token: minter is the zero address"); return _minters.add(minter); } function delMinter(address minter) public onlyOwner returns (bool) { require(minter != address(0), "Token: minter is the zero address"); return _minters.remove(minter); } function getMinterLength() public view returns (uint256) { return _minters.length(); } function isMinter(address account) public view returns (bool) { return _minters.contains(account); } function getMinter(uint256 index) public view returns (address) { require(index <= getMinterLength() - 1, "Token: index out of bounds"); return _minters.at(index); } // modifier for mint function modifier onlyMinter() { require(isMinter(msg.sender), "caller is not the minter"); _; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"side","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"circulatingSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Trade","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":"MAX_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEthBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"delMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"delPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_pair","type":"address"}],"name":"initializePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506a115eec47f6cf7e350000006040518060400160405280600681526020017f4149434f524500000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4149434f5245000000000000000000000000000000000000000000000000000081525081600390816200009b919062000773565b508060049081620000ad919062000773565b50505060008111620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620008bb565b60405180910390fd5b8060808181525050506200011f620001136200020f60201b60201c565b6200021760201b60201c565b600160066000620001356200020f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000209620001f26200020f60201b60201c565b690a968163f0a57b400000620002dd60201b60201c565b62000a59565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ed6200036e60201b60201c565b81620003036200037860201b620009761760201c565b6200030f91906200090c565b111562000353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034a9062000997565b60405180910390fd5b6200036a82826200038260201b620012dd1760201c565b5050565b6000608051905090565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003eb9062000a09565b60405180910390fd5b6200040860008383620004ef60201b60201c565b80600260008282546200041c91906200090c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004cf919062000a3c565b60405180910390a3620004eb60008383620004f460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057b57607f821691505b60208210810362000591576200059062000533565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005bc565b620006078683620005bc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006546200064e62000648846200061f565b62000629565b6200061f565b9050919050565b6000819050919050565b620006708362000633565b620006886200067f826200065b565b848454620005c9565b825550505050565b600090565b6200069f62000690565b620006ac81848462000665565b505050565b5b81811015620006d457620006c860008262000695565b600181019050620006b2565b5050565b601f8211156200072357620006ed8162000597565b620006f884620005ac565b8101602085101562000708578190505b620007206200071785620005ac565b830182620006b1565b50505b505050565b600082821c905092915050565b6000620007486000198460080262000728565b1980831691505092915050565b600062000763838362000735565b9150826002028217905092915050565b6200077e82620004f9565b67ffffffffffffffff8111156200079a576200079962000504565b5b620007a6825462000562565b620007b3828285620006d8565b600060209050601f831160018114620007eb5760008415620007d6578287015190505b620007e2858262000755565b86555062000852565b601f198416620007fb8662000597565b60005b828110156200082557848901518255600182019150602085019450602081019050620007fe565b8683101562000845578489015162000841601f89168262000735565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b6000620008a36015836200085a565b9150620008b0826200086b565b602082019050919050565b60006020820190508181036000830152620008d68162000894565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000919826200061f565b915062000926836200061f565b9250828201905080821115620009415762000940620008dd565b5b92915050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b60006200097f6019836200085a565b91506200098c8262000947565b602082019050919050565b60006020820190508181036000830152620009b28162000970565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009f1601f836200085a565b9150620009fe82620009b9565b602082019050919050565b6000602082019050818103600083015262000a2481620009e2565b9050919050565b62000a36816200061f565b82525050565b600060208201905062000a53600083018462000a2b565b92915050565b60805161330362000a756000396000610b1101526133036000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063aa271e1a116100a0578063c6d2577d1161006f578063c6d2577d1461075a578063d669e1d414610785578063dd62ed3e146107b0578063e5e31b13146107ed578063f2fde38b1461082a576101f9565b8063aa271e1a1461069e578063bf56b371146106db578063bfa382b514610706578063c2b7bbb61461071d576101f9565b8063983b2d56116100dc578063983b2d56146105aa578063a457c2d7146105e7578063a5bc508514610624578063a9059cbb14610661576101f9565b8063715018a6146105005780638072250b146105175780638da5cb5b1461055457806395d89b411461057f576101f9565b80632b112e491161018557806340c10f191161015457806340c10f19146104345780634460d3cf1461045d5780635b7121f81461048657806370a08231146104c3576101f9565b80632b112e4914610376578063313ce567146103a1578063355274ea146103cc57806339509351146103f7576101f9565b806318160ddd116101c157806318160ddd146102a857806323338b88146102d357806323b872dd146103105780632a55fc2a1461034d576101f9565b806301339c21146101fe5780630323aac71461021557806306fdde0314610240578063095ea7b31461026b576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610853565b005b34801561022157600080fd5b5061022a6108b0565b60405161023791906121e2565b60405180910390f35b34801561024c57600080fd5b506102556108c1565b604051610262919061228d565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061233e565b610953565b60405161029f9190612399565b60405180910390f35b3480156102b457600080fd5b506102bd610976565b6040516102ca91906121e2565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906123b4565b610980565b6040516103079190612399565b60405180910390f35b34801561031c57600080fd5b50610337600480360381019061033291906123e1565b610a14565b6040516103449190612399565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f91906123b4565b610a41565b005b34801561038257600080fd5b5061038b610acc565b60405161039891906121e2565b60405180910390f35b3480156103ad57600080fd5b506103b6610b04565b6040516103c39190612450565b60405180910390f35b3480156103d857600080fd5b506103e1610b0d565b6040516103ee91906121e2565b60405180910390f35b34801561040357600080fd5b5061041e6004803603810190610419919061233e565b610b35565b60405161042b9190612399565b60405180910390f35b34801561044057600080fd5b5061045b6004803603810190610456919061233e565b610b6c565b005b34801561046957600080fd5b50610484600480360381019061047f91906123b4565b610bc2565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061246b565b610c71565b6040516104ba91906124a7565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906123b4565b610ce4565b6040516104f791906121e2565b60405180910390f35b34801561050c57600080fd5b50610515610d2c565b005b34801561052357600080fd5b5061053e600480360381019061053991906123b4565b610d40565b60405161054b9190612399565b60405180910390f35b34801561056057600080fd5b50610569610d60565b60405161057691906124a7565b60405180910390f35b34801561058b57600080fd5b50610594610d8a565b6040516105a1919061228d565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906123b4565b610e1c565b6040516105de9190612399565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061233e565b610eb0565b60405161061b9190612399565b60405180910390f35b34801561063057600080fd5b5061064b600480360381019061064691906123b4565b610f27565b6040516106589190612399565b60405180910390f35b34801561066d57600080fd5b506106886004803603810190610683919061233e565b610fbb565b6040516106959190612399565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906123b4565b610fd7565b6040516106d29190612399565b60405180910390f35b3480156106e757600080fd5b506106f0610ff4565b6040516106fd91906121e2565b60405180910390f35b34801561071257600080fd5b5061071b610ffa565b005b34801561072957600080fd5b50610744600480360381019061073f91906123b4565b61110d565b6040516107519190612399565b60405180910390f35b34801561076657600080fd5b5061076f6111a1565b60405161077c91906121e2565b60405180910390f35b34801561079157600080fd5b5061079a6111a7565b6040516107a791906121e2565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906124c2565b6111b6565b6040516107e491906121e2565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f91906123b4565b61123d565b6040516108219190612399565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906123b4565b61125a565b005b61085b611433565b6000600954146108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061254e565b60405180910390fd5b4360098190555042600a81905550565b60006108bc60076114b1565b905090565b6060600380546108d09061259d565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061259d565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b60008061095e6114c6565b905061096b8185856114ce565b600191505092915050565b6000600254905090565b600061098a611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090612640565b60405180910390fd5b610a0d82600761169790919063ffffffff16565b9050919050565b600080610a1f6114c6565b9050610a2c8582856116c7565b610a37858585611753565b9150509392505050565b610a49611433565b600b60009054906101000a900460ff1615610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906126ac565b60405180910390fd5b610aad81600c61189590919063ffffffff16565b506001600b60006101000a81548160ff02191690831515021790555050565b6000610ad86000610ce4565b610ae361dead610ce4565b610aeb610976565b610af591906126fb565b610aff91906126fb565b905090565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080610b406114c6565b9050610b61818585610b5285896111b6565b610b5c919061272f565b6114ce565b600191505092915050565b610b7533610fd7565b610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906127af565b60405180910390fd5b610bbe82826118c5565b5050565b610bca611433565b610c6e338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0791906124a7565b602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906127e4565b8373ffffffffffffffffffffffffffffffffffffffff1661192f9092919063ffffffff16565b50565b60006001610c7d6108b0565b610c8791906126fb565b821115610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc09061285d565b60405180910390fd5b610cdd8260076119b590919063ffffffff16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d34611433565b610d3e60006119cf565b565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d999061259d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc59061259d565b8015610e125780601f10610de757610100808354040283529160200191610e12565b820191906000526020600020905b815481529060010190602001808311610df557829003601f168201915b5050505050905090565b6000610e26611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90612640565b60405180910390fd5b610ea982600761189590919063ffffffff16565b9050919050565b600080610ebb6114c6565b90506000610ec982866111b6565b905083811015610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f05906128ef565b60405180910390fd5b610f1b82868684036114ce565b60019250505092915050565b6000610f31611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f979061295b565b60405180910390fd5b610fb482600c61169790919063ffffffff16565b9050919050565b6000610fcf610fc86114c6565b8484611753565b905092915050565b6000610fed826007611a9590919063ffffffff16565b9050919050565b60095481565b611002611433565b600047905060006110116114c6565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff8111156110435761104261297b565b5b6040519080825280601f01601f1916602001820160405280156110755781602001600182028036833780820191505090505b5060405161108391906129f1565b60006040518083038185875af1925050503d80600081146110c0576040519150601f19603f3d011682016040523d82523d6000602084013e6110c5565b606091505b5050905080611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090612a54565b60405180910390fd5b5050565b6000611117611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061295b565b60405180910390fd5b61119a82600c61189590919063ffffffff16565b9050919050565b600a5481565b6a115eec47f6cf7e3500000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061125382600c611a9590919063ffffffff16565b9050919050565b611262611433565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612ae6565b60405180910390fd5b6112da816119cf565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390612b52565b60405180910390fd5b61135860008383611ac5565b806002600082825461136a919061272f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141b91906121e2565b60405180910390a361142f60008383611aca565b5050565b61143b6114c6565b73ffffffffffffffffffffffffffffffffffffffff16611459610d60565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a690612bbe565b60405180910390fd5b565b60006114bf82600001611acf565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490612c50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390612ce2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161168a91906121e2565b60405180910390a3505050565b60006116bf836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611ae0565b905092915050565b60006116d384846111b6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461174d578181101561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690612d4e565b60405180910390fd5b61174c84848484036114ce565b5b50505050565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ee576117ae611bf4565b6117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490612dba565b60405180910390fd5b5b6117f9848484611c01565b600080859050600085905061180d8761123d565b156118215760019250859150869050611835565b61182a8661123d565b1561183457600292505b5b6000831115611887577fe6f814da7244d1ae6c61b54b5684858ba39cad7b9a91884be10060664987d7548282878661186b610acc565b4260405161187e96959493929190612dda565b60405180910390a15b600193505050509392505050565b60006118bd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611e77565b905092915050565b6118cd610b0d565b816118d6610976565b6118e0919061272f565b1115611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890612e87565b60405180910390fd5b61192b82826112dd565b5050565b6119b08363a9059cbb60e01b848460405160240161194e929190612ea7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ee7565b505050565b60006119c48360000183611fae565b60001c905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611abd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611fd9565b905092915050565b505050565b505050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114611be8576000600182611b1291906126fb565b9050600060018660000180549050611b2a91906126fb565b9050818114611b99576000866000018281548110611b4b57611b4a612ed0565b5b9060005260206000200154905080876000018481548110611b6f57611b6e612ed0565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611bad57611bac612eff565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611bee565b60009150505b92915050565b6000806009541415905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790612fa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690613032565b60405180910390fd5b611cea838383611ac5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d67906130c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e5e91906121e2565b60405180910390a3611e71848484611aca565b50505050565b6000611e838383611fd9565b611edc578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611ee1565b600090505b92915050565b6000611f49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611ffc9092919063ffffffff16565b9050600081511115611fa95780806020019051810190611f699190613110565b611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f906131af565b60405180910390fd5b5b505050565b6000826000018281548110611fc657611fc5612ed0565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b606061200b8484600085612014565b90509392505050565b606082471015612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613241565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161208291906129f1565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b50915091506120d5878383876120e1565b92505050949350505050565b6060831561214357600083510361213b576120fb85612156565b61213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612131906132ad565b60405180910390fd5b5b82905061214e565b61214d8383612179565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561218c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c0919061228d565b60405180910390fd5b6000819050919050565b6121dc816121c9565b82525050565b60006020820190506121f760008301846121d3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561223757808201518184015260208101905061221c565b60008484015250505050565b6000601f19601f8301169050919050565b600061225f826121fd565b6122698185612208565b9350612279818560208601612219565b61228281612243565b840191505092915050565b600060208201905081810360008301526122a78184612254565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122df826122b4565b9050919050565b6122ef816122d4565b81146122fa57600080fd5b50565b60008135905061230c816122e6565b92915050565b61231b816121c9565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b60008060408385031215612355576123546122af565b5b6000612363858286016122fd565b925050602061237485828601612329565b9150509250929050565b60008115159050919050565b6123938161237e565b82525050565b60006020820190506123ae600083018461238a565b92915050565b6000602082840312156123ca576123c96122af565b5b60006123d8848285016122fd565b91505092915050565b6000806000606084860312156123fa576123f96122af565b5b6000612408868287016122fd565b9350506020612419868287016122fd565b925050604061242a86828701612329565b9150509250925092565b600060ff82169050919050565b61244a81612434565b82525050565b60006020820190506124656000830184612441565b92915050565b600060208284031215612481576124806122af565b5b600061248f84828501612329565b91505092915050565b6124a1816122d4565b82525050565b60006020820190506124bc6000830184612498565b92915050565b600080604083850312156124d9576124d86122af565b5b60006124e7858286016122fd565b92505060206124f8858286016122fd565b9150509250929050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000612538601083612208565b915061254382612502565b602082019050919050565b600060208201905081810360008301526125678161252b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125b557607f821691505b6020821081036125c8576125c761256e565b5b50919050565b7f546f6b656e3a206d696e74657220697320746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061262a602183612208565b9150612635826125ce565b604082019050919050565b600060208201905081810360008301526126598161261d565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b6000612696601383612208565b91506126a182612660565b602082019050919050565b600060208201905081810360008301526126c581612689565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612706826121c9565b9150612711836121c9565b9250828203905081811115612729576127286126cc565b5b92915050565b600061273a826121c9565b9150612745836121c9565b925082820190508082111561275d5761275c6126cc565b5b92915050565b7f63616c6c6572206973206e6f7420746865206d696e7465720000000000000000600082015250565b6000612799601883612208565b91506127a482612763565b602082019050919050565b600060208201905081810360008301526127c88161278c565b9050919050565b6000815190506127de81612312565b92915050565b6000602082840312156127fa576127f96122af565b5b6000612808848285016127cf565b91505092915050565b7f546f6b656e3a20696e646578206f7574206f6620626f756e6473000000000000600082015250565b6000612847601a83612208565b915061285282612811565b602082019050919050565b600060208201905081810360008301526128768161283a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128d9602583612208565b91506128e48261287d565b604082019050919050565b60006020820190508181036000830152612908816128cc565b9050919050565b7f4149434f52453a207061697220697320746865207a65726f2061646472657373600082015250565b6000612945602083612208565b91506129508261290f565b602082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b60006129cb826129aa565b6129d581856129b5565b93506129e5818560208601612219565b80840191505092915050565b60006129fd82846129c0565b915081905092915050565b7f4149434f52453a204554485f5452414e534645525f4641494c45440000000000600082015250565b6000612a3e601b83612208565b9150612a4982612a08565b602082019050919050565b60006020820190508181036000830152612a6d81612a31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad0602683612208565b9150612adb82612a74565b604082019050919050565b60006020820190508181036000830152612aff81612ac3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612b3c601f83612208565b9150612b4782612b06565b602082019050919050565b60006020820190508181036000830152612b6b81612b2f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ba8602083612208565b9150612bb382612b72565b602082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c3a602483612208565b9150612c4582612bde565b604082019050919050565b60006020820190508181036000830152612c6981612c2d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ccc602283612208565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d38601d83612208565b9150612d4382612d02565b602082019050919050565b60006020820190508181036000830152612d6781612d2b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000612da4601483612208565b9150612daf82612d6e565b602082019050919050565b60006020820190508181036000830152612dd381612d97565b9050919050565b600060c082019050612def6000830189612498565b612dfc6020830188612498565b612e0960408301876121d3565b612e1660608301866121d3565b612e2360808301856121d3565b612e3060a08301846121d3565b979650505050505050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b6000612e71601983612208565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b6000604082019050612ebc6000830185612498565b612ec960208301846121d3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f8a602583612208565b9150612f9582612f2e565b604082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061301c602383612208565b915061302782612fc0565b604082019050919050565b6000602082019050818103600083015261304b8161300f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006130ae602683612208565b91506130b982613052565b604082019050919050565b600060208201905081810360008301526130dd816130a1565b9050919050565b6130ed8161237e565b81146130f857600080fd5b50565b60008151905061310a816130e4565b92915050565b600060208284031215613126576131256122af565b5b6000613134848285016130fb565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613199602a83612208565b91506131a48261313d565b604082019050919050565b600060208201905081810360008301526131c88161318c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061322b602683612208565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613297601d83612208565b91506132a282613261565b602082019050919050565b600060208201905081810360008301526132c68161328a565b905091905056fea2646970667358221220976fa6ae92f5601ed255f2f629e0b2635716857fb95515abdee42fca260c170664736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c8063715018a61161010d578063aa271e1a116100a0578063c6d2577d1161006f578063c6d2577d1461075a578063d669e1d414610785578063dd62ed3e146107b0578063e5e31b13146107ed578063f2fde38b1461082a576101f9565b8063aa271e1a1461069e578063bf56b371146106db578063bfa382b514610706578063c2b7bbb61461071d576101f9565b8063983b2d56116100dc578063983b2d56146105aa578063a457c2d7146105e7578063a5bc508514610624578063a9059cbb14610661576101f9565b8063715018a6146105005780638072250b146105175780638da5cb5b1461055457806395d89b411461057f576101f9565b80632b112e491161018557806340c10f191161015457806340c10f19146104345780634460d3cf1461045d5780635b7121f81461048657806370a08231146104c3576101f9565b80632b112e4914610376578063313ce567146103a1578063355274ea146103cc57806339509351146103f7576101f9565b806318160ddd116101c157806318160ddd146102a857806323338b88146102d357806323b872dd146103105780632a55fc2a1461034d576101f9565b806301339c21146101fe5780630323aac71461021557806306fdde0314610240578063095ea7b31461026b576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610853565b005b34801561022157600080fd5b5061022a6108b0565b60405161023791906121e2565b60405180910390f35b34801561024c57600080fd5b506102556108c1565b604051610262919061228d565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061233e565b610953565b60405161029f9190612399565b60405180910390f35b3480156102b457600080fd5b506102bd610976565b6040516102ca91906121e2565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906123b4565b610980565b6040516103079190612399565b60405180910390f35b34801561031c57600080fd5b50610337600480360381019061033291906123e1565b610a14565b6040516103449190612399565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f91906123b4565b610a41565b005b34801561038257600080fd5b5061038b610acc565b60405161039891906121e2565b60405180910390f35b3480156103ad57600080fd5b506103b6610b04565b6040516103c39190612450565b60405180910390f35b3480156103d857600080fd5b506103e1610b0d565b6040516103ee91906121e2565b60405180910390f35b34801561040357600080fd5b5061041e6004803603810190610419919061233e565b610b35565b60405161042b9190612399565b60405180910390f35b34801561044057600080fd5b5061045b6004803603810190610456919061233e565b610b6c565b005b34801561046957600080fd5b50610484600480360381019061047f91906123b4565b610bc2565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061246b565b610c71565b6040516104ba91906124a7565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e591906123b4565b610ce4565b6040516104f791906121e2565b60405180910390f35b34801561050c57600080fd5b50610515610d2c565b005b34801561052357600080fd5b5061053e600480360381019061053991906123b4565b610d40565b60405161054b9190612399565b60405180910390f35b34801561056057600080fd5b50610569610d60565b60405161057691906124a7565b60405180910390f35b34801561058b57600080fd5b50610594610d8a565b6040516105a1919061228d565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906123b4565b610e1c565b6040516105de9190612399565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061233e565b610eb0565b60405161061b9190612399565b60405180910390f35b34801561063057600080fd5b5061064b600480360381019061064691906123b4565b610f27565b6040516106589190612399565b60405180910390f35b34801561066d57600080fd5b506106886004803603810190610683919061233e565b610fbb565b6040516106959190612399565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906123b4565b610fd7565b6040516106d29190612399565b60405180910390f35b3480156106e757600080fd5b506106f0610ff4565b6040516106fd91906121e2565b60405180910390f35b34801561071257600080fd5b5061071b610ffa565b005b34801561072957600080fd5b50610744600480360381019061073f91906123b4565b61110d565b6040516107519190612399565b60405180910390f35b34801561076657600080fd5b5061076f6111a1565b60405161077c91906121e2565b60405180910390f35b34801561079157600080fd5b5061079a6111a7565b6040516107a791906121e2565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906124c2565b6111b6565b6040516107e491906121e2565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f91906123b4565b61123d565b6040516108219190612399565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906123b4565b61125a565b005b61085b611433565b6000600954146108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061254e565b60405180910390fd5b4360098190555042600a81905550565b60006108bc60076114b1565b905090565b6060600380546108d09061259d565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061259d565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b60008061095e6114c6565b905061096b8185856114ce565b600191505092915050565b6000600254905090565b600061098a611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090612640565b60405180910390fd5b610a0d82600761169790919063ffffffff16565b9050919050565b600080610a1f6114c6565b9050610a2c8582856116c7565b610a37858585611753565b9150509392505050565b610a49611433565b600b60009054906101000a900460ff1615610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906126ac565b60405180910390fd5b610aad81600c61189590919063ffffffff16565b506001600b60006101000a81548160ff02191690831515021790555050565b6000610ad86000610ce4565b610ae361dead610ce4565b610aeb610976565b610af591906126fb565b610aff91906126fb565b905090565b60006012905090565b60007f000000000000000000000000000000000000000000115eec47f6cf7e35000000905090565b600080610b406114c6565b9050610b61818585610b5285896111b6565b610b5c919061272f565b6114ce565b600191505092915050565b610b7533610fd7565b610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906127af565b60405180910390fd5b610bbe82826118c5565b5050565b610bca611433565b610c6e338273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0791906124a7565b602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906127e4565b8373ffffffffffffffffffffffffffffffffffffffff1661192f9092919063ffffffff16565b50565b60006001610c7d6108b0565b610c8791906126fb565b821115610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc09061285d565b60405180910390fd5b610cdd8260076119b590919063ffffffff16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d34611433565b610d3e60006119cf565b565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d999061259d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc59061259d565b8015610e125780601f10610de757610100808354040283529160200191610e12565b820191906000526020600020905b815481529060010190602001808311610df557829003601f168201915b5050505050905090565b6000610e26611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90612640565b60405180910390fd5b610ea982600761189590919063ffffffff16565b9050919050565b600080610ebb6114c6565b90506000610ec982866111b6565b905083811015610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f05906128ef565b60405180910390fd5b610f1b82868684036114ce565b60019250505092915050565b6000610f31611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f979061295b565b60405180910390fd5b610fb482600c61169790919063ffffffff16565b9050919050565b6000610fcf610fc86114c6565b8484611753565b905092915050565b6000610fed826007611a9590919063ffffffff16565b9050919050565b60095481565b611002611433565b600047905060006110116114c6565b73ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff8111156110435761104261297b565b5b6040519080825280601f01601f1916602001820160405280156110755781602001600182028036833780820191505090505b5060405161108391906129f1565b60006040518083038185875af1925050503d80600081146110c0576040519150601f19603f3d011682016040523d82523d6000602084013e6110c5565b606091505b5050905080611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090612a54565b60405180910390fd5b5050565b6000611117611433565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061295b565b60405180910390fd5b61119a82600c61189590919063ffffffff16565b9050919050565b600a5481565b6a115eec47f6cf7e3500000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061125382600c611a9590919063ffffffff16565b9050919050565b611262611433565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890612ae6565b60405180910390fd5b6112da816119cf565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134390612b52565b60405180910390fd5b61135860008383611ac5565b806002600082825461136a919061272f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141b91906121e2565b60405180910390a361142f60008383611aca565b5050565b61143b6114c6565b73ffffffffffffffffffffffffffffffffffffffff16611459610d60565b73ffffffffffffffffffffffffffffffffffffffff16146114af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a690612bbe565b60405180910390fd5b565b60006114bf82600001611acf565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490612c50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390612ce2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161168a91906121e2565b60405180910390a3505050565b60006116bf836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611ae0565b905092915050565b60006116d384846111b6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461174d578181101561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690612d4e565b60405180910390fd5b61174c84848484036114ce565b5b50505050565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ee576117ae611bf4565b6117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490612dba565b60405180910390fd5b5b6117f9848484611c01565b600080859050600085905061180d8761123d565b156118215760019250859150869050611835565b61182a8661123d565b1561183457600292505b5b6000831115611887577fe6f814da7244d1ae6c61b54b5684858ba39cad7b9a91884be10060664987d7548282878661186b610acc565b4260405161187e96959493929190612dda565b60405180910390a15b600193505050509392505050565b60006118bd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611e77565b905092915050565b6118cd610b0d565b816118d6610976565b6118e0919061272f565b1115611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890612e87565b60405180910390fd5b61192b82826112dd565b5050565b6119b08363a9059cbb60e01b848460405160240161194e929190612ea7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ee7565b505050565b60006119c48360000183611fae565b60001c905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611abd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611fd9565b905092915050565b505050565b505050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114611be8576000600182611b1291906126fb565b9050600060018660000180549050611b2a91906126fb565b9050818114611b99576000866000018281548110611b4b57611b4a612ed0565b5b9060005260206000200154905080876000018481548110611b6f57611b6e612ed0565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611bad57611bac612eff565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611bee565b60009150505b92915050565b6000806009541415905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790612fa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690613032565b60405180910390fd5b611cea838383611ac5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d67906130c4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e5e91906121e2565b60405180910390a3611e71848484611aca565b50505050565b6000611e838383611fd9565b611edc578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611ee1565b600090505b92915050565b6000611f49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611ffc9092919063ffffffff16565b9050600081511115611fa95780806020019051810190611f699190613110565b611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f906131af565b60405180910390fd5b5b505050565b6000826000018281548110611fc657611fc5612ed0565b5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b606061200b8484600085612014565b90509392505050565b606082471015612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613241565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161208291906129f1565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b50915091506120d5878383876120e1565b92505050949350505050565b6060831561214357600083510361213b576120fb85612156565b61213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612131906132ad565b60405180910390fd5b5b82905061214e565b61214d8383612179565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561218c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c0919061228d565b60405180910390fd5b6000819050919050565b6121dc816121c9565b82525050565b60006020820190506121f760008301846121d3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561223757808201518184015260208101905061221c565b60008484015250505050565b6000601f19601f8301169050919050565b600061225f826121fd565b6122698185612208565b9350612279818560208601612219565b61228281612243565b840191505092915050565b600060208201905081810360008301526122a78184612254565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122df826122b4565b9050919050565b6122ef816122d4565b81146122fa57600080fd5b50565b60008135905061230c816122e6565b92915050565b61231b816121c9565b811461232657600080fd5b50565b60008135905061233881612312565b92915050565b60008060408385031215612355576123546122af565b5b6000612363858286016122fd565b925050602061237485828601612329565b9150509250929050565b60008115159050919050565b6123938161237e565b82525050565b60006020820190506123ae600083018461238a565b92915050565b6000602082840312156123ca576123c96122af565b5b60006123d8848285016122fd565b91505092915050565b6000806000606084860312156123fa576123f96122af565b5b6000612408868287016122fd565b9350506020612419868287016122fd565b925050604061242a86828701612329565b9150509250925092565b600060ff82169050919050565b61244a81612434565b82525050565b60006020820190506124656000830184612441565b92915050565b600060208284031215612481576124806122af565b5b600061248f84828501612329565b91505092915050565b6124a1816122d4565b82525050565b60006020820190506124bc6000830184612498565b92915050565b600080604083850312156124d9576124d86122af565b5b60006124e7858286016122fd565b92505060206124f8858286016122fd565b9150509250929050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000612538601083612208565b915061254382612502565b602082019050919050565b600060208201905081810360008301526125678161252b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125b557607f821691505b6020821081036125c8576125c761256e565b5b50919050565b7f546f6b656e3a206d696e74657220697320746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061262a602183612208565b9150612635826125ce565b604082019050919050565b600060208201905081810360008301526126598161261d565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b6000612696601383612208565b91506126a182612660565b602082019050919050565b600060208201905081810360008301526126c581612689565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612706826121c9565b9150612711836121c9565b9250828203905081811115612729576127286126cc565b5b92915050565b600061273a826121c9565b9150612745836121c9565b925082820190508082111561275d5761275c6126cc565b5b92915050565b7f63616c6c6572206973206e6f7420746865206d696e7465720000000000000000600082015250565b6000612799601883612208565b91506127a482612763565b602082019050919050565b600060208201905081810360008301526127c88161278c565b9050919050565b6000815190506127de81612312565b92915050565b6000602082840312156127fa576127f96122af565b5b6000612808848285016127cf565b91505092915050565b7f546f6b656e3a20696e646578206f7574206f6620626f756e6473000000000000600082015250565b6000612847601a83612208565b915061285282612811565b602082019050919050565b600060208201905081810360008301526128768161283a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128d9602583612208565b91506128e48261287d565b604082019050919050565b60006020820190508181036000830152612908816128cc565b9050919050565b7f4149434f52453a207061697220697320746865207a65726f2061646472657373600082015250565b6000612945602083612208565b91506129508261290f565b602082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b60006129cb826129aa565b6129d581856129b5565b93506129e5818560208601612219565b80840191505092915050565b60006129fd82846129c0565b915081905092915050565b7f4149434f52453a204554485f5452414e534645525f4641494c45440000000000600082015250565b6000612a3e601b83612208565b9150612a4982612a08565b602082019050919050565b60006020820190508181036000830152612a6d81612a31565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad0602683612208565b9150612adb82612a74565b604082019050919050565b60006020820190508181036000830152612aff81612ac3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612b3c601f83612208565b9150612b4782612b06565b602082019050919050565b60006020820190508181036000830152612b6b81612b2f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ba8602083612208565b9150612bb382612b72565b602082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612c3a602483612208565b9150612c4582612bde565b604082019050919050565b60006020820190508181036000830152612c6981612c2d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ccc602283612208565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612d38601d83612208565b9150612d4382612d02565b602082019050919050565b60006020820190508181036000830152612d6781612d2b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000612da4601483612208565b9150612daf82612d6e565b602082019050919050565b60006020820190508181036000830152612dd381612d97565b9050919050565b600060c082019050612def6000830189612498565b612dfc6020830188612498565b612e0960408301876121d3565b612e1660608301866121d3565b612e2360808301856121d3565b612e3060a08301846121d3565b979650505050505050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b6000612e71601983612208565b9150612e7c82612e3b565b602082019050919050565b60006020820190508181036000830152612ea081612e64565b9050919050565b6000604082019050612ebc6000830185612498565b612ec960208301846121d3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f8a602583612208565b9150612f9582612f2e565b604082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061301c602383612208565b915061302782612fc0565b604082019050919050565b6000602082019050818103600083015261304b8161300f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006130ae602683612208565b91506130b982613052565b604082019050919050565b600060208201905081810360008301526130dd816130a1565b9050919050565b6130ed8161237e565b81146130f857600080fd5b50565b60008151905061310a816130e4565b92915050565b600060208284031215613126576131256122af565b5b6000613134848285016130fb565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613199602a83612208565b91506131a48261313d565b604082019050919050565b600060208201905081810360008301526131c88161318c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061322b602683612208565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613297601d83612208565b91506132a282613261565b602082019050919050565b600060208201905081810360008301526132c68161328a565b905091905056fea2646970667358221220976fa6ae92f5601ed255f2f629e0b2635716857fb95515abdee42fca260c170664736f6c63430008110033
Deployed Bytecode Sourcemap
53377:5357:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57039:182;;;;;;;;;;;;;:::i;:::-;;58123:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4363;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6855:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5483:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57922:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55045:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54657:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56863:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54556:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16336:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8381:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54450:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56356:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58353:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5654:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34095:103;;;;;;;;;;;;;:::i;:::-;;53759:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33447:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4582:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57724:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9154:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57534:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54845:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58231:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53875:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56574:281;;;;;;;;;;;;;:::i;:::-;;57347:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53907:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53514:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6334:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57229:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34353:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57039:182;33333:13;:11;:13::i;:::-;57107:1:::1;57093:10;;:15;57085:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;57153:12;57140:10;:25;;;;57198:15;57176:19;:37;;;;57039:182::o:0;58123:100::-;58171:7;58198:17;:8;:15;:17::i;:::-;58191:24;;58123:100;:::o;4363:::-;4417:13;4450:5;4443:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4363:100;:::o;6855:242::-;6974:4;6996:13;7012:12;:10;:12::i;:::-;6996:28;;7035:32;7044:5;7051:7;7060:6;7035:8;:32::i;:::-;7085:4;7078:11;;;6855:242;;;;:::o;5483:108::-;5544:7;5571:12;;5564:19;;5483:108;:::o;57922:193::-;57983:4;33333:13;:11;:13::i;:::-;58026:1:::1;58008:20;;:6;:20;;::::0;58000:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;58084:23;58100:6;58084:8;:15;;:23;;;;:::i;:::-;58077:30;;57922:193:::0;;;:::o;55045:305::-;55185:4;55202:15;55220:12;:10;:12::i;:::-;55202:30;;55243:40;55259:6;55267:7;55276:6;55243:15;:40::i;:::-;55301:41;55316:6;55324:9;55335:6;55301:14;:41::i;:::-;55294:48;;;55045:305;;;;;:::o;54657:180::-;33333:13;:11;:13::i;:::-;54735:11:::1;;;;;;;;;;;54734:12;54726:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;54783:17;54794:5;54783:6;:10;;:17;;;;:::i;:::-;;54825:4;54811:11;;:18;;;;;;;;;;;;;;;;;;54657:180:::0;:::o;56863:137::-;56916:7;56977:15;54142:42;56977:9;:15::i;:::-;56959;54061:42;56959:9;:15::i;:::-;56943:13;:11;:13::i;:::-;:31;;;;:::i;:::-;:49;;;;:::i;:::-;56936:56;;56863:137;:::o;54556:93::-;54614:5;54639:2;54632:9;;54556:93;:::o;16336:83::-;16380:7;16407:4;16400:11;;16336:83;:::o;8381:270::-;8496:4;8518:13;8534:12;:10;:12::i;:::-;8518:28;;8557:64;8566:5;8573:7;8610:10;8582:25;8592:5;8599:7;8582:9;:25::i;:::-;:38;;;;:::i;:::-;8557:8;:64::i;:::-;8639:4;8632:11;;;8381:270;;;;:::o;54450:98::-;58625:20;58634:10;58625:8;:20::i;:::-;58617:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;54523:17:::1;54529:2;54533:6;54523:5;:17::i;:::-;54450:98:::0;;:::o;56356:210::-;33333:13;:11;:13::i;:::-;56429:129:::1;56477:10;56509:12;56502:30;;;56541:4;56502:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56436:12;56429:33;;;;:129;;;;;:::i;:::-;56356:210:::0;:::o;58353:188::-;58408:7;58465:1;58445:17;:15;:17::i;:::-;:21;;;;:::i;:::-;58436:5;:30;;58428:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;58515:18;58527:5;58515:8;:11;;:18;;;;:::i;:::-;58508:25;;58353:188;;;:::o;5654:177::-;5773:7;5805:9;:18;5815:7;5805:18;;;;;;;;;;;;;;;;5798:25;;5654:177;;;:::o;34095:103::-;33333:13;:11;:13::i;:::-;34160:30:::1;34187:1;34160:18;:30::i;:::-;34095:103::o:0;53759:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;33447:87::-;33493:7;33520:6;;;;;;;;;;;33513:13;;33447:87;:::o;4582:104::-;4638:13;4671:7;4664:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4582:104;:::o;57724:190::-;57785:4;33333:13;:11;:13::i;:::-;57828:1:::1;57810:20;;:6;:20;;::::0;57802:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;57886:20;57899:6;57886:8;:12;;:20;;;;:::i;:::-;57879:27;;57724:190:::0;;;:::o;9154:505::-;9274:4;9296:13;9312:12;:10;:12::i;:::-;9296:28;;9335:24;9362:25;9372:5;9379:7;9362:9;:25::i;:::-;9335:52;;9440:15;9420:16;:35;;9398:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;9556:60;9565:5;9572:7;9600:15;9581:16;:34;9556:8;:60::i;:::-;9647:4;9640:11;;;;9154:505;;;;:::o;57534:182::-;57591:4;33333:13;:11;:13::i;:::-;57632:1:::1;57616:18;;:4;:18;;::::0;57608:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;57689:19;57703:4;57689:6;:13;;:19;;;;:::i;:::-;57682:26;;57534:182:::0;;;:::o;54845:192::-;54960:4;54989:40;55004:12;:10;:12::i;:::-;55018:2;55022:6;54989:14;:40::i;:::-;54982:47;;54845:192;;;;:::o;58231:114::-;58287:4;58311:26;58329:7;58311:8;:17;;:26;;;;:::i;:::-;58304:33;;58231:114;;;:::o;53875:25::-;;;;:::o;56574:281::-;33333:13;:11;:13::i;:::-;56636:17:::1;56656:21;56636:41;;56689:12;56715;:10;:12::i;:::-;56707:26;;56741:9;56776:1;56766:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56707:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56688:101;;;56808:7;56800:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;56625:230;;56574:281::o:0;57347:179::-;57404:4;33333:13;:11;:13::i;:::-;57445:1:::1;57429:18;;:4;:18;;::::0;57421:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;57502:16;57513:4;57502:6;:10;;:16;;;;:::i;:::-;57495:23;;57347:179:::0;;;:::o;53907:34::-;;;;:::o;53514:51::-;53548:17;53514:51;:::o;6334:201::-;6468:7;6500:11;:18;6512:5;6500:18;;;;;;;;;;;;;;;:27;6519:7;6500:27;;;;;;;;;;;;;;;;6493:34;;6334:201;;;;:::o;57229:110::-;57283:4;57307:24;57323:7;57307:6;:15;;:24;;;;:::i;:::-;57300:31;;57229:110;;;:::o;34353:238::-;33333:13;:11;:13::i;:::-;34476:1:::1;34456:22;;:8;:22;;::::0;34434:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34555:28;34574:8;34555:18;:28::i;:::-;34353:238:::0;:::o;11293:548::-;11396:1;11377:21;;:7;:21;;;11369:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11447:49;11476:1;11480:7;11489:6;11447:20;:49::i;:::-;11525:6;11509:12;;:22;;;;;;;:::i;:::-;;;;;;;;11702:6;11680:9;:18;11690:7;11680:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;11756:7;11735:37;;11752:1;11735:37;;;11765:6;11735:37;;;;;;:::i;:::-;;;;;;;;11785:48;11813:1;11817:7;11826:6;11785:19;:48::i;:::-;11293:548;;:::o;33612:132::-;33687:12;:10;:12::i;:::-;33676:23;;:7;:5;:7::i;:::-;:23;;;33668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33612:132::o;43236:117::-;43299:7;43326:19;43334:3;:10;;43326:7;:19::i;:::-;43319:26;;43236:117;;;:::o;3369:98::-;3422:7;3449:10;3442:17;;3369:98;:::o;13287:380::-;13440:1;13423:19;;:5;:19;;;13415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13521:1;13502:21;;:7;:21;;;13494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13605:6;13575:11;:18;13587:5;13575:18;;;;;;;;;;;;;;;:27;13594:7;13575:27;;;;;;;;;;;;;;;:36;;;;13643:7;13627:32;;13636:5;13627:32;;;13652:6;13627:32;;;;;;:::i;:::-;;;;;;;;13287:380;;;:::o;42684:181::-;42775:4;42804:53;42812:3;:10;;42848:5;42832:23;;42824:32;;42804:7;:53::i;:::-;42797:60;;42684:181;;;;:::o;13958:502::-;14093:24;14120:25;14130:5;14137:7;14120:9;:25::i;:::-;14093:52;;14180:17;14160:16;:37;14156:297;;14260:6;14240:16;:26;;14214:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;14375:51;14384:5;14391:7;14419:6;14400:16;:25;14375:8;:51::i;:::-;14156:297;14082:378;13958:502;;;:::o;55358:892::-;55485:4;55507:27;:35;55535:6;55507:35;;;;;;;;;;;;;;;;;;;;;;;;;55502:112;;55567:10;:8;:10::i;:::-;55559:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;55502:112;55624:36;55634:6;55642:9;55653:6;55624:9;:36::i;:::-;55673:12;55700:13;55716:6;55700:22;;55733:13;55749:9;55733:25;;55794:14;55801:6;55794;:14::i;:::-;55790:180;;;55832:1;55825:8;;55856:9;55848:17;;55888:6;55880:14;;55790:180;;;55916:17;55923:9;55916:6;:17::i;:::-;55912:58;;;55957:1;55950:8;;55912:58;55790:180;55993:1;55986:4;:8;55982:237;;;56016:191;56040:5;56064;56088:6;56113:4;56136:22;:20;:22::i;:::-;56177:15;56016:191;;;;;;;;;;;:::i;:::-;;;;;;;;55982:237;56238:4;56231:11;;;;;55358:892;;;;;:::o;42333:175::-;42421:4;42450:50;42455:3;:10;;42491:5;42475:23;;42467:32;;42450:4;:50::i;:::-;42443:57;;42333:175;;;;:::o;16477:244::-;16616:5;:3;:5::i;:::-;16606:6;16584:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:37;;16562:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;16685:28;16697:7;16706:6;16685:11;:28::i;:::-;16477:244;;:::o;28545:248::-;28662:123;28696:5;28739:23;;;28764:2;28768:5;28716:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28662:19;:123::i;:::-;28545:248;;;:::o;43707:190::-;43808:7;43864:22;43868:3;:10;;43880:5;43864:3;:22::i;:::-;43856:31;;43833:56;;43707:190;;;;:::o;34751:191::-;34825:16;34844:6;;;;;;;;;;;34825:25;;34870:8;34861:6;;:17;;;;;;;;;;;;;;;;;;34925:8;34894:40;;34915:8;34894:40;;;;;;;;;;;;34814:128;34751:191;:::o;42951:199::-;43058:4;43087:55;43097:3;:10;;43133:5;43117:23;;43109:32;;43087:9;:55::i;:::-;43080:62;;42951:199;;;;:::o;15060:125::-;;;;:::o;15789:124::-;;;;:::o;38201:109::-;38257:7;38284:3;:11;;:18;;;;38277:25;;38201:109;;;:::o;36448:1420::-;36514:4;36632:18;36653:3;:12;;:19;36666:5;36653:19;;;;;;;;;;;;36632:40;;36703:1;36689:10;:15;36685:1176;;37064:21;37101:1;37088:10;:14;;;;:::i;:::-;37064:38;;37117:17;37158:1;37137:3;:11;;:18;;;;:22;;;;:::i;:::-;37117:42;;37193:13;37180:9;:26;37176:405;;37227:17;37247:3;:11;;37259:9;37247:22;;;;;;;;:::i;:::-;;;;;;;;;;37227:42;;37401:9;37372:3;:11;;37384:13;37372:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;37512:10;37486:3;:12;;:23;37499:9;37486:23;;;;;;;;;;;:36;;;;37208:373;37176:405;37662:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37757:3;:12;;:19;37770:5;37757:19;;;;;;;;;;;37750:26;;;37800:4;37793:11;;;;;;;36685:1176;37844:5;37837:12;;;36448:1420;;;;;:::o;56258:90::-;56301:4;56339:1;56325:10;;:15;;56318:22;;56258:90;:::o;10129:877::-;10276:1;10260:18;;:4;:18;;;10252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10353:1;10339:16;;:2;:16;;;10331:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10408:38;10429:4;10435:2;10439:6;10408:20;:38::i;:::-;10459:19;10481:9;:15;10491:4;10481:15;;;;;;;;;;;;;;;;10459:37;;10544:6;10529:11;:21;;10507:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;10684:6;10670:11;:20;10652:9;:15;10662:4;10652:15;;;;;;;;;;;;;;;:38;;;;10887:6;10870:9;:13;10880:2;10870:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10937:2;10922:26;;10931:4;10922:26;;;10941:6;10922:26;;;;;;:::i;:::-;;;;;;;;10961:37;10981:4;10987:2;10991:6;10961:19;:37::i;:::-;10241:765;10129:877;;;:::o;35858:414::-;35921:4;35943:21;35953:3;35958:5;35943:9;:21::i;:::-;35938:327;;35981:3;:11;;35998:5;35981:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36164:3;:11;;:18;;;;36142:3;:12;;:19;36155:5;36142:19;;;;;;;;;;;:40;;;;36204:4;36197:11;;;;35938:327;36248:5;36241:12;;35858:414;;;;;:::o;32043:802::-;32467:23;32493:106;32535:4;32493:106;;;;;;;;;;;;;;;;;32501:5;32493:27;;;;:106;;;;;:::i;:::-;32467:132;;32634:1;32614:10;:17;:21;32610:228;;;32729:10;32718:30;;;;;;;;;;;;:::i;:::-;32692:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;32610:228;32113:732;32043:802;;:::o;38664:152::-;38758:7;38790:3;:11;;38802:5;38790:18;;;;;;;;:::i;:::-;;;;;;;;;;38783:25;;38664:152;;;;:::o;37954:161::-;38054:4;38106:1;38083:3;:12;;:19;38096:5;38083:19;;;;;;;;;;;;:24;;38076:31;;37954:161;;;;:::o;22367:229::-;22504:12;22536:52;22558:6;22566:4;22572:1;22575:12;22536:21;:52::i;:::-;22529:59;;22367:229;;;;;:::o;23583:612::-;23753:12;23825:5;23800:21;:30;;23778:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;23908:12;23922:23;23949:6;:11;;23968:5;23989:4;23949:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23907:97;;;;24035:152;24080:6;24105:7;24131:10;24160:12;24035:26;:152::i;:::-;24015:172;;;;23583:612;;;;;;:::o;26718:644::-;26903:12;26932:7;26928:427;;;26981:1;26960:10;:17;:22;26956:290;;27178:18;27189:6;27178:10;:18::i;:::-;27170:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:290;27267:10;27260:17;;;;26928:427;27310:33;27318:10;27330:12;27310:7;:33::i;:::-;26718:644;;;;;;;:::o;19417:326::-;19477:4;19734:1;19712:7;:19;;;:23;19705:30;;19417:326;;;:::o;27904:575::-;28108:1;28088:10;:17;:21;28084:388;;;28320:10;28314:17;28377:15;28364:10;28360:2;28356:19;28349:44;28084:388;28447:12;28440:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:77:1;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:166::-;6495:18;6491:1;6483:6;6479:14;6472:42;6355:166;:::o;6527:366::-;6669:3;6690:67;6754:2;6749:3;6690:67;:::i;:::-;6683:74;;6766:93;6855:3;6766:93;:::i;:::-;6884:2;6879:3;6875:12;6868:19;;6527:366;;;:::o;6899:419::-;7065:4;7103:2;7092:9;7088:18;7080:26;;7152:9;7146:4;7142:20;7138:1;7127:9;7123:17;7116:47;7180:131;7306:4;7180:131;:::i;:::-;7172:139;;6899:419;;;:::o;7324:180::-;7372:77;7369:1;7362:88;7469:4;7466:1;7459:15;7493:4;7490:1;7483:15;7510:320;7554:6;7591:1;7585:4;7581:12;7571:22;;7638:1;7632:4;7628:12;7659:18;7649:81;;7715:4;7707:6;7703:17;7693:27;;7649:81;7777:2;7769:6;7766:14;7746:18;7743:38;7740:84;;7796:18;;:::i;:::-;7740:84;7561:269;7510:320;;;:::o;7836:220::-;7976:34;7972:1;7964:6;7960:14;7953:58;8045:3;8040:2;8032:6;8028:15;8021:28;7836:220;:::o;8062:366::-;8204:3;8225:67;8289:2;8284:3;8225:67;:::i;:::-;8218:74;;8301:93;8390:3;8301:93;:::i;:::-;8419:2;8414:3;8410:12;8403:19;;8062:366;;;:::o;8434:419::-;8600:4;8638:2;8627:9;8623:18;8615:26;;8687:9;8681:4;8677:20;8673:1;8662:9;8658:17;8651:47;8715:131;8841:4;8715:131;:::i;:::-;8707:139;;8434:419;;;:::o;8859:169::-;8999:21;8995:1;8987:6;8983:14;8976:45;8859:169;:::o;9034:366::-;9176:3;9197:67;9261:2;9256:3;9197:67;:::i;:::-;9190:74;;9273:93;9362:3;9273:93;:::i;:::-;9391:2;9386:3;9382:12;9375:19;;9034:366;;;:::o;9406:419::-;9572:4;9610:2;9599:9;9595:18;9587:26;;9659:9;9653:4;9649:20;9645:1;9634:9;9630:17;9623:47;9687:131;9813:4;9687:131;:::i;:::-;9679:139;;9406:419;;;:::o;9831:180::-;9879:77;9876:1;9869:88;9976:4;9973:1;9966:15;10000:4;9997:1;9990:15;10017:194;10057:4;10077:20;10095:1;10077:20;:::i;:::-;10072:25;;10111:20;10129:1;10111:20;:::i;:::-;10106:25;;10155:1;10152;10148:9;10140:17;;10179:1;10173:4;10170:11;10167:37;;;10184:18;;:::i;:::-;10167:37;10017:194;;;;:::o;10217:191::-;10257:3;10276:20;10294:1;10276:20;:::i;:::-;10271:25;;10310:20;10328:1;10310:20;:::i;:::-;10305:25;;10353:1;10350;10346:9;10339:16;;10374:3;10371:1;10368:10;10365:36;;;10381:18;;:::i;:::-;10365:36;10217:191;;;;:::o;10414:174::-;10554:26;10550:1;10542:6;10538:14;10531:50;10414:174;:::o;10594:366::-;10736:3;10757:67;10821:2;10816:3;10757:67;:::i;:::-;10750:74;;10833:93;10922:3;10833:93;:::i;:::-;10951:2;10946:3;10942:12;10935:19;;10594:366;;;:::o;10966:419::-;11132:4;11170:2;11159:9;11155:18;11147:26;;11219:9;11213:4;11209:20;11205:1;11194:9;11190:17;11183:47;11247:131;11373:4;11247:131;:::i;:::-;11239:139;;10966:419;;;:::o;11391:143::-;11448:5;11479:6;11473:13;11464:22;;11495:33;11522:5;11495:33;:::i;:::-;11391:143;;;;:::o;11540:351::-;11610:6;11659:2;11647:9;11638:7;11634:23;11630:32;11627:119;;;11665:79;;:::i;:::-;11627:119;11785:1;11810:64;11866:7;11857:6;11846:9;11842:22;11810:64;:::i;:::-;11800:74;;11756:128;11540:351;;;;:::o;11897:176::-;12037:28;12033:1;12025:6;12021:14;12014:52;11897:176;:::o;12079:366::-;12221:3;12242:67;12306:2;12301:3;12242:67;:::i;:::-;12235:74;;12318:93;12407:3;12318:93;:::i;:::-;12436:2;12431:3;12427:12;12420:19;;12079:366;;;:::o;12451:419::-;12617:4;12655:2;12644:9;12640:18;12632:26;;12704:9;12698:4;12694:20;12690:1;12679:9;12675:17;12668:47;12732:131;12858:4;12732:131;:::i;:::-;12724:139;;12451:419;;;:::o;12876:224::-;13016:34;13012:1;13004:6;13000:14;12993:58;13085:7;13080:2;13072:6;13068:15;13061:32;12876:224;:::o;13106:366::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13106:366;;;:::o;13478:419::-;13644:4;13682:2;13671:9;13667:18;13659:26;;13731:9;13725:4;13721:20;13717:1;13706:9;13702:17;13695:47;13759:131;13885:4;13759:131;:::i;:::-;13751:139;;13478:419;;;:::o;13903:182::-;14043:34;14039:1;14031:6;14027:14;14020:58;13903:182;:::o;14091:366::-;14233:3;14254:67;14318:2;14313:3;14254:67;:::i;:::-;14247:74;;14330:93;14419:3;14330:93;:::i;:::-;14448:2;14443:3;14439:12;14432:19;;14091:366;;;:::o;14463:419::-;14629:4;14667:2;14656:9;14652:18;14644:26;;14716:9;14710:4;14706:20;14702:1;14691:9;14687:17;14680:47;14744:131;14870:4;14744:131;:::i;:::-;14736:139;;14463:419;;;:::o;14888:180::-;14936:77;14933:1;14926:88;15033:4;15030:1;15023:15;15057:4;15054:1;15047:15;15074:98;15125:6;15159:5;15153:12;15143:22;;15074:98;;;:::o;15178:147::-;15279:11;15316:3;15301:18;;15178:147;;;;:::o;15331:386::-;15435:3;15463:38;15495:5;15463:38;:::i;:::-;15517:88;15598:6;15593:3;15517:88;:::i;:::-;15510:95;;15614:65;15672:6;15667:3;15660:4;15653:5;15649:16;15614:65;:::i;:::-;15704:6;15699:3;15695:16;15688:23;;15439:278;15331:386;;;;:::o;15723:271::-;15853:3;15875:93;15964:3;15955:6;15875:93;:::i;:::-;15868:100;;15985:3;15978:10;;15723:271;;;;:::o;16000:177::-;16140:29;16136:1;16128:6;16124:14;16117:53;16000:177;:::o;16183:366::-;16325:3;16346:67;16410:2;16405:3;16346:67;:::i;:::-;16339:74;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16183:366;;;:::o;16555:419::-;16721:4;16759:2;16748:9;16744:18;16736:26;;16808:9;16802:4;16798:20;16794:1;16783:9;16779:17;16772:47;16836:131;16962:4;16836:131;:::i;:::-;16828:139;;16555:419;;;:::o;16980:225::-;17120:34;17116:1;17108:6;17104:14;17097:58;17189:8;17184:2;17176:6;17172:15;17165:33;16980:225;:::o;17211:366::-;17353:3;17374:67;17438:2;17433:3;17374:67;:::i;:::-;17367:74;;17450:93;17539:3;17450:93;:::i;:::-;17568:2;17563:3;17559:12;17552:19;;17211:366;;;:::o;17583:419::-;17749:4;17787:2;17776:9;17772:18;17764:26;;17836:9;17830:4;17826:20;17822:1;17811:9;17807:17;17800:47;17864:131;17990:4;17864:131;:::i;:::-;17856:139;;17583:419;;;:::o;18008:181::-;18148:33;18144:1;18136:6;18132:14;18125:57;18008:181;:::o;18195:366::-;18337:3;18358:67;18422:2;18417:3;18358:67;:::i;:::-;18351:74;;18434:93;18523:3;18434:93;:::i;:::-;18552:2;18547:3;18543:12;18536:19;;18195:366;;;:::o;18567:419::-;18733:4;18771:2;18760:9;18756:18;18748:26;;18820:9;18814:4;18810:20;18806:1;18795:9;18791:17;18784:47;18848:131;18974:4;18848:131;:::i;:::-;18840:139;;18567:419;;;:::o;18992:182::-;19132:34;19128:1;19120:6;19116:14;19109:58;18992:182;:::o;19180:366::-;19322:3;19343:67;19407:2;19402:3;19343:67;:::i;:::-;19336:74;;19419:93;19508:3;19419:93;:::i;:::-;19537:2;19532:3;19528:12;19521:19;;19180:366;;;:::o;19552:419::-;19718:4;19756:2;19745:9;19741:18;19733:26;;19805:9;19799:4;19795:20;19791:1;19780:9;19776:17;19769:47;19833:131;19959:4;19833:131;:::i;:::-;19825:139;;19552:419;;;:::o;19977:223::-;20117:34;20113:1;20105:6;20101:14;20094:58;20186:6;20181:2;20173:6;20169:15;20162:31;19977:223;:::o;20206:366::-;20348:3;20369:67;20433:2;20428:3;20369:67;:::i;:::-;20362:74;;20445:93;20534:3;20445:93;:::i;:::-;20563:2;20558:3;20554:12;20547:19;;20206:366;;;:::o;20578:419::-;20744:4;20782:2;20771:9;20767:18;20759:26;;20831:9;20825:4;20821:20;20817:1;20806:9;20802:17;20795:47;20859:131;20985:4;20859:131;:::i;:::-;20851:139;;20578:419;;;:::o;21003:221::-;21143:34;21139:1;21131:6;21127:14;21120:58;21212:4;21207:2;21199:6;21195:15;21188:29;21003:221;:::o;21230:366::-;21372:3;21393:67;21457:2;21452:3;21393:67;:::i;:::-;21386:74;;21469:93;21558:3;21469:93;:::i;:::-;21587:2;21582:3;21578:12;21571:19;;21230:366;;;:::o;21602:419::-;21768:4;21806:2;21795:9;21791:18;21783:26;;21855:9;21849:4;21845:20;21841:1;21830:9;21826:17;21819:47;21883:131;22009:4;21883:131;:::i;:::-;21875:139;;21602:419;;;:::o;22027:179::-;22167:31;22163:1;22155:6;22151:14;22144:55;22027:179;:::o;22212:366::-;22354:3;22375:67;22439:2;22434:3;22375:67;:::i;:::-;22368:74;;22451:93;22540:3;22451:93;:::i;:::-;22569:2;22564:3;22560:12;22553:19;;22212:366;;;:::o;22584:419::-;22750:4;22788:2;22777:9;22773:18;22765:26;;22837:9;22831:4;22827:20;22823:1;22812:9;22808:17;22801:47;22865:131;22991:4;22865:131;:::i;:::-;22857:139;;22584:419;;;:::o;23009:170::-;23149:22;23145:1;23137:6;23133:14;23126:46;23009:170;:::o;23185:366::-;23327:3;23348:67;23412:2;23407:3;23348:67;:::i;:::-;23341:74;;23424:93;23513:3;23424:93;:::i;:::-;23542:2;23537:3;23533:12;23526:19;;23185:366;;;:::o;23557:419::-;23723:4;23761:2;23750:9;23746:18;23738:26;;23810:9;23804:4;23800:20;23796:1;23785:9;23781:17;23774:47;23838:131;23964:4;23838:131;:::i;:::-;23830:139;;23557:419;;;:::o;23982:775::-;24215:4;24253:3;24242:9;24238:19;24230:27;;24267:71;24335:1;24324:9;24320:17;24311:6;24267:71;:::i;:::-;24348:72;24416:2;24405:9;24401:18;24392:6;24348:72;:::i;:::-;24430;24498:2;24487:9;24483:18;24474:6;24430:72;:::i;:::-;24512;24580:2;24569:9;24565:18;24556:6;24512:72;:::i;:::-;24594:73;24662:3;24651:9;24647:19;24638:6;24594:73;:::i;:::-;24677;24745:3;24734:9;24730:19;24721:6;24677:73;:::i;:::-;23982:775;;;;;;;;;:::o;24763:175::-;24903:27;24899:1;24891:6;24887:14;24880:51;24763:175;:::o;24944:366::-;25086:3;25107:67;25171:2;25166:3;25107:67;:::i;:::-;25100:74;;25183:93;25272:3;25183:93;:::i;:::-;25301:2;25296:3;25292:12;25285:19;;24944:366;;;:::o;25316:419::-;25482:4;25520:2;25509:9;25505:18;25497:26;;25569:9;25563:4;25559:20;25555:1;25544:9;25540:17;25533:47;25597:131;25723:4;25597:131;:::i;:::-;25589:139;;25316:419;;;:::o;25741:332::-;25862:4;25900:2;25889:9;25885:18;25877:26;;25913:71;25981:1;25970:9;25966:17;25957:6;25913:71;:::i;:::-;25994:72;26062:2;26051:9;26047:18;26038:6;25994:72;:::i;:::-;25741:332;;;;;:::o;26079:180::-;26127:77;26124:1;26117:88;26224:4;26221:1;26214:15;26248:4;26245:1;26238:15;26265:180;26313:77;26310:1;26303:88;26410:4;26407:1;26400:15;26434:4;26431:1;26424:15;26451:224;26591:34;26587:1;26579:6;26575:14;26568:58;26660:7;26655:2;26647:6;26643:15;26636:32;26451:224;:::o;26681:366::-;26823:3;26844:67;26908:2;26903:3;26844:67;:::i;:::-;26837:74;;26920:93;27009:3;26920:93;:::i;:::-;27038:2;27033:3;27029:12;27022:19;;26681:366;;;:::o;27053:419::-;27219:4;27257:2;27246:9;27242:18;27234:26;;27306:9;27300:4;27296:20;27292:1;27281:9;27277:17;27270:47;27334:131;27460:4;27334:131;:::i;:::-;27326:139;;27053:419;;;:::o;27478:222::-;27618:34;27614:1;27606:6;27602:14;27595:58;27687:5;27682:2;27674:6;27670:15;27663:30;27478:222;:::o;27706:366::-;27848:3;27869:67;27933:2;27928:3;27869:67;:::i;:::-;27862:74;;27945:93;28034:3;27945:93;:::i;:::-;28063:2;28058:3;28054:12;28047:19;;27706:366;;;:::o;28078:419::-;28244:4;28282:2;28271:9;28267:18;28259:26;;28331:9;28325:4;28321:20;28317:1;28306:9;28302:17;28295:47;28359:131;28485:4;28359:131;:::i;:::-;28351:139;;28078:419;;;:::o;28503:225::-;28643:34;28639:1;28631:6;28627:14;28620:58;28712:8;28707:2;28699:6;28695:15;28688:33;28503:225;:::o;28734:366::-;28876:3;28897:67;28961:2;28956:3;28897:67;:::i;:::-;28890:74;;28973:93;29062:3;28973:93;:::i;:::-;29091:2;29086:3;29082:12;29075:19;;28734:366;;;:::o;29106:419::-;29272:4;29310:2;29299:9;29295:18;29287:26;;29359:9;29353:4;29349:20;29345:1;29334:9;29330:17;29323:47;29387:131;29513:4;29387:131;:::i;:::-;29379:139;;29106:419;;;:::o;29531:116::-;29601:21;29616:5;29601:21;:::i;:::-;29594:5;29591:32;29581:60;;29637:1;29634;29627:12;29581:60;29531:116;:::o;29653:137::-;29707:5;29738:6;29732:13;29723:22;;29754:30;29778:5;29754:30;:::i;:::-;29653:137;;;;:::o;29796:345::-;29863:6;29912:2;29900:9;29891:7;29887:23;29883:32;29880:119;;;29918:79;;:::i;:::-;29880:119;30038:1;30063:61;30116:7;30107:6;30096:9;30092:22;30063:61;:::i;:::-;30053:71;;30009:125;29796:345;;;;:::o;30147:229::-;30287:34;30283:1;30275:6;30271:14;30264:58;30356:12;30351:2;30343:6;30339:15;30332:37;30147:229;:::o;30382:366::-;30524:3;30545:67;30609:2;30604:3;30545:67;:::i;:::-;30538:74;;30621:93;30710:3;30621:93;:::i;:::-;30739:2;30734:3;30730:12;30723:19;;30382:366;;;:::o;30754:419::-;30920:4;30958:2;30947:9;30943:18;30935:26;;31007:9;31001:4;30997:20;30993:1;30982:9;30978:17;30971:47;31035:131;31161:4;31035:131;:::i;:::-;31027:139;;30754:419;;;:::o;31179:225::-;31319:34;31315:1;31307:6;31303:14;31296:58;31388:8;31383:2;31375:6;31371:15;31364:33;31179:225;:::o;31410:366::-;31552:3;31573:67;31637:2;31632:3;31573:67;:::i;:::-;31566:74;;31649:93;31738:3;31649:93;:::i;:::-;31767:2;31762:3;31758:12;31751:19;;31410:366;;;:::o;31782:419::-;31948:4;31986:2;31975:9;31971:18;31963:26;;32035:9;32029:4;32025:20;32021:1;32010:9;32006:17;31999:47;32063:131;32189:4;32063:131;:::i;:::-;32055:139;;31782:419;;;:::o;32207:179::-;32347:31;32343:1;32335:6;32331:14;32324:55;32207:179;:::o;32392:366::-;32534:3;32555:67;32619:2;32614:3;32555:67;:::i;:::-;32548:74;;32631:93;32720:3;32631:93;:::i;:::-;32749:2;32744:3;32740:12;32733:19;;32392:366;;;:::o;32764:419::-;32930:4;32968:2;32957:9;32953:18;32945:26;;33017:9;33011:4;33007:20;33003:1;32992:9;32988:17;32981:47;33045:131;33171:4;33045:131;:::i;:::-;33037:139;;32764:419;;;:::o
Swarm Source
ipfs://976fa6ae92f5601ed255f2f629e0b2635716857fb95515abdee42fca260c1706
Loading...
Loading
OVERVIEW
BullBear AI is launching AICORE, new token that will drive long-term growth for AIBB When AICORE is born, more and more AIBB will be burned & the supply will decrease a lot. It is the long-term growth driver for AIBB.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ARB | 100.00% | $0.269953 | 10.7093 | $2.89 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.