Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
0 XKEY
Holders
3,297
Market
Volume (24H)
0.015 ETH
Min Price (24H)
$50.63 @ 0.015000 ETH
Max Price (24H)
$50.63 @ 0.015000 ETH
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JRNYKeys
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; /** * @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); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } contract JRNYKeys is ERC1155 { address public admin; string public name; string public symbol; string public metadata; uint256 public maxSupply = 10000; uint256 public circulatingSupply; address public xoloContract; modifier onlyAdmin { require(admin == msg.sender, "Not allowed"); _; } modifier onlyXoloContract { require(xoloContract == msg.sender, "Not allowed"); _; } constructor( address _xoloContract, string memory _metadata ) ERC1155("") { xoloContract = _xoloContract; name = "XOLO Keys"; symbol = "XKEY"; metadata = _metadata; admin = msg.sender; } function redeem(address _to, uint256 _amounts) external onlyXoloContract { _burn(_to, 1, _amounts); unchecked{ circulatingSupply -= _amounts; maxSupply -= _amounts; } } function adminBatchMint( address[] memory _to, uint256[] memory _ids, uint256[] memory _amounts ) public onlyAdmin { for (uint256 i = 0; i < _to.length; i++) { _mint(_to[i], _ids[i], _amounts[i], ""); unchecked{ circulatingSupply += _amounts[i]; } } require(circulatingSupply <= maxSupply); } function updateMetadata(string memory _metadata) public onlyAdmin { metadata = _metadata; } function updateAdmin(address _newAdmin) public onlyAdmin { admin = _newAdmin; } function updateXoloContract(address _newAddress) public onlyAdmin { xoloContract = _newAddress; } function uri(uint256 _id) public view override returns (string memory) { return string(abi.encodePacked(metadata, uint2str(_id))); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155) returns (bool) { return super.supportsInterface(interfaceId); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_xoloContract","type":"address"},{"internalType":"string","name":"_metadata","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"adminBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amounts","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"updateAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_metadata","type":"string"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"updateXoloContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xoloContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526127106007553480156200001757600080fd5b5060405162002942380380620029428339810160408190526200003a91620001bf565b604080516020810190915260008152620000548162000100565b50600980546001600160a01b0319166001600160a01b0384161781556040805180820190915281815268584f4c4f204b65797360b81b6020909101908152620000a1916004919062000119565b5060408051808201909152600480825263584b455960e01b6020909201918252620000cf9160059162000119565b508051620000e590600690602084019062000119565b5050600380546001600160a01b031916331790555062000312565b80516200011590600290602084019062000119565b5050565b8280546200012790620002bf565b90600052602060002090601f0160209004810192826200014b576000855562000196565b82601f106200016657805160ff191683800117855562000196565b8280016001018555821562000196579182015b828111156200019657825182559160200191906001019062000179565b50620001a4929150620001a8565b5090565b5b80821115620001a45760008155600101620001a9565b60008060408385031215620001d357600080fd5b82516001600160a01b0381168114620001eb57600080fd5b602084810151919350906001600160401b03808211156200020b57600080fd5b818601915086601f8301126200022057600080fd5b815181811115620002355762000235620002fc565b604051601f8201601f19908116603f01168101908382118183101715620002605762000260620002fc565b8160405282815289868487010111156200027957600080fd5b600093505b828410156200029d57848401860151818501870152928501926200027e565b82841115620002af5760008684830101525b8096505050505050509250929050565b600181811c90821680620002d457607f821691505b60208210811415620002f657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61262080620003226000396000f3fe608060405234801561001057600080fd5b506004361061016b5760003560e01c8063918b5be1116100cd578063d5abeb0111610081578063e985e9c511610066578063e985e9c5146102ef578063f242432a14610338578063f851a4401461034b57600080fd5b8063d5abeb01146102d3578063e2f273bd146102dc57600080fd5b806395d89b41116100b257806395d89b4114610273578063a22cb4651461027b578063d0a8bd671461028e57600080fd5b8063918b5be1146102575780639358928b1461026a57600080fd5b80631e9a695011610124578063392f37e911610109578063392f37e91461021c5780634e1273f41461022457806356c58b121461024457600080fd5b80631e9a6950146101f65780632eb2c2d61461020957600080fd5b806306fdde031161015557806306fdde03146101b95780630e89341c146101ce5780630f8b5d81146101e157600080fd5b8062fdd58e1461017057806301ffc9a714610196575b600080fd5b61018361017e366004611e6d565b61036b565b6040519081526020015b60405180910390f35b6101a96101a4366004611f83565b61042e565b604051901515815260200161018d565b6101c161043f565b60405161018d919061227b565b6101c16101dc36600461200e565b6104cd565b6101f46101ef366004611cd4565b610501565b005b6101f4610204366004611e6d565b6105af565b6101f4610217366004611d22565b610638565b6101c16106e7565b610237610232366004611e97565b6106f4565b60405161018d9190612243565b6101f4610252366004611efb565b610832565b6101f4610265366004611fbd565b61095a565b61018360085481565b6101c16109d8565b6101f4610289366004611e31565b6109e5565b6009546102ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018d565b61018360075481565b6101f46102ea366004611cd4565b610b08565b6101a96102fd366004611cef565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101f4610346366004611dcc565b610bb6565b6003546102ae9073ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff83166103fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b600061043982610c5e565b92915050565b6004805461044c906123ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610478906123ae565b80156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b505050505081565b606060066104da83610d41565b6040516020016104eb9291906120aa565b6040516020818303038152906040529050919050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146105685760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60095473ffffffffffffffffffffffffffffffffffffffff1633146106165760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b61062282600183610e9e565b6008805482900390556007805491909103905550565b73ffffffffffffffffffffffffffffffffffffffff8516331480610661575061066185336102fd565b6106d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016103f2565b6106e08585858585611072565b5050505050565b6006805461044c906123ae565b6060815183511461076d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016103f2565b6000835167ffffffffffffffff811115610789576107896124c6565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b50905060005b845181101561082a576107fd8582815181106107d6576107d6612497565b60200260200101518583815181106107f0576107f0612497565b602002602001015161036b565b82828151811061080f5761080f612497565b60209081029190910101526108238161242f565b90506107b8565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146108995760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b60005b83518110156109435761090b8482815181106108ba576108ba612497565b60200260200101518483815181106108d4576108d4612497565b60200260200101518484815181106108ee576108ee612497565b60200260200101516040518060200160405280600081525061135e565b81818151811061091d5761091d612497565b60209081029190910101516008805490910190558061093b8161242f565b91505061089c565b50600754600854111561095557600080fd5b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109c15760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b80516109d4906006906020840190611aa5565b5050565b6005805461044c906123ae565b3373ffffffffffffffffffffffffffffffffffffffff83161415610a715760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016103f2565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b6f5760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8516331480610bdf5750610bdf85336102fd565b610c515760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016103f2565b6106e085858585856114ab565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480610cf157507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061043957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610439565b606081610d8157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610dab5780610d958161242f565b9150610da49050600a836122ef565b9150610d85565b60008167ffffffffffffffff811115610dc657610dc66124c6565b6040519080825280601f01601f191660200182016040528015610df0576020820181803683370190505b509050815b8515610e9557610e06600182612367565b90506000610e15600a886122ef565b610e2090600a61232a565b610e2a9088612367565b610e359060306122ca565b905060008160f81b905080848481518110610e5257610e52612497565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610e8c600a896122ef565b97505050610df5565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f275760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103f2565b33610f5781856000610f38876116a8565b610f41876116a8565b5050604080516020810190915260009052505050565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205482811015610ffa5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016103f2565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b81518351146110e95760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016103f2565b73ffffffffffffffffffffffffffffffffffffffff84166111725760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103f2565b3360005b84518110156112c957600085828151811061119357611193612497565b6020026020010151905060008583815181106111b1576111b1612497565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156112645760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016103f2565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906112ae9084906122b2565b92505081905550505050806112c29061242f565b9050611176565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611340929190612256565b60405180910390a46113568187878787876116f3565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff84166113e75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016103f2565b33611401816000876113f8886116a8565b6106e0886116a8565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091528120805485929061143e9084906122b2565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106e081600087878787611921565b73ffffffffffffffffffffffffffffffffffffffff84166115345760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103f2565b336115448187876113f8886116a8565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156115e85760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016103f2565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906116329084906122b2565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461169f828888888888611921565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106116e2576116e2612497565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611356576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061176a9089908990889088908890600401612188565b602060405180830381600087803b15801561178457600080fd5b505af19250505080156117b4575060408051601f3d908101601f191682019092526117b191810190611fa0565b60015b61186a576117c06124f5565b806308c379a014156117fa57506117d5612511565b806117e057506117fc565b8060405162461bcd60e51b81526004016103f2919061227b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016103f2565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461169f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016103f2565b73ffffffffffffffffffffffffffffffffffffffff84163b15611356576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619061199890899089908890889088906004016121f3565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e2575060408051601f3d908101601f191682019092526119df91810190611fa0565b60015b6119ee576117c06124f5565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461169f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016103f2565b828054611ab1906123ae565b90600052602060002090601f016020900481019282611ad35760008555611b19565b82601f10611aec57805160ff1916838001178555611b19565b82800160010185558215611b19579182015b82811115611b19578251825591602001919060010190611afe565b50611b25929150611b29565b5090565b5b80821115611b255760008155600101611b2a565b600067ffffffffffffffff831115611b5857611b586124c6565b604051611b6f6020601f19601f8701160182612402565b809150838152848484011115611b8457600080fd5b83836020830137600060208583010152509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bc057600080fd5b919050565b600082601f830112611bd657600080fd5b81356020611be38261228e565b604051611bf08282612402565b8381528281019150858301600585901b87018401881015611c1057600080fd5b60005b85811015611c3657611c2482611b9c565b84529284019290840190600101611c13565b5090979650505050505050565b600082601f830112611c5457600080fd5b81356020611c618261228e565b604051611c6e8282612402565b8381528281019150858301600585901b87018401881015611c8e57600080fd5b60005b85811015611c3657813584529284019290840190600101611c91565b600082601f830112611cbe57600080fd5b611ccd83833560208501611b3e565b9392505050565b600060208284031215611ce657600080fd5b611ccd82611b9c565b60008060408385031215611d0257600080fd5b611d0b83611b9c565b9150611d1960208401611b9c565b90509250929050565b600080600080600060a08688031215611d3a57600080fd5b611d4386611b9c565b9450611d5160208701611b9c565b9350604086013567ffffffffffffffff80821115611d6e57600080fd5b611d7a89838a01611c43565b94506060880135915080821115611d9057600080fd5b611d9c89838a01611c43565b93506080880135915080821115611db257600080fd5b50611dbf88828901611cad565b9150509295509295909350565b600080600080600060a08688031215611de457600080fd5b611ded86611b9c565b9450611dfb60208701611b9c565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e2557600080fd5b611dbf88828901611cad565b60008060408385031215611e4457600080fd5b611e4d83611b9c565b915060208301358015158114611e6257600080fd5b809150509250929050565b60008060408385031215611e8057600080fd5b611e8983611b9c565b946020939093013593505050565b60008060408385031215611eaa57600080fd5b823567ffffffffffffffff80821115611ec257600080fd5b611ece86838701611bc5565b93506020850135915080821115611ee457600080fd5b50611ef185828601611c43565b9150509250929050565b600080600060608486031215611f1057600080fd5b833567ffffffffffffffff80821115611f2857600080fd5b611f3487838801611bc5565b94506020860135915080821115611f4a57600080fd5b611f5687838801611c43565b93506040860135915080821115611f6c57600080fd5b50611f7986828701611c43565b9150509250925092565b600060208284031215611f9557600080fd5b8135611ccd816125b9565b600060208284031215611fb257600080fd5b8151611ccd816125b9565b600060208284031215611fcf57600080fd5b813567ffffffffffffffff811115611fe657600080fd5b8201601f81018413611ff757600080fd5b61200684823560208401611b3e565b949350505050565b60006020828403121561202057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156120575781518752958201959082019060010161203b565b509495945050505050565b6000815180845261207a81602086016020860161237e565b601f01601f19169290920160200192915050565b600081516120a081856020860161237e565b9290920192915050565b600080845481600182811c9150808316806120c657607f831692505b60208084108214156120ff577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561211357600181146121425761216f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061216f565b60008b81526020902060005b868110156121675781548b82015290850190830161214e565b505084890196505b50505050505061217f818561208e565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526121c160a0830186612027565b82810360608401526121d38186612027565b905082810360808401526121e78185612062565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261223860a0830184612062565b979650505050505050565b602081526000611ccd6020830184612027565b6040815260006122696040830185612027565b828103602084015261217f8185612027565b602081526000611ccd6020830184612062565b600067ffffffffffffffff8211156122a8576122a86124c6565b5060051b60200190565b600082198211156122c5576122c5612468565b500190565b600060ff821660ff84168060ff038211156122e7576122e7612468565b019392505050565b600082612325577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561236257612362612468565b500290565b60008282101561237957612379612468565b500390565b60005b83811015612399578181015183820152602001612381565b838111156123a8576000848401525b50505050565b600181811c908216806123c257607f821691505b602082108114156123fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f19601f830116810181811067ffffffffffffffff82111715612428576124286124c6565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561246157612461612468565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561250e5760046000803e5060005160e01c5b90565b600060443d101561251f5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561256d57505050505090565b82850191508151818111156125855750505050505090565b843d870101602082850101111561259f5750505050505090565b6125ae60208286010187612402565b509095945050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146125e757600080fd5b5056fea264697066735822122009ac72d60a4609ffbba14b3109ba82478403abbe85a1485e16437c468736fa1464736f6c634300080700330000000000000000000000000000000005756b5a03e751bd0280e3a55bc05b6e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645777706e58545875774c4278393544685331545863684d6839687a6b3876656e6d4d4b644c6a54337353632f00000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016b5760003560e01c8063918b5be1116100cd578063d5abeb0111610081578063e985e9c511610066578063e985e9c5146102ef578063f242432a14610338578063f851a4401461034b57600080fd5b8063d5abeb01146102d3578063e2f273bd146102dc57600080fd5b806395d89b41116100b257806395d89b4114610273578063a22cb4651461027b578063d0a8bd671461028e57600080fd5b8063918b5be1146102575780639358928b1461026a57600080fd5b80631e9a695011610124578063392f37e911610109578063392f37e91461021c5780634e1273f41461022457806356c58b121461024457600080fd5b80631e9a6950146101f65780632eb2c2d61461020957600080fd5b806306fdde031161015557806306fdde03146101b95780630e89341c146101ce5780630f8b5d81146101e157600080fd5b8062fdd58e1461017057806301ffc9a714610196575b600080fd5b61018361017e366004611e6d565b61036b565b6040519081526020015b60405180910390f35b6101a96101a4366004611f83565b61042e565b604051901515815260200161018d565b6101c161043f565b60405161018d919061227b565b6101c16101dc36600461200e565b6104cd565b6101f46101ef366004611cd4565b610501565b005b6101f4610204366004611e6d565b6105af565b6101f4610217366004611d22565b610638565b6101c16106e7565b610237610232366004611e97565b6106f4565b60405161018d9190612243565b6101f4610252366004611efb565b610832565b6101f4610265366004611fbd565b61095a565b61018360085481565b6101c16109d8565b6101f4610289366004611e31565b6109e5565b6009546102ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018d565b61018360075481565b6101f46102ea366004611cd4565b610b08565b6101a96102fd366004611cef565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101f4610346366004611dcc565b610bb6565b6003546102ae9073ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff83166103fb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b600061043982610c5e565b92915050565b6004805461044c906123ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610478906123ae565b80156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b505050505081565b606060066104da83610d41565b6040516020016104eb9291906120aa565b6040516020818303038152906040529050919050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146105685760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60095473ffffffffffffffffffffffffffffffffffffffff1633146106165760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b61062282600183610e9e565b6008805482900390556007805491909103905550565b73ffffffffffffffffffffffffffffffffffffffff8516331480610661575061066185336102fd565b6106d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016103f2565b6106e08585858585611072565b5050505050565b6006805461044c906123ae565b6060815183511461076d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016103f2565b6000835167ffffffffffffffff811115610789576107896124c6565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b50905060005b845181101561082a576107fd8582815181106107d6576107d6612497565b60200260200101518583815181106107f0576107f0612497565b602002602001015161036b565b82828151811061080f5761080f612497565b60209081029190910101526108238161242f565b90506107b8565b509392505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146108995760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b60005b83518110156109435761090b8482815181106108ba576108ba612497565b60200260200101518483815181106108d4576108d4612497565b60200260200101518484815181106108ee576108ee612497565b60200260200101516040518060200160405280600081525061135e565b81818151811061091d5761091d612497565b60209081029190910101516008805490910190558061093b8161242f565b91505061089c565b50600754600854111561095557600080fd5b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146109c15760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b80516109d4906006906020840190611aa5565b5050565b6005805461044c906123ae565b3373ffffffffffffffffffffffffffffffffffffffff83161415610a715760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016103f2565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610b6f5760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016103f2565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8516331480610bdf5750610bdf85336102fd565b610c515760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016103f2565b6106e085858585856114ab565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480610cf157507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061043957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610439565b606081610d8157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610dab5780610d958161242f565b9150610da49050600a836122ef565b9150610d85565b60008167ffffffffffffffff811115610dc657610dc66124c6565b6040519080825280601f01601f191660200182016040528015610df0576020820181803683370190505b509050815b8515610e9557610e06600182612367565b90506000610e15600a886122ef565b610e2090600a61232a565b610e2a9088612367565b610e359060306122ca565b905060008160f81b905080848481518110610e5257610e52612497565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610e8c600a896122ef565b97505050610df5565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f275760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103f2565b33610f5781856000610f38876116a8565b610f41876116a8565b5050604080516020810190915260009052505050565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205482811015610ffa5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016103f2565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b81518351146110e95760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016103f2565b73ffffffffffffffffffffffffffffffffffffffff84166111725760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103f2565b3360005b84518110156112c957600085828151811061119357611193612497565b6020026020010151905060008583815181106111b1576111b1612497565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156112645760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016103f2565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906112ae9084906122b2565b92505081905550505050806112c29061242f565b9050611176565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611340929190612256565b60405180910390a46113568187878787876116f3565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff84166113e75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016103f2565b33611401816000876113f8886116a8565b6106e0886116a8565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091528120805485929061143e9084906122b2565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106e081600087878787611921565b73ffffffffffffffffffffffffffffffffffffffff84166115345760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103f2565b336115448187876113f8886116a8565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156115e85760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016103f2565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906116329084906122b2565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461169f828888888888611921565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106116e2576116e2612497565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611356576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061176a9089908990889088908890600401612188565b602060405180830381600087803b15801561178457600080fd5b505af19250505080156117b4575060408051601f3d908101601f191682019092526117b191810190611fa0565b60015b61186a576117c06124f5565b806308c379a014156117fa57506117d5612511565b806117e057506117fc565b8060405162461bcd60e51b81526004016103f2919061227b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016103f2565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461169f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016103f2565b73ffffffffffffffffffffffffffffffffffffffff84163b15611356576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619061199890899089908890889088906004016121f3565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e2575060408051601f3d908101601f191682019092526119df91810190611fa0565b60015b6119ee576117c06124f5565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461169f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016103f2565b828054611ab1906123ae565b90600052602060002090601f016020900481019282611ad35760008555611b19565b82601f10611aec57805160ff1916838001178555611b19565b82800160010185558215611b19579182015b82811115611b19578251825591602001919060010190611afe565b50611b25929150611b29565b5090565b5b80821115611b255760008155600101611b2a565b600067ffffffffffffffff831115611b5857611b586124c6565b604051611b6f6020601f19601f8701160182612402565b809150838152848484011115611b8457600080fd5b83836020830137600060208583010152509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bc057600080fd5b919050565b600082601f830112611bd657600080fd5b81356020611be38261228e565b604051611bf08282612402565b8381528281019150858301600585901b87018401881015611c1057600080fd5b60005b85811015611c3657611c2482611b9c565b84529284019290840190600101611c13565b5090979650505050505050565b600082601f830112611c5457600080fd5b81356020611c618261228e565b604051611c6e8282612402565b8381528281019150858301600585901b87018401881015611c8e57600080fd5b60005b85811015611c3657813584529284019290840190600101611c91565b600082601f830112611cbe57600080fd5b611ccd83833560208501611b3e565b9392505050565b600060208284031215611ce657600080fd5b611ccd82611b9c565b60008060408385031215611d0257600080fd5b611d0b83611b9c565b9150611d1960208401611b9c565b90509250929050565b600080600080600060a08688031215611d3a57600080fd5b611d4386611b9c565b9450611d5160208701611b9c565b9350604086013567ffffffffffffffff80821115611d6e57600080fd5b611d7a89838a01611c43565b94506060880135915080821115611d9057600080fd5b611d9c89838a01611c43565b93506080880135915080821115611db257600080fd5b50611dbf88828901611cad565b9150509295509295909350565b600080600080600060a08688031215611de457600080fd5b611ded86611b9c565b9450611dfb60208701611b9c565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e2557600080fd5b611dbf88828901611cad565b60008060408385031215611e4457600080fd5b611e4d83611b9c565b915060208301358015158114611e6257600080fd5b809150509250929050565b60008060408385031215611e8057600080fd5b611e8983611b9c565b946020939093013593505050565b60008060408385031215611eaa57600080fd5b823567ffffffffffffffff80821115611ec257600080fd5b611ece86838701611bc5565b93506020850135915080821115611ee457600080fd5b50611ef185828601611c43565b9150509250929050565b600080600060608486031215611f1057600080fd5b833567ffffffffffffffff80821115611f2857600080fd5b611f3487838801611bc5565b94506020860135915080821115611f4a57600080fd5b611f5687838801611c43565b93506040860135915080821115611f6c57600080fd5b50611f7986828701611c43565b9150509250925092565b600060208284031215611f9557600080fd5b8135611ccd816125b9565b600060208284031215611fb257600080fd5b8151611ccd816125b9565b600060208284031215611fcf57600080fd5b813567ffffffffffffffff811115611fe657600080fd5b8201601f81018413611ff757600080fd5b61200684823560208401611b3e565b949350505050565b60006020828403121561202057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156120575781518752958201959082019060010161203b565b509495945050505050565b6000815180845261207a81602086016020860161237e565b601f01601f19169290920160200192915050565b600081516120a081856020860161237e565b9290920192915050565b600080845481600182811c9150808316806120c657607f831692505b60208084108214156120ff577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561211357600181146121425761216f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061216f565b60008b81526020902060005b868110156121675781548b82015290850190830161214e565b505084890196505b50505050505061217f818561208e565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526121c160a0830186612027565b82810360608401526121d38186612027565b905082810360808401526121e78185612062565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261223860a0830184612062565b979650505050505050565b602081526000611ccd6020830184612027565b6040815260006122696040830185612027565b828103602084015261217f8185612027565b602081526000611ccd6020830184612062565b600067ffffffffffffffff8211156122a8576122a86124c6565b5060051b60200190565b600082198211156122c5576122c5612468565b500190565b600060ff821660ff84168060ff038211156122e7576122e7612468565b019392505050565b600082612325577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561236257612362612468565b500290565b60008282101561237957612379612468565b500390565b60005b83811015612399578181015183820152602001612381565b838111156123a8576000848401525b50505050565b600181811c908216806123c257607f821691505b602082108114156123fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f19601f830116810181811067ffffffffffffffff82111715612428576124286124c6565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561246157612461612468565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561250e5760046000803e5060005160e01c5b90565b600060443d101561251f5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561256d57505050505090565b82850191508151818111156125855750505050505090565b843d870101602082850101111561259f5750505050505090565b6125ae60208286010187612402565b509095945050505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146125e757600080fd5b5056fea264697066735822122009ac72d60a4609ffbba14b3109ba82478403abbe85a1485e16437c468736fa1464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000005756b5a03e751bd0280e3a55bc05b6e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d645777706e58545875774c4278393544685331545863684d6839687a6b3876656e6d4d4b644c6a54337353632f00000000000000000000
-----Decoded View---------------
Arg [0] : _xoloContract (address): 0x0000000005756B5a03E751bD0280e3A55BC05B6E
Arg [1] : _metadata (string): ipfs://QmdWwpnXTXuwLBx95DhS1TXchMh9hzk8venmMKdLjT3sSc/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000005756b5a03e751bd0280e3a55bc05b6e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d645777706e58545875774c427839354468533154586368
Arg [4] : 4d6839687a6b3876656e6d4d4b644c6a54337353632f00000000000000000000
Deployed Bytecode Sourcemap
47732:2615:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34436:231;;;;;;:::i;:::-;;:::i;:::-;;;18538:25:1;;;18526:2;18511:18;34436:231:0;;;;;;;;49551:212;;;;;;:::i;:::-;;:::i;:::-;;;12473:14:1;;12466:22;12448:41;;12436:2;12421:18;49551:212:0;12308:187:1;47795:18:0;;;:::i;:::-;;;;;;;:::i;49397:146::-;;;;;;:::i;:::-;;:::i;49278:111::-;;;;;;:::i;:::-;;:::i;:::-;;48476:196;;;;;;:::i;:::-;;:::i;36531:442::-;;;;;;:::i;:::-;;:::i;47847:22::-;;;:::i;34833:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48680:376::-;;;;;;:::i;:::-;;:::i;49064:105::-;;;;;;:::i;:::-;;:::i;47912:32::-;;;;;;47820:20;;;:::i;35430:311::-;;;;;;:::i;:::-;;:::i;47957:27::-;;;;;;;;;;;;10075:42:1;10063:55;;;10045:74;;10033:2;10018:18;47957:27:0;9899:226:1;47876:32:0;;;;;;49177:93;;;;;;:::i;:::-;;:::i;35813:168::-;;;;;;:::i;:::-;35936:27;;;;35912:4;35936:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;35813:168;36053:401;;;;;;:::i;:::-;;:::i;47768:20::-;;;;;;;;;34436:231;34522:7;34550:21;;;34542:77;;;;-1:-1:-1;;;34542:77:0;;13756:2:1;34542:77:0;;;13738:21:1;13795:2;13775:18;;;13768:30;13834:34;13814:18;;;13807:62;13905:13;13885:18;;;13878:41;13936:19;;34542:77:0;;;;;;;;;-1:-1:-1;34637:9:0;:13;;;;;;;;;;;:22;;;;;;;;;;;;;34436:231::o;49551:212::-;49690:4;49719:36;49743:11;49719:23;:36::i;:::-;49712:43;49551:212;-1:-1:-1;;49551:212:0:o;47795:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49397:146::-;49453:13;49510:8;49520:13;49529:3;49520:8;:13::i;:::-;49493:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49479:56;;49397:146;;;:::o;49278:111::-;48031:5;;:19;:5;48040:10;48031:19;48023:43;;;;-1:-1:-1;;;48023:43:0;;16623:2:1;48023:43:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:13;16681:18;;;16674:41;16732:18;;48023:43:0;16421:335:1;48023:43:0;49355:12:::1;:26:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;49278:111::o;48476:196::-;48139:12;;:26;:12;48155:10;48139:26;48131:50;;;;-1:-1:-1;;;48131:50:0;;16623:2:1;48131:50:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:13;16681:18;;;16674:41;16732:18;;48131:50:0;16421:335:1;48131:50:0;48560:23:::1;48566:3;48571:1;48574:8;48560:5;:23::i;:::-;48603:17;:29:::0;;;;::::1;::::0;;48638:9:::1;:21:::0;;;;;::::1;::::0;;-1:-1:-1;48476:196:0:o;36531:442::-;36764:20;;;2296:10;36764:20;;:60;;-1:-1:-1;36788:36:0;36805:4;2296:10;35813:168;:::i;36788:36::-;36742:160;;;;-1:-1:-1;;;36742:160:0;;15389:2:1;36742:160:0;;;15371:21:1;15428:2;15408:18;;;15401:30;15467:34;15447:18;;;15440:62;15538:20;15518:18;;;15511:48;15576:19;;36742:160:0;15187:414:1;36742:160:0;36913:52;36936:4;36942:2;36946:3;36951:7;36960:4;36913:22;:52::i;:::-;36531:442;;;;;:::o;47847:22::-;;;;;;;:::i;34833:524::-;34989:16;35050:3;:10;35031:8;:15;:29;35023:83;;;;-1:-1:-1;;;35023:83:0;;17373:2:1;35023:83:0;;;17355:21:1;17412:2;17392:18;;;17385:30;17451:34;17431:18;;;17424:62;17522:11;17502:18;;;17495:39;17551:19;;35023:83:0;17171:405:1;35023:83:0;35119:30;35166:8;:15;35152:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35152:30:0;;35119:63;;35200:9;35195:122;35219:8;:15;35215:1;:19;35195:122;;;35275:30;35285:8;35294:1;35285:11;;;;;;;;:::i;:::-;;;;;;;35298:3;35302:1;35298:6;;;;;;;;:::i;:::-;;;;;;;35275:9;:30::i;:::-;35256:13;35270:1;35256:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;35236:3;;;:::i;:::-;;;35195:122;;;-1:-1:-1;35336:13:0;34833:524;-1:-1:-1;;;34833:524:0:o;48680:376::-;48031:5;;:19;:5;48040:10;48031:19;48023:43;;;;-1:-1:-1;;;48023:43:0;;16623:2:1;48023:43:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:13;16681:18;;;16674:41;16732:18;;48023:43:0;16421:335:1;48023:43:0;48843:9:::1;48838:167;48862:3;:10;48858:1;:14;48838:167;;;48894:39;48900:3;48904:1;48900:6;;;;;;;;:::i;:::-;;;;;;;48908:4;48913:1;48908:7;;;;;;;;:::i;:::-;;;;;;;48917:8;48926:1;48917:11;;;;;;;;:::i;:::-;;;;;;;48894:39;;;;;;;;;;;::::0;:5:::1;:39::i;:::-;48976:8;48985:1;48976:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;48955:17:::1;:32:::0;;;;::::1;::::0;;48874:3;::::1;::::0;::::1;:::i;:::-;;;;48838:167;;;;49038:9;;49017:17;;:30;;49009:39;;;::::0;::::1;;48680:376:::0;;;:::o;49064:105::-;48031:5;;:19;:5;48040:10;48031:19;48023:43;;;;-1:-1:-1;;;48023:43:0;;16623:2:1;48023:43:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:13;16681:18;;;16674:41;16732:18;;48023:43:0;16421:335:1;48023:43:0;49141:20;;::::1;::::0;:8:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49064:105:::0;:::o;47820:20::-;;;;;;;:::i;35430:311::-;2296:10;35533:24;;;;;35525:78;;;;-1:-1:-1;;;35525:78:0;;16963:2:1;35525:78:0;;;16945:21:1;17002:2;16982:18;;;16975:30;17041:34;17021:18;;;17014:62;17112:11;17092:18;;;17085:39;17141:19;;35525:78:0;16761:405:1;35525:78:0;2296:10;35616:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;35685:48;;12448:41:1;;;35616:42:0;;2296:10;35685:48;;12421:18:1;35685:48:0;;;;;;;35430:311;;:::o;49177:93::-;48031:5;;:19;:5;48040:10;48031:19;48023:43;;;;-1:-1:-1;;;48023:43:0;;16623:2:1;48023:43:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:13;16681:18;;;16674:41;16732:18;;48023:43:0;16421:335:1;48023:43:0;49245:5:::1;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;49177:93::o;36053:401::-;36261:20;;;2296:10;36261:20;;:60;;-1:-1:-1;36285:36:0;36302:4;2296:10;35813:168;:::i;36285:36::-;36239:151;;;;-1:-1:-1;;;36239:151:0;;14573:2:1;36239:151:0;;;14555:21:1;14612:2;14592:18;;;14585:30;14651:34;14631:18;;;14624:62;14722:11;14702:18;;;14695:39;14751:19;;36239:151:0;14371:405:1;36239:151:0;36401:45;36419:4;36425:2;36429;36433:6;36441:4;36401:17;:45::i;33459:310::-;33561:4;33598:41;;;33613:26;33598:41;;:110;;-1:-1:-1;33656:52:0;;;33671:37;33656:52;33598:110;:163;;;-1:-1:-1;1634:25:0;1619:40;;;;33725:36;1510:157;49771:573;49821:27;49865:7;49861:50;;-1:-1:-1;;49889:10:0;;;;;;;;;;;;;;;;;;49771:573::o;49861:50::-;49930:2;49921:6;49962:69;49969:6;;49962:69;;49992:5;;;;:::i;:::-;;-1:-1:-1;50012:7:0;;-1:-1:-1;50017:2:0;50012:7;;:::i;:::-;;;49962:69;;;50041:17;50071:3;50061:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50061:14:0;-1:-1:-1;50041:34:0;-1:-1:-1;50095:3:0;50109:198;50116:7;;50109:198;;50144:3;50146:1;50144;:3;:::i;:::-;50140:7;-1:-1:-1;50162:10:0;50192:7;50197:2;50192;:7;:::i;:::-;:12;;50202:2;50192:12;:::i;:::-;50187:17;;:2;:17;:::i;:::-;50176:29;;:2;:29;:::i;:::-;50162:44;;50221:9;50240:4;50233:12;;50221:24;;50270:2;50260:4;50265:1;50260:7;;;;;;;;:::i;:::-;;;;:12;;;;;;;;;;-1:-1:-1;50287:8:0;50293:2;50287:8;;:::i;:::-;;;50125:182;;50109:198;;;-1:-1:-1;50331:4:0;49771:573;-1:-1:-1;;;;49771:573:0:o;42971:675::-;43101:21;;;43093:69;;;;-1:-1:-1;;;43093:69:0;;15808:2:1;43093:69:0;;;15790:21:1;15847:2;15827:18;;;15820:30;15886:34;15866:18;;;15859:62;15957:5;15937:18;;;15930:33;15980:19;;43093:69:0;15606:399:1;43093:69:0;2296:10;43219:105;2296:10;43250:7;43175:16;43271:21;43289:2;43271:17;:21::i;:::-;43294:25;43312:6;43294:17;:25::i;:::-;-1:-1:-1;;43219:105:0;;;;;;;;;-1:-1:-1;43219:105:0;;-1:-1:-1;;;38615:1074:0;43219:105;43337:22;43362:13;;;;;;;;;;;:22;;;;;;;;;;;43403:24;;;;43395:73;;;;-1:-1:-1;;;43395:73:0;;14168:2:1;43395:73:0;;;14150:21:1;14207:2;14187:18;;;14180:30;14246:34;14226:18;;;14219:62;14317:6;14297:18;;;14290:34;14341:19;;43395:73:0;13966:400:1;43395:73:0;43504:9;:13;;;;;;;;;;;:22;;;;;;;;;;;;;43529:23;;;43504:48;;43581:57;;18748:25:1;;;18789:18;;;18782:34;;;43504:22:0;;43581:57;;;;;;18721:18:1;43581:57:0;;;;;;;43082:564;;42971:675;;;:::o;38615:1074::-;38842:7;:14;38828:3;:10;:28;38820:81;;;;-1:-1:-1;;;38820:81:0;;17783:2:1;38820:81:0;;;17765:21:1;17822:2;17802:18;;;17795:30;17861:34;17841:18;;;17834:62;17932:10;17912:18;;;17905:38;17960:19;;38820:81:0;17581:404:1;38820:81:0;38920:16;;;38912:66;;;;-1:-1:-1;;;38912:66:0;;14983:2:1;38912:66:0;;;14965:21:1;15022:2;15002:18;;;14995:30;15061:34;15041:18;;;15034:62;15132:7;15112:18;;;15105:35;15157:19;;38912:66:0;14781:401:1;38912:66:0;2296:10;38991:16;39108:421;39132:3;:10;39128:1;:14;39108:421;;;39164:10;39177:3;39181:1;39177:6;;;;;;;;:::i;:::-;;;;;;;39164:19;;39198:14;39215:7;39223:1;39215:10;;;;;;;;:::i;:::-;;;;;;;;;;;;39242:19;39264:13;;;;;;;;;;:19;;;;;;;;;;;;;39215:10;;-1:-1:-1;39306:21:0;;;;39298:76;;;;-1:-1:-1;;;39298:76:0;;16212:2:1;39298:76:0;;;16194:21:1;16251:2;16231:18;;;16224:30;16290:34;16270:18;;;16263:62;16361:12;16341:18;;;16334:40;16391:19;;39298:76:0;16010:406:1;39298:76:0;39418:9;:13;;;;;;;;;;;:19;;;;;;;;;;;39440:20;;;39418:42;;39490:17;;;;;;;:27;;39440:20;;39418:9;39490:27;;39440:20;;39490:27;:::i;:::-;;;;;;;;39149:380;;;39144:3;;;;:::i;:::-;;;39108:421;;;;39576:2;39546:47;;39570:4;39546:47;;39560:8;39546:47;;;39580:3;39585:7;39546:47;;;;;;;:::i;:::-;;;;;;;;39606:75;39642:8;39652:4;39658:2;39662:3;39667:7;39676:4;39606:35;:75::i;:::-;38809:880;38615:1074;;;;;:::o;41022:599::-;41180:21;;;41172:67;;;;-1:-1:-1;;;41172:67:0;;18192:2:1;41172:67:0;;;18174:21:1;18231:2;18211:18;;;18204:30;18270:34;18250:18;;;18243:62;18341:3;18321:18;;;18314:31;18362:19;;41172:67:0;17990:397:1;41172:67:0;2296:10;41296:107;2296:10;41252:16;41339:7;41348:21;41366:2;41348:17;:21::i;:::-;41371:25;41389:6;41371:17;:25::i;41296:107::-;41416:9;:13;;;;;;;;;;;:22;;;;;;;;;;:32;;41442:6;;41416:9;:32;;41442:6;;41416:32;:::i;:::-;;;;-1:-1:-1;;41464:57:0;;;18748:25:1;;;18804:2;18789:18;;18782:34;;;41464:57:0;;;;;41497:1;;41464:57;;;;;;18721:18:1;41464:57:0;;;;;;;41534:79;41565:8;41583:1;41587:7;41596:2;41600:6;41608:4;41534:30;:79::i;37437:820::-;37625:16;;;37617:66;;;;-1:-1:-1;;;37617:66:0;;14983:2:1;37617:66:0;;;14965:21:1;15022:2;15002:18;;;14995:30;15061:34;15041:18;;;15034:62;15132:7;15112:18;;;15105:35;15157:19;;37617:66:0;14781:401:1;37617:66:0;2296:10;37740:96;2296:10;37771:4;37777:2;37781:21;37799:2;37781:17;:21::i;37740:96::-;37849:19;37871:13;;;;;;;;;;;:19;;;;;;;;;;;37909:21;;;;37901:76;;;;-1:-1:-1;;;37901:76:0;;16212:2:1;37901:76:0;;;16194:21:1;16251:2;16231:18;;;16224:30;16290:34;16270:18;;;16263:62;16361:12;16341:18;;;16334:40;16391:19;;37901:76:0;16010:406:1;37901:76:0;38013:9;:13;;;;;;;;;;;:19;;;;;;;;;;;38035:20;;;38013:42;;38077:17;;;;;;;:27;;38035:20;;38013:9;38077:27;;38035:20;;38077:27;:::i;:::-;;;;-1:-1:-1;;38122:46:0;;;18748:25:1;;;18804:2;18789:18;;18782:34;;;38122:46:0;;;;;;;;;;;;;;;18721:18:1;38122:46:0;;;;;;;38181:68;38212:8;38222:4;38228:2;38232;38236:6;38244:4;38181:30;:68::i;:::-;37606:651;;37437:820;;;;;:::o;47525:198::-;47645:16;;;47659:1;47645:16;;;;;;;;;47591;;47620:22;;47645:16;;;;;;;;;;;;-1:-1:-1;47645:16:0;47620:41;;47683:7;47672:5;47678:1;47672:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;47710:5;47525:198;-1:-1:-1;;47525:198:0:o;46704:813::-;46944:13;;;3434:20;3482:8;46940:570;;46980:79;;;;;:43;;;;;;:79;;47024:8;;47034:4;;47040:3;;47045:7;;47054:4;;46980:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46980:79:0;;;;;;;;-1:-1:-1;;46980:79:0;;;;;;;;;;;;:::i;:::-;;;46976:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;47372:6;47365:14;;-1:-1:-1;;;47365:14:0;;;;;;;;:::i;46976:523::-;;;47421:62;;-1:-1:-1;;;47421:62:0;;12926:2:1;47421:62:0;;;12908:21:1;12965:2;12945:18;;;12938:30;13004:34;12984:18;;;12977:62;13075:22;13055:18;;;13048:50;13115:19;;47421:62:0;12724:416:1;46976:523:0;47141:60;;;47153:48;47141:60;47137:159;;47226:50;;-1:-1:-1;;;47226:50:0;;13347:2:1;47226:50:0;;;13329:21:1;13386:2;13366:18;;;13359:30;13425:34;13405:18;;;13398:62;13496:10;13476:18;;;13469:38;13524:19;;47226:50:0;13145:404:1;45952:744:0;46167:13;;;3434:20;3482:8;46163:526;;46203:72;;;;;:38;;;;;;:72;;46242:8;;46252:4;;46258:2;;46262:6;;46270:4;;46203:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46203:72:0;;;;;;;;-1:-1:-1;;46203:72:0;;;;;;;;;;;;:::i;:::-;;;46199:479;;;;:::i;:::-;46325:55;;;46337:43;46325:55;46321:154;;46405:50;;-1:-1:-1;;;46405:50:0;;13347:2:1;46405:50:0;;;13329:21:1;13386:2;13366:18;;;13359:30;13425:34;13405:18;;;13398:62;13496:10;13476:18;;;13469:38;13524:19;;46405:50:0;13145:404:1;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:527:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:128;317:4;-1:-1:-1;;243:2:1;235:6;231:15;227:88;223:99;215:6;195:128;:::i;:::-;341:6;332:15;;371:6;363;356:22;411:3;402:6;397:3;393:16;390:25;387:45;;;428:1;425;418:12;387:45;478:6;473:3;466:4;458:6;454:17;441:44;533:1;526:4;517:6;509;505:19;501:30;494:41;;14:527;;;;;:::o;546:196::-;614:20;;674:42;663:54;;653:65;;643:93;;732:1;729;722:12;643:93;546:196;;;:::o;747:741::-;801:5;854:3;847:4;839:6;835:17;831:27;821:55;;872:1;869;862:12;821:55;908:6;895:20;934:4;957:43;997:2;957:43;:::i;:::-;1029:2;1023:9;1041:31;1069:2;1061:6;1041:31;:::i;:::-;1107:18;;;1141:15;;;;-1:-1:-1;1176:15:1;;;1226:1;1222:10;;;1210:23;;1206:32;;1203:41;-1:-1:-1;1200:61:1;;;1257:1;1254;1247:12;1200:61;1279:1;1289:169;1303:2;1300:1;1297:9;1289:169;;;1360:23;1379:3;1360:23;:::i;:::-;1348:36;;1404:12;;;;1436;;;;1321:1;1314:9;1289:169;;;-1:-1:-1;1476:6:1;;747:741;-1:-1:-1;;;;;;;747:741:1:o;1493:735::-;1547:5;1600:3;1593:4;1585:6;1581:17;1577:27;1567:55;;1618:1;1615;1608:12;1567:55;1654:6;1641:20;1680:4;1703:43;1743:2;1703:43;:::i;:::-;1775:2;1769:9;1787:31;1815:2;1807:6;1787:31;:::i;:::-;1853:18;;;1887:15;;;;-1:-1:-1;1922:15:1;;;1972:1;1968:10;;;1956:23;;1952:32;;1949:41;-1:-1:-1;1946:61:1;;;2003:1;2000;1993:12;1946:61;2025:1;2035:163;2049:2;2046:1;2043:9;2035:163;;;2106:17;;2094:30;;2144:12;;;;2176;;;;2067:1;2060:9;2035:163;;2233:220;2275:5;2328:3;2321:4;2313:6;2309:17;2305:27;2295:55;;2346:1;2343;2336:12;2295:55;2368:79;2443:3;2434:6;2421:20;2414:4;2406:6;2402:17;2368:79;:::i;:::-;2359:88;2233:220;-1:-1:-1;;;2233:220:1:o;2458:186::-;2517:6;2570:2;2558:9;2549:7;2545:23;2541:32;2538:52;;;2586:1;2583;2576:12;2538:52;2609:29;2628:9;2609:29;:::i;2649:260::-;2717:6;2725;2778:2;2766:9;2757:7;2753:23;2749:32;2746:52;;;2794:1;2791;2784:12;2746:52;2817:29;2836:9;2817:29;:::i;:::-;2807:39;;2865:38;2899:2;2888:9;2884:18;2865:38;:::i;:::-;2855:48;;2649:260;;;;;:::o;2914:943::-;3068:6;3076;3084;3092;3100;3153:3;3141:9;3132:7;3128:23;3124:33;3121:53;;;3170:1;3167;3160:12;3121:53;3193:29;3212:9;3193:29;:::i;:::-;3183:39;;3241:38;3275:2;3264:9;3260:18;3241:38;:::i;:::-;3231:48;;3330:2;3319:9;3315:18;3302:32;3353:18;3394:2;3386:6;3383:14;3380:34;;;3410:1;3407;3400:12;3380:34;3433:61;3486:7;3477:6;3466:9;3462:22;3433:61;:::i;:::-;3423:71;;3547:2;3536:9;3532:18;3519:32;3503:48;;3576:2;3566:8;3563:16;3560:36;;;3592:1;3589;3582:12;3560:36;3615:63;3670:7;3659:8;3648:9;3644:24;3615:63;:::i;:::-;3605:73;;3731:3;3720:9;3716:19;3703:33;3687:49;;3761:2;3751:8;3748:16;3745:36;;;3777:1;3774;3767:12;3745:36;;3800:51;3843:7;3832:8;3821:9;3817:24;3800:51;:::i;:::-;3790:61;;;2914:943;;;;;;;;:::o;3862:606::-;3966:6;3974;3982;3990;3998;4051:3;4039:9;4030:7;4026:23;4022:33;4019:53;;;4068:1;4065;4058:12;4019:53;4091:29;4110:9;4091:29;:::i;:::-;4081:39;;4139:38;4173:2;4162:9;4158:18;4139:38;:::i;:::-;4129:48;;4224:2;4213:9;4209:18;4196:32;4186:42;;4275:2;4264:9;4260:18;4247:32;4237:42;;4330:3;4319:9;4315:19;4302:33;4358:18;4350:6;4347:30;4344:50;;;4390:1;4387;4380:12;4344:50;4413:49;4454:7;4445:6;4434:9;4430:22;4413:49;:::i;4473:347::-;4538:6;4546;4599:2;4587:9;4578:7;4574:23;4570:32;4567:52;;;4615:1;4612;4605:12;4567:52;4638:29;4657:9;4638:29;:::i;:::-;4628:39;;4717:2;4706:9;4702:18;4689:32;4764:5;4757:13;4750:21;4743:5;4740:32;4730:60;;4786:1;4783;4776:12;4730:60;4809:5;4799:15;;;4473:347;;;;;:::o;4825:254::-;4893:6;4901;4954:2;4942:9;4933:7;4929:23;4925:32;4922:52;;;4970:1;4967;4960:12;4922:52;4993:29;5012:9;4993:29;:::i;:::-;4983:39;5069:2;5054:18;;;;5041:32;;-1:-1:-1;;;4825:254:1:o;5084:595::-;5202:6;5210;5263:2;5251:9;5242:7;5238:23;5234:32;5231:52;;;5279:1;5276;5269:12;5231:52;5319:9;5306:23;5348:18;5389:2;5381:6;5378:14;5375:34;;;5405:1;5402;5395:12;5375:34;5428:61;5481:7;5472:6;5461:9;5457:22;5428:61;:::i;:::-;5418:71;;5542:2;5531:9;5527:18;5514:32;5498:48;;5571:2;5561:8;5558:16;5555:36;;;5587:1;5584;5577:12;5555:36;;5610:63;5665:7;5654:8;5643:9;5639:24;5610:63;:::i;:::-;5600:73;;;5084:595;;;;;:::o;5684:821::-;5836:6;5844;5852;5905:2;5893:9;5884:7;5880:23;5876:32;5873:52;;;5921:1;5918;5911:12;5873:52;5961:9;5948:23;5990:18;6031:2;6023:6;6020:14;6017:34;;;6047:1;6044;6037:12;6017:34;6070:61;6123:7;6114:6;6103:9;6099:22;6070:61;:::i;:::-;6060:71;;6184:2;6173:9;6169:18;6156:32;6140:48;;6213:2;6203:8;6200:16;6197:36;;;6229:1;6226;6219:12;6197:36;6252:63;6307:7;6296:8;6285:9;6281:24;6252:63;:::i;:::-;6242:73;;6368:2;6357:9;6353:18;6340:32;6324:48;;6397:2;6387:8;6384:16;6381:36;;;6413:1;6410;6403:12;6381:36;;6436:63;6491:7;6480:8;6469:9;6465:24;6436:63;:::i;:::-;6426:73;;;5684:821;;;;;:::o;6510:245::-;6568:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:52;;;6637:1;6634;6627:12;6589:52;6676:9;6663:23;6695:30;6719:5;6695:30;:::i;6760:249::-;6829:6;6882:2;6870:9;6861:7;6857:23;6853:32;6850:52;;;6898:1;6895;6888:12;6850:52;6930:9;6924:16;6949:30;6973:5;6949:30;:::i;7014:450::-;7083:6;7136:2;7124:9;7115:7;7111:23;7107:32;7104:52;;;7152:1;7149;7142:12;7104:52;7192:9;7179:23;7225:18;7217:6;7214:30;7211:50;;;7257:1;7254;7247:12;7211:50;7280:22;;7333:4;7325:13;;7321:27;-1:-1:-1;7311:55:1;;7362:1;7359;7352:12;7311:55;7385:73;7450:7;7445:2;7432:16;7427:2;7423;7419:11;7385:73;:::i;:::-;7375:83;7014:450;-1:-1:-1;;;;7014:450:1:o;7469:180::-;7528:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:52;;;7597:1;7594;7587:12;7549:52;-1:-1:-1;7620:23:1;;7469:180;-1:-1:-1;7469:180:1:o;7654:435::-;7707:3;7745:5;7739:12;7772:6;7767:3;7760:19;7798:4;7827:2;7822:3;7818:12;7811:19;;7864:2;7857:5;7853:14;7885:1;7895:169;7909:6;7906:1;7903:13;7895:169;;;7970:13;;7958:26;;8004:12;;;;8039:15;;;;7931:1;7924:9;7895:169;;;-1:-1:-1;8080:3:1;;7654:435;-1:-1:-1;;;;;7654:435:1:o;8094:316::-;8135:3;8173:5;8167:12;8200:6;8195:3;8188:19;8216:63;8272:6;8265:4;8260:3;8256:14;8249:4;8242:5;8238:16;8216:63;:::i;:::-;8324:2;8312:15;-1:-1:-1;;8308:88:1;8299:98;;;;8399:4;8295:109;;8094:316;-1:-1:-1;;8094:316:1:o;8415:185::-;8457:3;8495:5;8489:12;8510:52;8555:6;8550:3;8543:4;8536:5;8532:16;8510:52;:::i;:::-;8578:16;;;;;8415:185;-1:-1:-1;;8415:185:1:o;8605:1289::-;8781:3;8810:1;8843:6;8837:13;8873:3;8895:1;8923:9;8919:2;8915:18;8905:28;;8983:2;8972:9;8968:18;9005;8995:61;;9049:4;9041:6;9037:17;9027:27;;8995:61;9075:2;9123;9115:6;9112:14;9092:18;9089:38;9086:222;;;9162:77;9157:3;9150:90;9263:4;9260:1;9253:15;9293:4;9288:3;9281:17;9086:222;9324:18;9351:162;;;;9527:1;9522:320;;;;9317:525;;9351:162;9399:66;9388:9;9384:82;9379:3;9372:95;9496:6;9491:3;9487:16;9480:23;;9351:162;;9522:320;19088:1;19081:14;;;19125:4;19112:18;;9617:1;9631:165;9645:6;9642:1;9639:13;9631:165;;;9723:14;;9710:11;;;9703:35;9766:16;;;;9660:10;;9631:165;;;9635:3;;9825:6;9820:3;9816:16;9809:23;;9317:525;;;;;;;9858:30;9884:3;9876:6;9858:30;:::i;:::-;9851:37;8605:1289;-1:-1:-1;;;;;8605:1289:1:o;10130:849::-;10452:4;10481:42;10562:2;10554:6;10550:15;10539:9;10532:34;10614:2;10606:6;10602:15;10597:2;10586:9;10582:18;10575:43;;10654:3;10649:2;10638:9;10634:18;10627:31;10681:57;10733:3;10722:9;10718:19;10710:6;10681:57;:::i;:::-;10786:9;10778:6;10774:22;10769:2;10758:9;10754:18;10747:50;10820:44;10857:6;10849;10820:44;:::i;:::-;10806:58;;10913:9;10905:6;10901:22;10895:3;10884:9;10880:19;10873:51;10941:32;10966:6;10958;10941:32;:::i;:::-;10933:40;10130:849;-1:-1:-1;;;;;;;;10130:849:1:o;10984:583::-;11206:4;11235:42;11316:2;11308:6;11304:15;11293:9;11286:34;11368:2;11360:6;11356:15;11351:2;11340:9;11336:18;11329:43;;11408:6;11403:2;11392:9;11388:18;11381:34;11451:6;11446:2;11435:9;11431:18;11424:34;11495:3;11489;11478:9;11474:19;11467:32;11516:45;11556:3;11545:9;11541:19;11533:6;11516:45;:::i;:::-;11508:53;10984:583;-1:-1:-1;;;;;;;10984:583:1:o;11572:261::-;11751:2;11740:9;11733:21;11714:4;11771:56;11823:2;11812:9;11808:18;11800:6;11771:56;:::i;11838:465::-;12095:2;12084:9;12077:21;12058:4;12121:56;12173:2;12162:9;12158:18;12150:6;12121:56;:::i;:::-;12225:9;12217:6;12213:22;12208:2;12197:9;12193:18;12186:50;12253:44;12290:6;12282;12253:44;:::i;12500:219::-;12649:2;12638:9;12631:21;12612:4;12669:44;12709:2;12698:9;12694:18;12686:6;12669:44;:::i;18827:183::-;18887:4;18920:18;18912:6;18909:30;18906:56;;;18942:18;;:::i;:::-;-1:-1:-1;18987:1:1;18983:14;18999:4;18979:25;;18827:183::o;19141:128::-;19181:3;19212:1;19208:6;19205:1;19202:13;19199:39;;;19218:18;;:::i;:::-;-1:-1:-1;19254:9:1;;19141:128::o;19274:204::-;19312:3;19348:4;19345:1;19341:12;19380:4;19377:1;19373:12;19415:3;19409:4;19405:14;19400:3;19397:23;19394:49;;;19423:18;;:::i;:::-;19459:13;;19274:204;-1:-1:-1;;;19274:204:1:o;19483:274::-;19523:1;19549;19539:189;;19584:77;19581:1;19574:88;19685:4;19682:1;19675:15;19713:4;19710:1;19703:15;19539:189;-1:-1:-1;19742:9:1;;19483:274::o;19762:228::-;19802:7;19928:1;19860:66;19856:74;19853:1;19850:81;19845:1;19838:9;19831:17;19827:105;19824:131;;;19935:18;;:::i;:::-;-1:-1:-1;19975:9:1;;19762:228::o;19995:125::-;20035:4;20063:1;20060;20057:8;20054:34;;;20068:18;;:::i;:::-;-1:-1:-1;20105:9:1;;19995:125::o;20125:258::-;20197:1;20207:113;20221:6;20218:1;20215:13;20207:113;;;20297:11;;;20291:18;20278:11;;;20271:39;20243:2;20236:10;20207:113;;;20338:6;20335:1;20332:13;20329:48;;;20373:1;20364:6;20359:3;20355:16;20348:27;20329:48;;20125:258;;;:::o;20388:437::-;20467:1;20463:12;;;;20510;;;20531:61;;20585:4;20577:6;20573:17;20563:27;;20531:61;20638:2;20630:6;20627:14;20607:18;20604:38;20601:218;;;20675:77;20672:1;20665:88;20776:4;20773:1;20766:15;20804:4;20801:1;20794:15;20601:218;;20388:437;;;:::o;20830:308::-;-1:-1:-1;;20931:2:1;20925:4;20921:13;20917:86;20909:6;20905:99;21070:6;21058:10;21055:22;21034:18;21022:10;21019:34;21016:62;21013:88;;;21081:18;;:::i;:::-;21117:2;21110:22;-1:-1:-1;;20830:308:1:o;21143:195::-;21182:3;21213:66;21206:5;21203:77;21200:103;;;21283:18;;:::i;:::-;-1:-1:-1;21330:1:1;21319:13;;21143:195::o;21343:184::-;21395:77;21392:1;21385:88;21492:4;21489:1;21482:15;21516:4;21513:1;21506:15;21532:184;21584:77;21581:1;21574:88;21681:4;21678:1;21671:15;21705:4;21702:1;21695:15;21721:184;21773:77;21770:1;21763:88;21870:4;21867:1;21860:15;21894:4;21891:1;21884:15;21910:179;21945:3;21987:1;21969:16;21966:23;21963:120;;;22033:1;22030;22027;22012:23;-1:-1:-1;22070:1:1;22064:8;22059:3;22055:18;21963:120;21910:179;:::o;22094:731::-;22133:3;22175:4;22157:16;22154:26;22151:39;;;22094:731;:::o;22151:39::-;22217:2;22211:9;22239:66;22360:2;22342:16;22338:25;22335:1;22329:4;22314:50;22393:4;22387:11;22417:16;22452:18;22523:2;22516:4;22508:6;22504:17;22501:25;22496:2;22488:6;22485:14;22482:45;22479:58;;;22530:5;;;;;22094:731;:::o;22479:58::-;22567:6;22561:4;22557:17;22546:28;;22603:3;22597:10;22630:2;22622:6;22619:14;22616:27;;;22636:5;;;;;;22094:731;:::o;22616:27::-;22720:2;22701:16;22695:4;22691:27;22687:36;22680:4;22671:6;22666:3;22662:16;22658:27;22655:69;22652:82;;;22727:5;;;;;;22094:731;:::o;22652:82::-;22743:57;22794:4;22785:6;22777;22773:19;22769:30;22763:4;22743:57;:::i;:::-;-1:-1:-1;22816:3:1;;22094:731;-1:-1:-1;;;;;22094:731:1:o;22830:177::-;22915:66;22908:5;22904:78;22897:5;22894:89;22884:117;;22997:1;22994;22987:12;22884:117;22830:177;:::o
Swarm Source
ipfs://09ac72d60a4609ffbba14b3109ba82478403abbe85a1485e16437c468736fa14
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.