ERC-20
Overview
Max Total Supply
2,376,835,454.098958333333332793 XBMF
Holders
317
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XBMF
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-16 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.2; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.2; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.2; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.6.2; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.2; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // IERC165.sol pragma solidity ^0.6.2; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // IERC721.sol pragma solidity ^0.6.2; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } interface IBlootMF is IERC721 { function isDiamond(address diamond) external view returns (bool); function isFounder(address founder) external view returns (bool); } // File: contracts/XBMF.sol pragma solidity 0.6.2; contract XBMF is ERC20("xBMF", "XBMF"), Ownable { uint256 constant private MAX_SUPPLY = 3000000000 ether; uint256 constant private INITIAL_NFT_REWARD = 10000 ether; uint256 constant private INITIAL_DIAMOND_REWARD = 50000 ether; uint256 constant private INITIAL_FOUNDER_REWARD = 250000 ether; uint256 constant private REWARD_PER_DAY = 10 ether; uint256 constant private REWARD_PER_DAY_FOR_LEVEL_ONE = 13 ether; uint256 constant private REWARD_PER_DAY_FOR_LEVEL_TWO = 17 ether; uint256 constant private REWARD_PER_DAY_FOR_LEVEL_THREE = 25 ether; uint256 constant private SECS_IN_DAY = 86400; uint256 constant private REWARD_DENOMINATOR = 1000000000000000000; address constant private BLOOTMF_ADDRESS = 0xff006C70Ccfe8552E344B299d28AA84CEfda8B11; uint256 private contractBirthTime; uint256 private accClaimCounter; uint256 private nftRewardCounter; uint256 private diamondRewardCounter; uint256 private founderRewardCounter; address private minter; mapping(uint256 => uint256) private rewards; mapping(uint256 => uint256) private lastUpdate; mapping(uint256 => uint256) private stakeBoosterLevel; mapping(uint256 => uint256) private rewardForLevel; mapping(address => bool) private founderClaims; mapping(address => bool) private diamondClaims; mapping(uint => bool) private blootMFClaims; IBlootMF BlootMF = IBlootMF(BLOOTMF_ADDRESS); modifier onlyMinter { if (msg.sender != minter) revert(); _; } constructor() public { contractBirthTime = now; rewardForLevel[0] = REWARD_PER_DAY; rewardForLevel[1] = REWARD_PER_DAY_FOR_LEVEL_ONE; rewardForLevel[2] = REWARD_PER_DAY_FOR_LEVEL_TWO; rewardForLevel[3] = REWARD_PER_DAY_FOR_LEVEL_THREE; } function hasClaimedFounderInitialReward(address founder) public view returns (bool) { return founderClaims[founder]; } function hasClaimedDiamondInitialReward(address diamond) public view returns (bool) { return diamondClaims[diamond]; } function hasClaimedBlootMFInitialReward(uint256 nftId) public view returns (bool) { return blootMFClaims[nftId]; } function claimFounderInitialReward() public { require(BlootMF.isFounder(msg.sender) == true, "Your account isn't a Founder"); require(founderClaims[msg.sender] == false, "You have already claimed this reward"); founderClaims[msg.sender] = true; founderRewardCounter += 1; _mint(msg.sender,INITIAL_FOUNDER_REWARD); } function claimDiamondInitialReward() public { require(BlootMF.isDiamond(msg.sender) == true, "Your account isn't a Diamond"); require(diamondClaims[msg.sender] == false, "You have already claimed this reward"); diamondClaims[msg.sender] = true; diamondRewardCounter += 1; _mint(msg.sender, INITIAL_DIAMOND_REWARD); } function claimBlootMFInitialReward(uint256 nftId) public { require(BlootMF.ownerOf(nftId) == msg.sender, "You don't hold this NFT in your wallet"); require(blootMFClaims[nftId] == false, "You have already claimed this reward"); blootMFClaims[nftId] = true; nftRewardCounter += 1; _mint(msg.sender, INITIAL_NFT_REWARD); } function getDiamondRewardCount() public view returns (uint256) { return diamondRewardCounter; } function getFounderRewardCount() public view returns (uint256) { return founderRewardCounter; } function getNftRewardCount() public view returns (uint256) { return nftRewardCounter; } function viewAccumulatedDecimalRewards(uint256 nftId) public view returns (uint256[2] memory) { uint256 time = block.timestamp; uint256 lastTime = lastUpdate[nftId]; if (lastTime == 0) { lastTime = contractBirthTime; } uint256 level = stakeBoosterLevel[nftId]; uint256 dailyReward = rewardForLevel[level]; uint256 timePassed = time.sub(lastTime); uint256 additionalRewards = dailyReward.mul(timePassed).div(SECS_IN_DAY); uint256[2] memory res = [rewards[nftId].add(additionalRewards), REWARD_DENOMINATOR]; return res; } function viewAccumulatedFullTokenRewards(uint256 nftId) public view returns (uint256) { uint256 time = block.timestamp; uint256 lastTime = lastUpdate[nftId]; if (lastTime == 0) { lastTime = contractBirthTime; } uint256 level = stakeBoosterLevel[nftId]; uint256 dailyReward = rewardForLevel[level]; uint256 timePassed = time.sub(lastTime); uint256 additionalRewards = dailyReward.mul(timePassed).div(SECS_IN_DAY); return rewards[nftId].add(additionalRewards).div(REWARD_DENOMINATOR); } function claimAccumulatedRewards(uint256 nftId) public { require(BlootMF.ownerOf(nftId) == msg.sender, "You don't own this NFT"); require(totalSupply() <= MAX_SUPPLY, "Mint can't exceed max supply"); uint256 level = stakeBoosterLevel[nftId]; uint256 dailyReward = rewardForLevel[level]; uint256 time = block.timestamp; uint256 lastTime = lastUpdate[nftId]; if (lastTime == 0) { lastTime = contractBirthTime; } uint256 timePassed = time.sub(lastTime); uint256 additionalRewards = dailyReward.mul(timePassed).div(SECS_IN_DAY); rewards[nftId] = rewards[nftId].add(additionalRewards); lastUpdate[nftId] = time; uint256 payout = rewards[nftId]; rewards[nftId] = 0; accClaimCounter += 1; _mint(msg.sender, payout); } function addLevel(uint256[] memory nftIds, uint256 level) public onlyOwner { for (uint i=0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; stakeBoosterLevel[nftId] = level; } } function isFounder(address founder) public view returns (bool) { return BlootMF.isFounder(founder); } function isDiamond(address diamond) public view returns (bool) { return BlootMF.isDiamond(diamond); } function getTotalAccClaimCount() public view returns (uint256) { return accClaimCounter; } function getContractBirthTime() public view returns (uint256) { return contractBirthTime; } function getTimeSinceContractBirth() public view returns (uint256) { return now - contractBirthTime; } function getMaxSupply() public pure returns (uint256) { return MAX_SUPPLY; } function setMinter(address _minter) public onlyOwner { minter = _minter; } function getMinter() public view returns (address) { return minter; } function ownerMint(address _to, uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= MAX_SUPPLY, "Mint can't exceed max supply"); _mint(_to, _amount); } function minterMint(address _to, uint256 _amount) external onlyMinter { require(totalSupply().add(_amount) <= MAX_SUPPLY, "Mint can't exceed max supply"); _mint(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"addLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"claimAccumulatedRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"claimBlootMFInitialReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDiamondInitialReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFounderInitialReward","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":[],"name":"getContractBirthTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDiamondRewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFounderRewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNftRewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeSinceContractBirth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAccClaimCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"hasClaimedBlootMFInitialReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"diamond","type":"address"}],"name":"hasClaimedDiamondInitialReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"founder","type":"address"}],"name":"hasClaimedFounderInitialReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"diamond","type":"address"}],"name":"isDiamond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"founder","type":"address"}],"name":"isFounder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"minterMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"viewAccumulatedDecimalRewards","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"viewAccumulatedFullTokenRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405273ff006c70ccfe8552e344b299d28aa84cefda8b11601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060400160405280600481526020017f78424d46000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f58424d46000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000eb9291906200026d565b508060049080519060200190620001049291906200026d565b506012600560006101000a81548160ff021916908360ff16021790555050506000620001356200026560201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35042600681905550678ac7230489e80000600f60008081526020019081526020016000208190555067b469471f80140000600f6000600181526020019081526020016000208190555067ebec21ee1da40000600f6000600281526020019081526020016000208190555068015af1d78b58c40000600f600060038152602001908152602001600020819055506200031c565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002b057805160ff1916838001178555620002e1565b82800160010185558215620002e1579182015b82811115620002e0578251825591602001919060010190620002c3565b5b509050620002f09190620002f4565b5090565b6200031991905b8082111562000315576000816000905550600101620002fb565b5090565b90565b613476806200032c6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636c1178af11610130578063a9059cbb116100b8578063db9844d71161007c578063db9844d714610ae4578063dd62ed3e14610b40578063f2fde38b14610bb8578063f366751714610bfc578063fca3b5aa14610c4657610227565b8063a9059cbb14610924578063ae0817681461098a578063b728402a146109a8578063c4f21231146109c6578063c7b5784114610a8857610227565b80638408763c116100ff5780638408763c146107a15780638da5cb5b146107e757806391ffec581461083157806395d89b411461083b578063a457c2d7146108be57610227565b80636c1178af146106c557806370a08231146106e3578063715018a61461073b5780637fd65a3c1461074557610227565b8063313ce567116101b3578063484b973c11610182578063484b973c146105ff5780634c0f38c21461064d57806352382cb41461066b5780636058a9f41461068957806361120201146106a757610227565b8063313ce56714610529578063395093511461054d5780633a0c0907146105b357806343a5aae8146105bd57610227565b806318160ddd116101fa57806318160ddd146103ad5780631e20e752146103cb57806321f314ca14610427578063224014051461047557806323b872dd146104a357610227565b8063037c36ce1461022c57806306fdde031461025a578063095ea7b3146102dd5780630e58339f14610343575b600080fd5b6102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610c8a565b005b610262610e8c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a2578082015181840152602081019050610287565b50505050905090810190601f1680156102cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b604051808215151515815260200191505060405180910390f35b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050610f4c565b6040518082600260200280838360005b8381101561039a57808201518184015260208101905061037f565b5050505090500191505060405180910390f35b6103b561104e565b6040518082815260200191505060405180910390f35b61040d600480360360208110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611058565b604051808215151515815260200191505060405180910390f35b6104736004803603604081101561043d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ae565b005b6104a16004803603602081101561048b57600080fd5b81019080803590602001909291905050506111b1565b005b61050f600480360360608110156104b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114d2565b604051808215151515815260200191505060405180910390f35b6105316115ab565b604051808260ff1660ff16815260200191505060405180910390f35b6105996004803603604081101561056357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115c2565b604051808215151515815260200191505060405180910390f35b6105bb611675565b005b6105e9600480360360208110156105d357600080fd5b81019080803590602001909291905050506118f0565b6040518082815260200191505060405180910390f35b61064b6004803603604081101561061557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119dd565b005b610655611b50565b6040518082815260200191505060405180910390f35b610673611b64565b6040518082815260200191505060405180910390f35b610691611b6e565b6040518082815260200191505060405180910390f35b6106af611b7a565b6040518082815260200191505060405180910390f35b6106cd611b84565b6040518082815260200191505060405180910390f35b610725600480360360208110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b8e565b6040518082815260200191505060405180910390f35b610743611bd6565b005b6107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d61565b604051808215151515815260200191505060405180910390f35b6107cd600480360360208110156107b757600080fd5b8101908080359060200190929190505050611db7565b604051808215151515815260200191505060405180910390f35b6107ef611de1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610839611e0b565b005b610843612086565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610883578082015181840152602081019050610868565b50505050905090810190601f1680156108b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61090a600480360360408110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612128565b604051808215151515815260200191505060405180910390f35b6109706004803603604081101561093a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121f5565b604051808215151515815260200191505060405180910390f35b610992612213565b6040518082815260200191505060405180910390f35b6109b061221d565b6040518082815260200191505060405180910390f35b610a86600480360360408110156109dc57600080fd5b81019080803590602001906401000000008111156109f957600080fd5b820183602082011115610a0b57600080fd5b80359060200191846020830284011164010000000083111715610a2d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612227565b005b610aca60048036036020811015610a9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612343565b604051808215151515815260200191505060405180910390f35b610b2660048036036020811015610afa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612426565b604051808215151515815260200191505060405180910390f35b610ba260048036036040811015610b5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612509565b6040518082815260200191505060405180910390f35b610bfa60048036036020811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b610c046127a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c8860048036036020811015610c5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127ca565b005b3373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d6020811015610d3e57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610dbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133646026913960400191505060405180910390fd5b600015156012600083815260200190815260200160002060009054906101000a900460ff16151514610e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008282540192505081905550610e893369021e19e0c9bab24000006128d8565b50565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f245780601f10610ef957610100808354040283529160200191610f24565b820191906000526020600020905b815481529060010190602001808311610f0757829003601f168201915b5050505050905090565b6000610f42610f3b612a9f565b8484612aa7565b6001905092915050565b610f5461328c565b60004290506000600d60008581526020019081526020016000205490506000811415610f805760065490505b6000600e60008681526020019081526020016000205490506000600f60008381526020019081526020016000205490506000610fc58486612c9e90919063ffffffff16565b90506000610ff162015180610fe38486612ce890919063ffffffff16565b612d6e90919063ffffffff16565b9050610ffb61328c565b604051806040016040528061102c84600c60008e815260200190815260200160002054612db890919063ffffffff16565b8152602001670de0b6b3a7640000815250905080975050505050505050919050565b6000600254905090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110857600080fd5b6b09b18ab5df7180b6b800000061112f8261112161104e565b612db890919063ffffffff16565b11156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b6111ad82826128d8565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d602081101561126557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f596f7520646f6e2774206f776e2074686973204e46540000000000000000000081525060200191505060405180910390fd5b6b09b18ab5df7180b6b800000061131461104e565b1115611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b6000600e60008381526020019081526020016000205490506000600f600083815260200190815260200160002054905060004290506000600d600086815260200190815260200160002054905060008114156113e45760065490505b60006113f98284612c9e90919063ffffffff16565b90506000611425620151806114178488612ce890919063ffffffff16565b612d6e90919063ffffffff16565b905061144d81600c60008a815260200190815260200160002054612db890919063ffffffff16565b600c60008981526020019081526020016000208190555083600d6000898152602001908152602001600020819055506000600c60008981526020019081526020016000205490506000600c60008a81526020019081526020016000208190555060016007600082825401925050819055506114c833826128d8565b5050505050505050565b60006114df848484612e40565b6115a0846114eb612a9f565b61159b856040518060600160405280602881526020016133ab60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611551612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b612aa7565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061166b6115cf612a9f565b8461166685600160006115e0612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b612aa7565b6001905092915050565b60011515601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561171857600080fd5b505afa15801561172c573d6000803e3d6000fd5b505050506040513d602081101561174257600080fd5b81019080805190602001909291905050501515146117c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7572206163636f756e742069736e2774206120466f756e6465720000000081525060200191505060405180910390fd5b60001515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600082825401925050819055506118ee336934f086f3b33b684000006128d8565b565b6000804290506000600d6000858152602001908152602001600020549050600081141561191d5760065490505b6000600e60008681526020019081526020016000205490506000600f600083815260200190815260200160002054905060006119628486612c9e90919063ffffffff16565b9050600061198e620151806119808486612ce890919063ffffffff16565b612d6e90919063ffffffff16565b90506119d0670de0b6b3a76400006119c283600c60008d815260200190815260200160002054612db890919063ffffffff16565b612d6e90919063ffffffff16565b9650505050505050919050565b6119e5612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6b09b18ab5df7180b6b8000000611ace82611ac061104e565b612db890919063ffffffff16565b1115611b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b611b4c82826128d8565b5050565b60006b09b18ab5df7180b6b8000000905090565b6000600a54905090565b60006006544203905090565b6000600954905090565b6000600854905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bde612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60011515601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eae57600080fd5b505afa158015611ec2573d6000803e3d6000fd5b505050506040513d6020811015611ed857600080fd5b8101908080519060200190929190505050151514611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7572206163636f756e742069736e27742061204469616d6f6e640000000081525060200191505060405180910390fd5b60001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612007576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000828254019250508190555061208433690a968163f0a57b4000006128d8565b565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561211e5780601f106120f35761010080835404028352916020019161211e565b820191906000526020600020905b81548152906001019060200180831161210157829003601f168201915b5050505050905090565b60006121eb612135612a9f565b846121e68560405180606001604052806025815260200161341c602591396001600061215f612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b612aa7565b6001905092915050565b6000612209612202612a9f565b8484612e40565b6001905092915050565b6000600754905090565b6000600654905090565b61222f612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b825181101561233e57600083828151811061230e57fe5b6020026020010151905082600e6000838152602001908152602001600020819055505080806001019150506122f7565b505050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123e457600080fd5b505afa1580156123f8573d6000803e3d6000fd5b505050506040513d602081101561240e57600080fd5b81019080805190602001909291905050509050919050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124c757600080fd5b505afa1580156124db573d6000803e3d6000fd5b505050506040513d60208110156124f157600080fd5b81019080805190602001909291905050509050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612598612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132f66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127d2612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612894576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612987600083836131c1565b61299c81600254612db890919063ffffffff16565b6002819055506129f3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133f86024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061331c6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000612ce083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613101565b905092915050565b600080831415612cfb5760009050612d68565b6000828402905082848281612d0c57fe5b0414612d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061338a6021913960400191505060405180910390fd5b809150505b92915050565b6000612db083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131c6565b905092915050565b600080828401905083811015612e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133d36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132af6023913960400191505060405180910390fd5b612f578383836131c1565b612fc28160405180606001604052806026815260200161333e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613055816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613173578082015181840152602081019050613158565b50505050905090810190601f1680156131a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b505050565b60008083118290613272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561323757808201518184015260208101905061321c565b50505050905090810190601f1680156132645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161327e57fe5b049050809150509392505050565b604051806040016040528060029060208202803883398082019150509050509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373596f75206861766520616c726561647920636c61696d65642074686973207265776172644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f7520646f6e277420686f6c642074686973204e465420696e20796f75722077616c6c6574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3a5ed07e0eb4d0d91f106247f317ad59f19a7e83dac360363b6a0bd60ea731164736f6c63430006020033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c80636c1178af11610130578063a9059cbb116100b8578063db9844d71161007c578063db9844d714610ae4578063dd62ed3e14610b40578063f2fde38b14610bb8578063f366751714610bfc578063fca3b5aa14610c4657610227565b8063a9059cbb14610924578063ae0817681461098a578063b728402a146109a8578063c4f21231146109c6578063c7b5784114610a8857610227565b80638408763c116100ff5780638408763c146107a15780638da5cb5b146107e757806391ffec581461083157806395d89b411461083b578063a457c2d7146108be57610227565b80636c1178af146106c557806370a08231146106e3578063715018a61461073b5780637fd65a3c1461074557610227565b8063313ce567116101b3578063484b973c11610182578063484b973c146105ff5780634c0f38c21461064d57806352382cb41461066b5780636058a9f41461068957806361120201146106a757610227565b8063313ce56714610529578063395093511461054d5780633a0c0907146105b357806343a5aae8146105bd57610227565b806318160ddd116101fa57806318160ddd146103ad5780631e20e752146103cb57806321f314ca14610427578063224014051461047557806323b872dd146104a357610227565b8063037c36ce1461022c57806306fdde031461025a578063095ea7b3146102dd5780630e58339f14610343575b600080fd5b6102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610c8a565b005b610262610e8c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a2578082015181840152602081019050610287565b50505050905090810190601f1680156102cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b604051808215151515815260200191505060405180910390f35b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050610f4c565b6040518082600260200280838360005b8381101561039a57808201518184015260208101905061037f565b5050505090500191505060405180910390f35b6103b561104e565b6040518082815260200191505060405180910390f35b61040d600480360360208110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611058565b604051808215151515815260200191505060405180910390f35b6104736004803603604081101561043d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110ae565b005b6104a16004803603602081101561048b57600080fd5b81019080803590602001909291905050506111b1565b005b61050f600480360360608110156104b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114d2565b604051808215151515815260200191505060405180910390f35b6105316115ab565b604051808260ff1660ff16815260200191505060405180910390f35b6105996004803603604081101561056357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115c2565b604051808215151515815260200191505060405180910390f35b6105bb611675565b005b6105e9600480360360208110156105d357600080fd5b81019080803590602001909291905050506118f0565b6040518082815260200191505060405180910390f35b61064b6004803603604081101561061557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119dd565b005b610655611b50565b6040518082815260200191505060405180910390f35b610673611b64565b6040518082815260200191505060405180910390f35b610691611b6e565b6040518082815260200191505060405180910390f35b6106af611b7a565b6040518082815260200191505060405180910390f35b6106cd611b84565b6040518082815260200191505060405180910390f35b610725600480360360208110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b8e565b6040518082815260200191505060405180910390f35b610743611bd6565b005b6107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d61565b604051808215151515815260200191505060405180910390f35b6107cd600480360360208110156107b757600080fd5b8101908080359060200190929190505050611db7565b604051808215151515815260200191505060405180910390f35b6107ef611de1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610839611e0b565b005b610843612086565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610883578082015181840152602081019050610868565b50505050905090810190601f1680156108b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61090a600480360360408110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612128565b604051808215151515815260200191505060405180910390f35b6109706004803603604081101561093a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121f5565b604051808215151515815260200191505060405180910390f35b610992612213565b6040518082815260200191505060405180910390f35b6109b061221d565b6040518082815260200191505060405180910390f35b610a86600480360360408110156109dc57600080fd5b81019080803590602001906401000000008111156109f957600080fd5b820183602082011115610a0b57600080fd5b80359060200191846020830284011164010000000083111715610a2d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612227565b005b610aca60048036036020811015610a9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612343565b604051808215151515815260200191505060405180910390f35b610b2660048036036020811015610afa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612426565b604051808215151515815260200191505060405180910390f35b610ba260048036036040811015610b5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612509565b6040518082815260200191505060405180910390f35b610bfa60048036036020811015610bce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b610c046127a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c8860048036036020811015610c5c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127ca565b005b3373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d6020811015610d3e57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610dbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133646026913960400191505060405180910390fd5b600015156012600083815260200190815260200160002060009054906101000a900460ff16151514610e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008282540192505081905550610e893369021e19e0c9bab24000006128d8565b50565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f245780601f10610ef957610100808354040283529160200191610f24565b820191906000526020600020905b815481529060010190602001808311610f0757829003601f168201915b5050505050905090565b6000610f42610f3b612a9f565b8484612aa7565b6001905092915050565b610f5461328c565b60004290506000600d60008581526020019081526020016000205490506000811415610f805760065490505b6000600e60008681526020019081526020016000205490506000600f60008381526020019081526020016000205490506000610fc58486612c9e90919063ffffffff16565b90506000610ff162015180610fe38486612ce890919063ffffffff16565b612d6e90919063ffffffff16565b9050610ffb61328c565b604051806040016040528061102c84600c60008e815260200190815260200160002054612db890919063ffffffff16565b8152602001670de0b6b3a7640000815250905080975050505050505050919050565b6000600254905090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110857600080fd5b6b09b18ab5df7180b6b800000061112f8261112161104e565b612db890919063ffffffff16565b11156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b6111ad82826128d8565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d602081101561126557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f596f7520646f6e2774206f776e2074686973204e46540000000000000000000081525060200191505060405180910390fd5b6b09b18ab5df7180b6b800000061131461104e565b1115611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b6000600e60008381526020019081526020016000205490506000600f600083815260200190815260200160002054905060004290506000600d600086815260200190815260200160002054905060008114156113e45760065490505b60006113f98284612c9e90919063ffffffff16565b90506000611425620151806114178488612ce890919063ffffffff16565b612d6e90919063ffffffff16565b905061144d81600c60008a815260200190815260200160002054612db890919063ffffffff16565b600c60008981526020019081526020016000208190555083600d6000898152602001908152602001600020819055506000600c60008981526020019081526020016000205490506000600c60008a81526020019081526020016000208190555060016007600082825401925050819055506114c833826128d8565b5050505050505050565b60006114df848484612e40565b6115a0846114eb612a9f565b61159b856040518060600160405280602881526020016133ab60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611551612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b612aa7565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061166b6115cf612a9f565b8461166685600160006115e0612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b612aa7565b6001905092915050565b60011515601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561171857600080fd5b505afa15801561172c573d6000803e3d6000fd5b505050506040513d602081101561174257600080fd5b81019080805190602001909291905050501515146117c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7572206163636f756e742069736e2774206120466f756e6465720000000081525060200191505060405180910390fd5b60001515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600082825401925050819055506118ee336934f086f3b33b684000006128d8565b565b6000804290506000600d6000858152602001908152602001600020549050600081141561191d5760065490505b6000600e60008681526020019081526020016000205490506000600f600083815260200190815260200160002054905060006119628486612c9e90919063ffffffff16565b9050600061198e620151806119808486612ce890919063ffffffff16565b612d6e90919063ffffffff16565b90506119d0670de0b6b3a76400006119c283600c60008d815260200190815260200160002054612db890919063ffffffff16565b612d6e90919063ffffffff16565b9650505050505050919050565b6119e5612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6b09b18ab5df7180b6b8000000611ace82611ac061104e565b612db890919063ffffffff16565b1115611b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d696e742063616e277420657863656564206d617820737570706c790000000081525060200191505060405180910390fd5b611b4c82826128d8565b5050565b60006b09b18ab5df7180b6b8000000905090565b6000600a54905090565b60006006544203905090565b6000600954905090565b6000600854905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bde612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60011515601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eae57600080fd5b505afa158015611ec2573d6000803e3d6000fd5b505050506040513d6020811015611ed857600080fd5b8101908080519060200190929190505050151514611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f7572206163636f756e742069736e27742061204469616d6f6e640000000081525060200191505060405180910390fd5b60001515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612007576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000828254019250508190555061208433690a968163f0a57b4000006128d8565b565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561211e5780601f106120f35761010080835404028352916020019161211e565b820191906000526020600020905b81548152906001019060200180831161210157829003601f168201915b5050505050905090565b60006121eb612135612a9f565b846121e68560405180606001604052806025815260200161341c602591396001600061215f612a9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b612aa7565b6001905092915050565b6000612209612202612a9f565b8484612e40565b6001905092915050565b6000600754905090565b6000600654905090565b61222f612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b825181101561233e57600083828151811061230e57fe5b6020026020010151905082600e6000838152602001908152602001600020819055505080806001019150506122f7565b505050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123e457600080fd5b505afa1580156123f8573d6000803e3d6000fd5b505050506040513d602081101561240e57600080fd5b81019080805190602001909291905050509050919050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124c757600080fd5b505afa1580156124db573d6000803e3d6000fd5b505050506040513d60208110156124f157600080fd5b81019080805190602001909291905050509050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612598612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132f66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127d2612a9f565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612894576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612987600083836131c1565b61299c81600254612db890919063ffffffff16565b6002819055506129f3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133f86024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061331c6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000612ce083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613101565b905092915050565b600080831415612cfb5760009050612d68565b6000828402905082848281612d0c57fe5b0414612d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061338a6021913960400191505060405180910390fd5b809150505b92915050565b6000612db083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131c6565b905092915050565b600080828401905083811015612e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133d36025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132af6023913960400191505060405180910390fd5b612f578383836131c1565b612fc28160405180606001604052806026815260200161333e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131019092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613055816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613173578082015181840152602081019050613158565b50505050905090810190601f1680156131a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b505050565b60008083118290613272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561323757808201518184015260208101905061321c565b50505050905090810190601f1680156132645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161327e57fe5b049050809150509392505050565b604051806040016040528060029060208202803883398082019150509050509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373596f75206861766520616c726561647920636c61696d65642074686973207265776172644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f7520646f6e277420686f6c642074686973204e465420696e20796f75722077616c6c6574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3a5ed07e0eb4d0d91f106247f317ad59f19a7e83dac360363b6a0bd60ea731164736f6c63430006020033
Deployed Bytecode Sourcemap
34420:7524:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34420:7524:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37488:371;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37488:371:0;;;;;;;;;;;;;;;;;:::i;:::-;;17627:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17627:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19733:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19733:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38226:628;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38226:628:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;38226:628:0;;;;;;;;;;;;;;;;18702:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36449:132;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36449:132:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41741:200;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41741:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39461:905;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39461:905:0;;;;;;;;;;;;;;;;;:::i;:::-;;20376:321;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20376:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18554:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21106:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21106:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36733:365;;;:::i;:::-;;38866:583;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38866:583:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41533:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41533:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41236:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37992:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41108:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37871:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38113:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18865:119;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18865:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28180:148;;;:::i;:::-;;36305:132;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36305:132:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36593:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36593:128:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27538:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37110:366;;;:::i;:::-;;17829:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17829:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21827:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21827:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19197:175;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19197:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40875:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40991:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40378:231;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40378:231:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;40378:231:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40378:231:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40378:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;40378:231:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40621:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40621:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40748;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40748:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19435:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19435:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28483:244;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28483:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;41438:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41338:88;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41338:88:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;37488:371;37591:10;37564:37;;:7;;;;;;;;;;;:15;;;37580:5;37564:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37564:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37564:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37564:22:0;;;;;;;;;;;;;;;;:37;;;37556:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37687:5;37663:29;;:13;:20;37677:5;37663:20;;;;;;;;;;;;;;;;;;;;;:29;;;37655:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37767:4;37744:13;:20;37758:5;37744:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37802:1;37782:16;;:21;;;;;;;;;;;37814:37;37820:10;34588:11;37814:5;:37::i;:::-;37488:371;:::o;17627:83::-;17664:13;17697:5;17690:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17627:83;:::o;19733:169::-;19816:4;19833:39;19842:12;:10;:12::i;:::-;19856:7;19865:6;19833:8;:39::i;:::-;19890:4;19883:11;;19733:169;;;;:::o;38226:628::-;38301:17;;:::i;:::-;38331:12;38346:15;38331:30;;38372:16;38391:10;:17;38402:5;38391:17;;;;;;;;;;;;38372:36;;38435:1;38423:8;:13;38419:74;;;38464:17;;38453:28;;38419:74;38503:13;38519:17;:24;38537:5;38519:24;;;;;;;;;;;;38503:40;;38554:19;38576:14;:21;38591:5;38576:21;;;;;;;;;;;;38554:43;;38608:18;38629;38638:8;38629:4;:8;;:18;;;;:::i;:::-;38608:39;;38658:25;38686:44;35054:5;38686:27;38702:10;38686:11;:15;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;38658:72;;38741:21;;:::i;:::-;:84;;;;;;;;38767:37;38786:17;38767:7;:14;38775:5;38767:14;;;;;;;;;;;;:18;;:37;;;;:::i;:::-;38741:84;;;;35112:19;38741:84;;;;;38843:3;38836:10;;;;;;;;;38226:628;;;:::o;18702:100::-;18755:7;18782:12;;18775:19;;18702:100;:::o;36449:132::-;36527:4;36551:13;:22;36565:7;36551:22;;;;;;;;;;;;;;;;;;;;;;;;;36544:29;;36449:132;;;:::o;41741:200::-;35958:6;;;;;;;;;;;35944:20;;:10;:20;;;35940:34;;35966:8;;;35940:34;34519:16:::1;41830:26;41848:7;41830:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:40;;41822:81;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41914:19;41920:3;41925:7;41914:5;:19::i;:::-;41741:200:::0;;:::o;39461:905::-;39562:10;39535:37;;:7;;;;;;;;;;;:15;;;39551:5;39535:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39535:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39535:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39535:22:0;;;;;;;;;;;;;;;;:37;;;39527:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34519:16;39618:13;:11;:13::i;:::-;:27;;39610:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39689:13;39705:17;:24;39723:5;39705:24;;;;;;;;;;;;39689:40;;39740:19;39762:14;:21;39777:5;39762:21;;;;;;;;;;;;39740:43;;39804:12;39819:15;39804:30;;39845:16;39864:10;:17;39875:5;39864:17;;;;;;;;;;;;39845:36;;39908:1;39896:8;:13;39892:74;;;39937:17;;39926:28;;39892:74;39986:18;40007;40016:8;40007:4;:8;;:18;;;;:::i;:::-;39986:39;;40036:25;40064:44;35054:5;40064:27;40080:10;40064:11;:15;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;40036:72;;40136:37;40155:17;40136:7;:14;40144:5;40136:14;;;;;;;;;;;;:18;;:37;;;;:::i;:::-;40119:7;:14;40127:5;40119:14;;;;;;;;;;;:54;;;;40206:4;40186:10;:17;40197:5;40186:17;;;;;;;;;;;:24;;;;40221:14;40238:7;:14;40246:5;40238:14;;;;;;;;;;;;40221:31;;40290:1;40273:7;:14;40281:5;40273:14;;;;;;;;;;;:18;;;;40321:1;40302:15;;:20;;;;;;;;;;;40333:25;40339:10;40351:6;40333:5;:25::i;:::-;39461:905;;;;;;;;:::o;20376:321::-;20482:4;20499:36;20509:6;20517:9;20528:6;20499:9;:36::i;:::-;20546:121;20555:6;20563:12;:10;:12::i;:::-;20577:89;20615:6;20577:89;;;;;;;;;;;;;;;;;:11;:19;20589:6;20577:19;;;;;;;;;;;;;;;:33;20597:12;:10;:12::i;:::-;20577:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20546:8;:121::i;:::-;20685:4;20678:11;;20376:321;;;;;:::o;18554:83::-;18595:5;18620:9;;;;;;;;;;;18613:16;;18554:83;:::o;21106:218::-;21194:4;21211:83;21220:12;:10;:12::i;:::-;21234:7;21243:50;21282:10;21243:11;:25;21255:12;:10;:12::i;:::-;21243:25;;;;;;;;;;;;;;;:34;21269:7;21243:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21211:8;:83::i;:::-;21312:4;21305:11;;21106:218;;;;:::o;36733:365::-;36829:4;36796:37;;:7;;;;;;;;;;;:17;;;36814:10;36796:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36796:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36796:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36796:29:0;;;;;;;;;;;;;;;;:37;;;36788:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36914:5;36885:34;;:13;:25;36899:10;36885:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;36877:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36999:4;36971:13;:25;36985:10;36971:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37038:1;37014:20;;:25;;;;;;;;;;;37050:40;37056:10;34724:12;37050:5;:40::i;:::-;36733:365::o;38866:583::-;38943:7;38963:12;38978:15;38963:30;;39004:16;39023:10;:17;39034:5;39023:17;;;;;;;;;;;;39004:36;;39067:1;39055:8;:13;39051:74;;;39096:17;;39085:28;;39051:74;39135:13;39151:17;:24;39169:5;39151:24;;;;;;;;;;;;39135:40;;39186:19;39208:14;:21;39223:5;39208:21;;;;;;;;;;;;39186:43;;39240:18;39261;39270:8;39261:4;:8;;:18;;;;:::i;:::-;39240:39;;39290:25;39318:44;35054:5;39318:27;39334:10;39318:11;:15;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;39290:72;;39380:61;35112:19;39380:37;39399:17;39380:7;:14;39388:5;39380:14;;;;;;;;;;;;:18;;:37;;;;:::i;:::-;:41;;:61;;;;:::i;:::-;39373:68;;;;;;;;38866:583;;;:::o;41533:196::-;27760:12;:10;:12::i;:::-;27750:22;;:6;;;;;;;;;;;:22;;;27742:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34519:16:::1;41618:26;41636:7;41618:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:40;;41610:81;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41702:19;41708:3;41713:7;41702:5;:19::i;:::-;41533:196:::0;;:::o;41236:90::-;41281:7;34519:16;41301:17;;41236:90;:::o;37992:109::-;38046:7;38073:20;;38066:27;;37992:109;:::o;41108:116::-;41166:7;41199:17;;41193:3;:23;41186:30;;41108:116;:::o;37871:109::-;37925:7;37952:20;;37945:27;;37871:109;:::o;38113:101::-;38163:7;38190:16;;38183:23;;38113:101;:::o;18865:119::-;18931:7;18958:9;:18;18968:7;18958:18;;;;;;;;;;;;;;;;18951:25;;18865:119;;;:::o;28180:148::-;27760:12;:10;:12::i;:::-;27750:22;;:6;;;;;;;;;;;:22;;;27742:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28287:1:::1;28250:40;;28271:6;;;;;;;;;;;28250:40;;;;;;;;;;;;28318:1;28301:6;;:19;;;;;;;;;;;;;;;;;;28180:148::o:0;36305:132::-;36383:4;36407:13;:22;36421:7;36407:22;;;;;;;;;;;;;;;;;;;;;;;;;36400:29;;36305:132;;;:::o;36593:128::-;36669:4;36693:13;:20;36707:5;36693:20;;;;;;;;;;;;;;;;;;;;;36686:27;;36593:128;;;:::o;27538:79::-;27576:7;27603:6;;;;;;;;;;;27596:13;;27538:79;:::o;37110:366::-;37206:4;37173:37;;:7;;;;;;;;;;;:17;;;37191:10;37173:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37173:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37173:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37173:29:0;;;;;;;;;;;;;;;;:37;;;37165:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37291:5;37262:34;;:13;:25;37276:10;37262:25;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;37254:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37376:4;37348:13;:25;37362:10;37348:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37415:1;37391:20;;:25;;;;;;;;;;;37427:41;37433:10;34656:11;37427:5;:41::i;:::-;37110:366::o;17829:87::-;17868:13;17901:7;17894:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17829:87;:::o;21827:269::-;21920:4;21937:129;21946:12;:10;:12::i;:::-;21960:7;21969:96;22008:15;21969:96;;;;;;;;;;;;;;;;;:11;:25;21981:12;:10;:12::i;:::-;21969:25;;;;;;;;;;;;;;;:34;21995:7;21969:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21937:8;:129::i;:::-;22084:4;22077:11;;21827:269;;;;:::o;19197:175::-;19283:4;19300:42;19310:12;:10;:12::i;:::-;19324:9;19335:6;19300:9;:42::i;:::-;19360:4;19353:11;;19197:175;;;;:::o;40875:104::-;40929:7;40956:15;;40949:22;;40875:104;:::o;40991:105::-;41044:7;41071:17;;41064:24;;40991:105;:::o;40378:231::-;27760:12;:10;:12::i;:::-;27750:22;;:6;;;;;;;;;;;:22;;;27742:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40469:6:::1;40476:1:::0;40469:8:::1;;40464:138;40483:6;:13;40479:1;:17;40464:138;;;40518:13;40534:6;40541:1;40534:9;;;;;;;;;;;;;;40518:25;;40585:5;40558:17;:24;40576:5;40558:24;;;;;;;;;;;:32;;;;40464:138;40498:3;;;;;;;40464:138;;;;40378:231:::0;;:::o;40621:115::-;40678:4;40702:7;;;;;;;;;;;:17;;;40720:7;40702:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40702:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40702:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40702:26:0;;;;;;;;;;;;;;;;40695:33;;40621:115;;;:::o;40748:::-;40805:4;40829:7;;;;;;;;;;;:17;;;40847:7;40829:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40829:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40829:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40829:26:0;;;;;;;;;;;;;;;;40822:33;;40748:115;;;:::o;19435:151::-;19524:7;19551:11;:18;19563:5;19551:18;;;;;;;;;;;;;;;:27;19570:7;19551:27;;;;;;;;;;;;;;;;19544:34;;19435:151;;;;:::o;28483:244::-;27760:12;:10;:12::i;:::-;27750:22;;:6;;;;;;;;;;;:22;;;27742:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28592:1:::1;28572:22;;:8;:22;;;;28564:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28682:8;28653:38;;28674:6;;;;;;;;;;;28653:38;;;;;;;;;;;;28711:8;28702:6;;:17;;;;;;;;;;;;;;;;;;28483:244:::0;:::o;41438:83::-;41480:7;41507:6;;;;;;;;;;;41500:13;;41438:83;:::o;41338:88::-;27760:12;:10;:12::i;:::-;27750:22;;:6;;;;;;;;;;;:22;;;27742:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41411:7:::1;41402:6;;:16;;;;;;;;;;;;;;;;;;41338:88:::0;:::o;23406:378::-;23509:1;23490:21;;:7;:21;;;;23482:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23560:49;23589:1;23593:7;23602:6;23560:20;:49::i;:::-;23637:24;23654:6;23637:12;;:16;;:24;;;;:::i;:::-;23622:12;:39;;;;23693:30;23716:6;23693:9;:18;23703:7;23693:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;23672:9;:18;23682:7;23672:18;;;;;;;;;;;;;;;:51;;;;23760:7;23739:37;;23756:1;23739:37;;;23769:6;23739:37;;;;;;;;;;;;;;;;;;23406:378;;:::o;657:106::-;710:15;745:10;738:17;;657:106;:::o;24974:346::-;25093:1;25076:19;;:5;:19;;;;25068:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25174:1;25155:21;;:7;:21;;;;25147:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25258:6;25228:11;:18;25240:5;25228:18;;;;;;;;;;;;;;;:27;25247:7;25228:27;;;;;;;;;;;;;;;:36;;;;25296:7;25280:32;;25289:5;25280:32;;;25305:6;25280:32;;;;;;;;;;;;;;;;;;24974:346;;;:::o;5203:136::-;5261:7;5288:43;5292:1;5295;5288:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5281:50;;5203:136;;;;:::o;6093:471::-;6151:7;6401:1;6396;:6;6392:47;;;6426:1;6419:8;;;;6392:47;6451:9;6467:1;6463;:5;6451:17;;6496:1;6491;6487;:5;;;;;;:10;6479:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6555:1;6548:8;;;6093:471;;;;;:::o;7040:132::-;7098:7;7125:39;7129:1;7132;7125:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7118:46;;7040:132;;;;:::o;4739:181::-;4797:7;4817:9;4833:1;4829;:5;4817:17;;4858:1;4853;:6;;4845:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4911:1;4904:8;;;4739:181;;;;:::o;22586:539::-;22710:1;22692:20;;:6;:20;;;;22684:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22794:1;22773:23;;:9;:23;;;;22765:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22849:47;22870:6;22878:9;22889:6;22849:20;:47::i;:::-;22929:71;22951:6;22929:71;;;;;;;;;;;;;;;;;:9;:17;22939:6;22929:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22909:9;:17;22919:6;22909:17;;;;;;;;;;;;;;;:91;;;;23034:32;23059:6;23034:9;:20;23044:9;23034:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23011:9;:20;23021:9;23011:20;;;;;;;;;;;;;;;:55;;;;23099:9;23082:35;;23091:6;23082:35;;;23110:6;23082:35;;;;;;;;;;;;;;;;;;22586:539;;;:::o;5642:192::-;5728:7;5761:1;5756;:6;;5764:12;5748:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5748:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5788:9;5804:1;5800;:5;5788:17;;5825:1;5818:8;;;5642:192;;;;;:::o;26345:92::-;;;;:::o;7668:278::-;7754:7;7786:1;7782;:5;7789:12;7774:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7774:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7813:9;7829:1;7825;:5;;;;;;7813:17;;7937:1;7930:8;;;7668:278;;;;;:::o;34420:7524::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;34420:7524:0;;;;:::o
Swarm Source
ipfs://b3a5ed07e0eb4d0d91f106247f317ad59f19a7e83dac360363b6a0bd60ea7311
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.