ERC-1155
Overview
Max Total Supply
0 BemetaAirDrops
Holders
76,360
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BEMETA_Airdrops
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-05-10 */ // SPDX-License-Identifier: MIT // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @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. * * NOTE: 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. * * NOTE: 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); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @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; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @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); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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 { _setApprovalForAll(_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 `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, 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 `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, 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 from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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; } } pragma solidity ^0.8.0; abstract contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner_, address indexed newOwner_); constructor() { owner = msg.sender; } modifier onlyOwner {require(owner == msg.sender, "Ownable: caller is not the owner"); _; } function _transferOwnership(address newOwner_) internal virtual { address _previousOwner = owner; owner = newOwner_; emit OwnershipTransferred(_previousOwner, newOwner_); } function transferOwnership(address newOwner_) public virtual onlyOwner { require(newOwner_ != address(0), "Ownable: new owner is the zero address!"); _transferOwnership(newOwner_); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } } contract BEMETA_Airdrops is ERC1155, Ownable { constructor() ERC1155("") {} // Token Names and Symbols string public name = "BEMETA Airdrops"; string public symbol = "BemetaAirDrops"; string internal baseURI = "https://ipfs.io/ipfs/QmTL7ZL39w6cP8zu1cMYxTfJFDXwg4WdQtEj4Yd1YWVBBe"; string internal baseTokenURI; string internal baseTokenURI_EXT; string internal universalBaseTokenURI; uint256 public URI_Selector = 0; mapping(uint256 => string) internal uriToToken; function Token_Name(string memory name_) external onlyOwner { name = name_; } function Token_Symbol(string memory symbol_) external onlyOwner { symbol = symbol_; } function Base_URI(string memory _newBaseURI) public onlyOwner {baseURI = _newBaseURI;} function Base_URI_EXT(string memory uri_, string memory ext_) external onlyOwner { baseTokenURI = uri_; baseTokenURI_EXT = ext_; } function Token_URI(uint256 tokenId_, string memory uri_) external onlyOwner { uriToToken[tokenId_] = uri_; } function SelectURI(uint256 sel_) external onlyOwner { URI_Selector = sel_; } function uri(uint256 tokenId_) public view override returns (string memory) { if (URI_Selector == 0) { return baseURI; } else if (URI_Selector == 1) { return uriToToken[tokenId_]; } else if (URI_Selector == 2) { return string(abi.encodePacked(baseTokenURI, _toString(tokenId_), baseTokenURI_EXT)); } } function _toString(uint256 value_) internal pure returns (string memory) { if (value_ == 0) { return "0"; } uint256 _iterate = value_; uint256 _digits; while (_iterate != 0) { _digits++; _iterate /= 10; } bytes memory _buffer = new bytes(_digits); while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8(48 + uint256(value_ % 10 ))); value_ /= 10; } return string(_buffer); } function DropOne_One(address to_, uint256 id_, uint256 amount_) external onlyOwner { _mint(to_, id_, amount_, ""); } function DropOne_Some(address[] memory tos_, uint256 id_, uint256 amount_) external onlyOwner { for (uint256 i = 0; i < tos_.length; i++) { _mint(tos_[i], id_, amount_, "");} } function DropSome_One(address to_, uint256[] memory ids_, uint256[] memory amounts_) external onlyOwner { _mintBatch(to_, ids_, amounts_, ""); } function DropSome_Some(address[] memory tos_, uint256[] memory ids_, uint256[] memory amounts_) external onlyOwner { require(tos_.length == ids_.length && tos_.length == amounts_.length, "AirDrop ERROR: Array lengths mismatch!"); for (uint256 i = 0; i < tos_.length; i++) { _mint(tos_[i], ids_[i], amounts_[i], ""); } } function Burn(address account, uint256 id, uint256 value) public virtual { require(account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved"); _burn(account, id, value); } function Batch_Burn(address account, uint256[] memory ids, uint256[] memory values) public virtual { require(account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved"); _burnBatch(account, ids, values); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"previousOwner_","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner_","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"Base_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"string","name":"ext_","type":"string"}],"name":"Base_URI_EXT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Batch_Burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"DropOne_One","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos_","type":"address[]"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"DropOne_Some","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"DropSome_One","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos_","type":"address[]"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"DropSome_Some","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sel_","type":"uint256"}],"name":"SelectURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"}],"name":"Token_Name","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol_","type":"string"}],"name":"Token_Symbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"Token_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"URI_Selector","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0604052600f60808190526e42454d4554412041697264726f707360881b60a0908152620000329160049190620000fb565b5060408051808201909152600e8082526d42656d65746141697244726f707360901b60209092019182526200006a91600591620000fb565b50604051806080016040528060438152602001620028fb6043913980516200009b91600691602090910190620000fb565b506000600a55348015620000ae57600080fd5b50604080516020810190915260008152620000c981620000e2565b50600380546001600160a01b03191633179055620001de565b8051620000f7906002906020840190620000fb565b5050565b8280546200010990620001a1565b90600052602060002090601f0160209004810192826200012d576000855562000178565b82601f106200014857805160ff191683800117855562000178565b8280016001018555821562000178579182015b82811115620001785782518255916020019190600101906200015b565b50620001869291506200018a565b5090565b5b808211156200018657600081556001016200018b565b600181811c90821680620001b657607f821691505b60208210811415620001d857634e487b7160e01b600052602260045260246000fd5b50919050565b61270d80620001ee6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c8063690d1dd3116100de578063a22cb46511610097578063e985e9c511610071578063e985e9c514610360578063f1f717c41461039c578063f242432a146103af578063f2fde38b146103c257600080fd5b8063a22cb46514610327578063a8ffa7ee1461033a578063be57a7ed1461034d57600080fd5b8063690d1dd3146102b35780636ccd86ed146102c6578063715018a6146102d957806384b89873146102e15780638da5cb5b146102f457806395d89b411461031f57600080fd5b80632eb2c2d61161014b57806349995e5d1161012557806349995e5d1461025a5780634ab7081f1461026d5780634e1273f41461028057806364f392c2146102a057600080fd5b80632eb2c2d61461022b57806339f2b3e81461023e5780634188cebd1461025157600080fd5b8062fdd58e1461019257806301ffc9a7146101b857806306fdde03146101db57806308c96b53146101f05780630e89341c146102055780632c02eab414610218575b600080fd5b6101a56101a0366004611da0565b6103d5565b6040519081526020015b60405180910390f35b6101cb6101c6366004611efb565b61046c565b60405190151581526020016101af565b6101e36104be565b6040516101af9190612224565b6102036101fe366004611e60565b61054c565b005b6101e3610213366004611fc2565b61066d565b610203610226366004611cf1565b610775565b610203610239366004611be4565b6107bf565b61020361024c366004611eae565b610856565b6101a5600a5481565b610203610268366004611dca565b6108d2565b61020361027b366004611f35565b610915565b61029361028e366004611dfd565b610956565b6040516101af91906121e3565b6102036102ae366004611cf1565b610a7f565b6102036102c1366004611f35565b610ac2565b6102036102d4366004611fc2565b610aff565b610203610b2e565b6102036102ef366004611f69565b610b64565b600354610307906001600160a01b031681565b6040516001600160a01b0390911681526020016101af565b6101e3610bb5565b610203610335366004611d64565b610bc2565b610203610348366004611f35565b610bcd565b61020361035b366004611dca565b610c0a565b6101cb61036e366004611bb1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102036103aa366004611fdb565b610c4f565b6102036103bd366004611c8d565b610c98565b6102036103d0366004611b8f565b610cdd565b60006001600160a01b0383166104465760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049d57506001600160e01b031982166303a24d0760e21b145b806104b857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600480546104cb9061252e565b80601f01602080910402602001604051908101604052809291908181526020018280546104f79061252e565b80156105445780601f1061051957610100808354040283529160200191610544565b820191906000526020600020905b81548152906001019060200180831161052757829003601f168201915b505050505081565b6003546001600160a01b031633146105765760405162461bcd60e51b815260040161043d906123de565b81518351148015610588575080518351145b6105e35760405162461bcd60e51b815260206004820152602660248201527f41697244726f70204552524f523a204172726179206c656e67746873206d69736044820152656d617463682160d01b606482015260840161043d565b60005b835181101561066757610655848281518110610604576106046125f0565b602002602001015184838151811061061e5761061e6125f0565b6020026020010151848481518110610638576106386125f0565b602002602001015160405180602001604052806000815250610d79565b8061065f81612595565b9150506105e6565b50505050565b6060600a546000141561070c57600680546106879061252e565b80601f01602080910402602001604051908101604052809291908181526020018280546106b39061252e565b80156107005780601f106106d557610100808354040283529160200191610700565b820191906000526020600020905b8154815290600101906020018083116106e357829003601f168201915b50505050509050919050565b600a5460011415610730576000828152600b6020526040902080546106879061252e565b600a546002141561077057600761074683610e49565b600860405160200161075a93929190612118565b6040516020818303038152906040529050919050565b919050565b6003546001600160a01b0316331461079f5760405162461bcd60e51b815260040161043d906123de565b6107ba83838360405180602001604052806000815250610f4f565b505050565b6001600160a01b0385163314806107db57506107db853361036e565b6108425760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161043d565b61084f858585858561109a565b5050505050565b6003546001600160a01b031633146108805760405162461bcd60e51b815260040161043d906123de565b60005b8351811015610667576108c08482815181106108a1576108a16125f0565b6020026020010151848460405180602001604052806000815250610d79565b806108ca81612595565b915050610883565b6001600160a01b0383163314806108ee57506108ee833361036e565b61090a5760405162461bcd60e51b815260040161043d906122c3565b6107ba838383611236565b6003546001600160a01b0316331461093f5760405162461bcd60e51b815260040161043d906123de565b8051610952906005906020840190611984565b5050565b606081518351146109bb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161043d565b600083516001600160401b038111156109d6576109d6612606565b6040519080825280602002602001820160405280156109ff578160200160208202803683370190505b50905060005b8451811015610a7757610a4a858281518110610a2357610a236125f0565b6020026020010151858381518110610a3d57610a3d6125f0565b60200260200101516103d5565b828281518110610a5c57610a5c6125f0565b6020908102919091010152610a7081612595565b9050610a05565b509392505050565b6001600160a01b038316331480610a9b5750610a9b833361036e565b610ab75760405162461bcd60e51b815260040161043d906122c3565b6107ba838383611338565b6003546001600160a01b03163314610aec5760405162461bcd60e51b815260040161043d906123de565b8051610952906006906020840190611984565b6003546001600160a01b03163314610b295760405162461bcd60e51b815260040161043d906123de565b600a55565b6003546001600160a01b03163314610b585760405162461bcd60e51b815260040161043d906123de565b610b6260006114b4565b565b6003546001600160a01b03163314610b8e5760405162461bcd60e51b815260040161043d906123de565b8151610ba1906007906020850190611984565b5080516107ba906008906020840190611984565b600580546104cb9061252e565b610952338383611506565b6003546001600160a01b03163314610bf75760405162461bcd60e51b815260040161043d906123de565b8051610952906004906020840190611984565b6003546001600160a01b03163314610c345760405162461bcd60e51b815260040161043d906123de565b6107ba83838360405180602001604052806000815250610d79565b6003546001600160a01b03163314610c795760405162461bcd60e51b815260040161043d906123de565b6000828152600b6020908152604090912082516107ba92840190611984565b6001600160a01b038516331480610cb45750610cb4853361036e565b610cd05760405162461bcd60e51b815260040161043d906122c3565b61084f85858585856115e7565b6003546001600160a01b03163314610d075760405162461bcd60e51b815260040161043d906123de565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b606482015260840161043d565b610d76816114b4565b50565b6001600160a01b038416610d9f5760405162461bcd60e51b815260040161043d9061245b565b33610db981600087610db088611704565b61084f88611704565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610de99084906124bf565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461084f8160008787878761174f565b606081610e6d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610e975780610e8181612595565b9150610e909050600a836124d7565b9150610e71565b6000816001600160401b03811115610eb157610eb1612606565b6040519080825280601f01601f191660200182016040528015610edb576020820181803683370190505b5090505b8415610f475781610eef81612517565b9250610efe9050600a866125b0565b610f099060306124bf565b60f81b818381518110610f1e57610f1e6125f0565b60200101906001600160f81b031916908160001a905350610f40600a866124d7565b9450610edf565b949350505050565b6001600160a01b038416610f755760405162461bcd60e51b815260040161043d9061245b565b8151835114610f965760405162461bcd60e51b815260040161043d90612413565b3360005b845181101561103257838181518110610fb557610fb56125f0565b6020026020010151600080878481518110610fd257610fd26125f0565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461101a91906124bf565b9091555081905061102a81612595565b915050610f9a565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110839291906121f6565b60405180910390a461084f816000878787876118ba565b81518351146110bb5760405162461bcd60e51b815260040161043d90612413565b6001600160a01b0384166110e15760405162461bcd60e51b815260040161043d9061230c565b3360005b84518110156111c8576000858281518110611102576111026125f0565b602002602001015190506000858381518110611120576111206125f0565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111705760405162461bcd60e51b815260040161043d90612394565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111ad9084906124bf565b92505081905550505050806111c190612595565b90506110e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112189291906121f6565b60405180910390a461122e8187878787876118ba565b505050505050565b6001600160a01b03831661125c5760405162461bcd60e51b815260040161043d90612351565b3361128c8185600061126d87611704565b61127687611704565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156112cd5760405162461bcd60e51b815260040161043d9061227f565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03831661135e5760405162461bcd60e51b815260040161043d90612351565b805182511461137f5760405162461bcd60e51b815260040161043d90612413565b604080516020810190915260009081905233905b83518110156114555760008482815181106113b0576113b06125f0565b6020026020010151905060008483815181106113ce576113ce6125f0565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561141e5760405162461bcd60e51b815260040161043d9061227f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061144d81612595565b915050611393565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114a69291906121f6565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561157a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161043d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661160d5760405162461bcd60e51b815260040161043d9061230c565b3361161d818787610db088611704565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561165e5760405162461bcd60e51b815260040161043d90612394565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061169b9084906124bf565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116fb82888888888861174f565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061173e5761173e6125f0565b602090810291909101015292915050565b6001600160a01b0384163b1561122e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061179390899089908890889088906004016121a9565b602060405180830381600087803b1580156117ad57600080fd5b505af19250505080156117dd575060408051601f3d908101601f191682019092526117da91810190611f18565b60015b61188a576117e961261c565b806308c379a0141561182357506117fe612638565b806118095750611825565b8060405162461bcd60e51b815260040161043d9190612224565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161043d565b6001600160e01b0319811663f23a6e6160e01b146116fb5760405162461bcd60e51b815260040161043d90612237565b6001600160a01b0384163b1561122e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118fe908990899088908890889060040161214b565b602060405180830381600087803b15801561191857600080fd5b505af1925050508015611948575060408051601f3d908101601f1916820190925261194591810190611f18565b60015b611954576117e961261c565b6001600160e01b0319811663bc197c8160e01b146116fb5760405162461bcd60e51b815260040161043d90612237565b8280546119909061252e565b90600052602060002090601f0160209004810192826119b257600085556119f8565b82601f106119cb57805160ff19168380011785556119f8565b828001600101855582156119f8579182015b828111156119f85782518255916020019190600101906119dd565b50611a04929150611a08565b5090565b5b80821115611a045760008155600101611a09565b80356001600160a01b038116811461077057600080fd5b600082601f830112611a4557600080fd5b81356020611a528261249c565b604051611a5f8282612569565b8381528281019150858301600585901b87018401881015611a7f57600080fd5b60005b85811015611aa557611a9382611a1d565b84529284019290840190600101611a82565b5090979650505050505050565b600082601f830112611ac357600080fd5b81356020611ad08261249c565b604051611add8282612569565b8381528281019150858301600585901b87018401881015611afd57600080fd5b60005b85811015611aa557813584529284019290840190600101611b00565b600082601f830112611b2d57600080fd5b81356001600160401b03811115611b4657611b46612606565b604051611b5d601f8301601f191660200182612569565b818152846020838601011115611b7257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ba157600080fd5b611baa82611a1d565b9392505050565b60008060408385031215611bc457600080fd5b611bcd83611a1d565b9150611bdb60208401611a1d565b90509250929050565b600080600080600060a08688031215611bfc57600080fd5b611c0586611a1d565b9450611c1360208701611a1d565b935060408601356001600160401b0380821115611c2f57600080fd5b611c3b89838a01611ab2565b94506060880135915080821115611c5157600080fd5b611c5d89838a01611ab2565b93506080880135915080821115611c7357600080fd5b50611c8088828901611b1c565b9150509295509295909350565b600080600080600060a08688031215611ca557600080fd5b611cae86611a1d565b9450611cbc60208701611a1d565b9350604086013592506060860135915060808601356001600160401b03811115611ce557600080fd5b611c8088828901611b1c565b600080600060608486031215611d0657600080fd5b611d0f84611a1d565b925060208401356001600160401b0380821115611d2b57600080fd5b611d3787838801611ab2565b93506040860135915080821115611d4d57600080fd5b50611d5a86828701611ab2565b9150509250925092565b60008060408385031215611d7757600080fd5b611d8083611a1d565b915060208301358015158114611d9557600080fd5b809150509250929050565b60008060408385031215611db357600080fd5b611dbc83611a1d565b946020939093013593505050565b600080600060608486031215611ddf57600080fd5b611de884611a1d565b95602085013595506040909401359392505050565b60008060408385031215611e1057600080fd5b82356001600160401b0380821115611e2757600080fd5b611e3386838701611a34565b93506020850135915080821115611e4957600080fd5b50611e5685828601611ab2565b9150509250929050565b600080600060608486031215611e7557600080fd5b83356001600160401b0380821115611e8c57600080fd5b611e9887838801611a34565b94506020860135915080821115611d2b57600080fd5b600080600060608486031215611ec357600080fd5b83356001600160401b03811115611ed957600080fd5b611ee586828701611a34565b9660208601359650604090950135949350505050565b600060208284031215611f0d57600080fd5b8135611baa816126c1565b600060208284031215611f2a57600080fd5b8151611baa816126c1565b600060208284031215611f4757600080fd5b81356001600160401b03811115611f5d57600080fd5b610f4784828501611b1c565b60008060408385031215611f7c57600080fd5b82356001600160401b0380821115611f9357600080fd5b611f9f86838701611b1c565b93506020850135915080821115611fb557600080fd5b50611e5685828601611b1c565b600060208284031215611fd457600080fd5b5035919050565b60008060408385031215611fee57600080fd5b8235915060208301356001600160401b0381111561200b57600080fd5b611e5685828601611b1c565b600081518084526020808501945080840160005b838110156120475781518752958201959082019060010161202b565b509495945050505050565b6000815180845261206a8160208601602086016124eb565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061209857607f831692505b60208084108214156120ba57634e487b7160e01b600052602260045260246000fd5b8180156120ce57600181146120df5761210c565b60ff1986168952848901965061210c565b60008881526020902060005b868110156121045781548b8201529085019083016120eb565b505084890196505b50505050505092915050565b6000612124828661207e565b84516121348183602089016124eb565b6121408183018661207e565b979650505050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061217790830186612017565b82810360608401526121898186612017565b9050828103608084015261219d8185612052565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061214090830184612052565b602081526000611baa6020830184612017565b6040815260006122096040830185612017565b828103602084015261221b8185612017565b95945050505050565b602081526000611baa6020830184612052565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b038211156124b5576124b5612606565b5060051b60200190565b600082198211156124d2576124d26125c4565b500190565b6000826124e6576124e66125da565b500490565b60005b838110156125065781810151838201526020016124ee565b838111156106675750506000910152565b600081612526576125266125c4565b506000190190565b600181811c9082168061254257607f821691505b6020821081141561256357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561258e5761258e612606565b6040525050565b60006000198214156125a9576125a96125c4565b5060010190565b6000826125bf576125bf6125da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126355760046000803e5060005160e01c5b90565b600060443d10156126465790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561267557505050505090565b828501915081518181111561268d5750505050505090565b843d87010160208285010111156126a75750505050505090565b6126b660208286010187612569565b509095945050505050565b6001600160e01b031981168114610d7657600080fdfea2646970667358221220ddae43c6384fd87ac9ea0dd2e5c14567e70bf1fb583669004fa6767bc53f6d8e64736f6c6343000807003368747470733a2f2f697066732e696f2f697066732f516d544c375a4c333977366350387a7531634d597854664a46445877673457645174456a34596431595756424265
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018d5760003560e01c8063690d1dd3116100de578063a22cb46511610097578063e985e9c511610071578063e985e9c514610360578063f1f717c41461039c578063f242432a146103af578063f2fde38b146103c257600080fd5b8063a22cb46514610327578063a8ffa7ee1461033a578063be57a7ed1461034d57600080fd5b8063690d1dd3146102b35780636ccd86ed146102c6578063715018a6146102d957806384b89873146102e15780638da5cb5b146102f457806395d89b411461031f57600080fd5b80632eb2c2d61161014b57806349995e5d1161012557806349995e5d1461025a5780634ab7081f1461026d5780634e1273f41461028057806364f392c2146102a057600080fd5b80632eb2c2d61461022b57806339f2b3e81461023e5780634188cebd1461025157600080fd5b8062fdd58e1461019257806301ffc9a7146101b857806306fdde03146101db57806308c96b53146101f05780630e89341c146102055780632c02eab414610218575b600080fd5b6101a56101a0366004611da0565b6103d5565b6040519081526020015b60405180910390f35b6101cb6101c6366004611efb565b61046c565b60405190151581526020016101af565b6101e36104be565b6040516101af9190612224565b6102036101fe366004611e60565b61054c565b005b6101e3610213366004611fc2565b61066d565b610203610226366004611cf1565b610775565b610203610239366004611be4565b6107bf565b61020361024c366004611eae565b610856565b6101a5600a5481565b610203610268366004611dca565b6108d2565b61020361027b366004611f35565b610915565b61029361028e366004611dfd565b610956565b6040516101af91906121e3565b6102036102ae366004611cf1565b610a7f565b6102036102c1366004611f35565b610ac2565b6102036102d4366004611fc2565b610aff565b610203610b2e565b6102036102ef366004611f69565b610b64565b600354610307906001600160a01b031681565b6040516001600160a01b0390911681526020016101af565b6101e3610bb5565b610203610335366004611d64565b610bc2565b610203610348366004611f35565b610bcd565b61020361035b366004611dca565b610c0a565b6101cb61036e366004611bb1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102036103aa366004611fdb565b610c4f565b6102036103bd366004611c8d565b610c98565b6102036103d0366004611b8f565b610cdd565b60006001600160a01b0383166104465760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049d57506001600160e01b031982166303a24d0760e21b145b806104b857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600480546104cb9061252e565b80601f01602080910402602001604051908101604052809291908181526020018280546104f79061252e565b80156105445780601f1061051957610100808354040283529160200191610544565b820191906000526020600020905b81548152906001019060200180831161052757829003601f168201915b505050505081565b6003546001600160a01b031633146105765760405162461bcd60e51b815260040161043d906123de565b81518351148015610588575080518351145b6105e35760405162461bcd60e51b815260206004820152602660248201527f41697244726f70204552524f523a204172726179206c656e67746873206d69736044820152656d617463682160d01b606482015260840161043d565b60005b835181101561066757610655848281518110610604576106046125f0565b602002602001015184838151811061061e5761061e6125f0565b6020026020010151848481518110610638576106386125f0565b602002602001015160405180602001604052806000815250610d79565b8061065f81612595565b9150506105e6565b50505050565b6060600a546000141561070c57600680546106879061252e565b80601f01602080910402602001604051908101604052809291908181526020018280546106b39061252e565b80156107005780601f106106d557610100808354040283529160200191610700565b820191906000526020600020905b8154815290600101906020018083116106e357829003601f168201915b50505050509050919050565b600a5460011415610730576000828152600b6020526040902080546106879061252e565b600a546002141561077057600761074683610e49565b600860405160200161075a93929190612118565b6040516020818303038152906040529050919050565b919050565b6003546001600160a01b0316331461079f5760405162461bcd60e51b815260040161043d906123de565b6107ba83838360405180602001604052806000815250610f4f565b505050565b6001600160a01b0385163314806107db57506107db853361036e565b6108425760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161043d565b61084f858585858561109a565b5050505050565b6003546001600160a01b031633146108805760405162461bcd60e51b815260040161043d906123de565b60005b8351811015610667576108c08482815181106108a1576108a16125f0565b6020026020010151848460405180602001604052806000815250610d79565b806108ca81612595565b915050610883565b6001600160a01b0383163314806108ee57506108ee833361036e565b61090a5760405162461bcd60e51b815260040161043d906122c3565b6107ba838383611236565b6003546001600160a01b0316331461093f5760405162461bcd60e51b815260040161043d906123de565b8051610952906005906020840190611984565b5050565b606081518351146109bb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161043d565b600083516001600160401b038111156109d6576109d6612606565b6040519080825280602002602001820160405280156109ff578160200160208202803683370190505b50905060005b8451811015610a7757610a4a858281518110610a2357610a236125f0565b6020026020010151858381518110610a3d57610a3d6125f0565b60200260200101516103d5565b828281518110610a5c57610a5c6125f0565b6020908102919091010152610a7081612595565b9050610a05565b509392505050565b6001600160a01b038316331480610a9b5750610a9b833361036e565b610ab75760405162461bcd60e51b815260040161043d906122c3565b6107ba838383611338565b6003546001600160a01b03163314610aec5760405162461bcd60e51b815260040161043d906123de565b8051610952906006906020840190611984565b6003546001600160a01b03163314610b295760405162461bcd60e51b815260040161043d906123de565b600a55565b6003546001600160a01b03163314610b585760405162461bcd60e51b815260040161043d906123de565b610b6260006114b4565b565b6003546001600160a01b03163314610b8e5760405162461bcd60e51b815260040161043d906123de565b8151610ba1906007906020850190611984565b5080516107ba906008906020840190611984565b600580546104cb9061252e565b610952338383611506565b6003546001600160a01b03163314610bf75760405162461bcd60e51b815260040161043d906123de565b8051610952906004906020840190611984565b6003546001600160a01b03163314610c345760405162461bcd60e51b815260040161043d906123de565b6107ba83838360405180602001604052806000815250610d79565b6003546001600160a01b03163314610c795760405162461bcd60e51b815260040161043d906123de565b6000828152600b6020908152604090912082516107ba92840190611984565b6001600160a01b038516331480610cb45750610cb4853361036e565b610cd05760405162461bcd60e51b815260040161043d906122c3565b61084f85858585856115e7565b6003546001600160a01b03163314610d075760405162461bcd60e51b815260040161043d906123de565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b606482015260840161043d565b610d76816114b4565b50565b6001600160a01b038416610d9f5760405162461bcd60e51b815260040161043d9061245b565b33610db981600087610db088611704565b61084f88611704565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610de99084906124bf565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461084f8160008787878761174f565b606081610e6d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610e975780610e8181612595565b9150610e909050600a836124d7565b9150610e71565b6000816001600160401b03811115610eb157610eb1612606565b6040519080825280601f01601f191660200182016040528015610edb576020820181803683370190505b5090505b8415610f475781610eef81612517565b9250610efe9050600a866125b0565b610f099060306124bf565b60f81b818381518110610f1e57610f1e6125f0565b60200101906001600160f81b031916908160001a905350610f40600a866124d7565b9450610edf565b949350505050565b6001600160a01b038416610f755760405162461bcd60e51b815260040161043d9061245b565b8151835114610f965760405162461bcd60e51b815260040161043d90612413565b3360005b845181101561103257838181518110610fb557610fb56125f0565b6020026020010151600080878481518110610fd257610fd26125f0565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461101a91906124bf565b9091555081905061102a81612595565b915050610f9a565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110839291906121f6565b60405180910390a461084f816000878787876118ba565b81518351146110bb5760405162461bcd60e51b815260040161043d90612413565b6001600160a01b0384166110e15760405162461bcd60e51b815260040161043d9061230c565b3360005b84518110156111c8576000858281518110611102576111026125f0565b602002602001015190506000858381518110611120576111206125f0565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111705760405162461bcd60e51b815260040161043d90612394565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111ad9084906124bf565b92505081905550505050806111c190612595565b90506110e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112189291906121f6565b60405180910390a461122e8187878787876118ba565b505050505050565b6001600160a01b03831661125c5760405162461bcd60e51b815260040161043d90612351565b3361128c8185600061126d87611704565b61127687611704565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156112cd5760405162461bcd60e51b815260040161043d9061227f565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03831661135e5760405162461bcd60e51b815260040161043d90612351565b805182511461137f5760405162461bcd60e51b815260040161043d90612413565b604080516020810190915260009081905233905b83518110156114555760008482815181106113b0576113b06125f0565b6020026020010151905060008483815181106113ce576113ce6125f0565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561141e5760405162461bcd60e51b815260040161043d9061227f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061144d81612595565b915050611393565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114a69291906121f6565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561157a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161043d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661160d5760405162461bcd60e51b815260040161043d9061230c565b3361161d818787610db088611704565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561165e5760405162461bcd60e51b815260040161043d90612394565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061169b9084906124bf565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116fb82888888888861174f565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061173e5761173e6125f0565b602090810291909101015292915050565b6001600160a01b0384163b1561122e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061179390899089908890889088906004016121a9565b602060405180830381600087803b1580156117ad57600080fd5b505af19250505080156117dd575060408051601f3d908101601f191682019092526117da91810190611f18565b60015b61188a576117e961261c565b806308c379a0141561182357506117fe612638565b806118095750611825565b8060405162461bcd60e51b815260040161043d9190612224565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161043d565b6001600160e01b0319811663f23a6e6160e01b146116fb5760405162461bcd60e51b815260040161043d90612237565b6001600160a01b0384163b1561122e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118fe908990899088908890889060040161214b565b602060405180830381600087803b15801561191857600080fd5b505af1925050508015611948575060408051601f3d908101601f1916820190925261194591810190611f18565b60015b611954576117e961261c565b6001600160e01b0319811663bc197c8160e01b146116fb5760405162461bcd60e51b815260040161043d90612237565b8280546119909061252e565b90600052602060002090601f0160209004810192826119b257600085556119f8565b82601f106119cb57805160ff19168380011785556119f8565b828001600101855582156119f8579182015b828111156119f85782518255916020019190600101906119dd565b50611a04929150611a08565b5090565b5b80821115611a045760008155600101611a09565b80356001600160a01b038116811461077057600080fd5b600082601f830112611a4557600080fd5b81356020611a528261249c565b604051611a5f8282612569565b8381528281019150858301600585901b87018401881015611a7f57600080fd5b60005b85811015611aa557611a9382611a1d565b84529284019290840190600101611a82565b5090979650505050505050565b600082601f830112611ac357600080fd5b81356020611ad08261249c565b604051611add8282612569565b8381528281019150858301600585901b87018401881015611afd57600080fd5b60005b85811015611aa557813584529284019290840190600101611b00565b600082601f830112611b2d57600080fd5b81356001600160401b03811115611b4657611b46612606565b604051611b5d601f8301601f191660200182612569565b818152846020838601011115611b7257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ba157600080fd5b611baa82611a1d565b9392505050565b60008060408385031215611bc457600080fd5b611bcd83611a1d565b9150611bdb60208401611a1d565b90509250929050565b600080600080600060a08688031215611bfc57600080fd5b611c0586611a1d565b9450611c1360208701611a1d565b935060408601356001600160401b0380821115611c2f57600080fd5b611c3b89838a01611ab2565b94506060880135915080821115611c5157600080fd5b611c5d89838a01611ab2565b93506080880135915080821115611c7357600080fd5b50611c8088828901611b1c565b9150509295509295909350565b600080600080600060a08688031215611ca557600080fd5b611cae86611a1d565b9450611cbc60208701611a1d565b9350604086013592506060860135915060808601356001600160401b03811115611ce557600080fd5b611c8088828901611b1c565b600080600060608486031215611d0657600080fd5b611d0f84611a1d565b925060208401356001600160401b0380821115611d2b57600080fd5b611d3787838801611ab2565b93506040860135915080821115611d4d57600080fd5b50611d5a86828701611ab2565b9150509250925092565b60008060408385031215611d7757600080fd5b611d8083611a1d565b915060208301358015158114611d9557600080fd5b809150509250929050565b60008060408385031215611db357600080fd5b611dbc83611a1d565b946020939093013593505050565b600080600060608486031215611ddf57600080fd5b611de884611a1d565b95602085013595506040909401359392505050565b60008060408385031215611e1057600080fd5b82356001600160401b0380821115611e2757600080fd5b611e3386838701611a34565b93506020850135915080821115611e4957600080fd5b50611e5685828601611ab2565b9150509250929050565b600080600060608486031215611e7557600080fd5b83356001600160401b0380821115611e8c57600080fd5b611e9887838801611a34565b94506020860135915080821115611d2b57600080fd5b600080600060608486031215611ec357600080fd5b83356001600160401b03811115611ed957600080fd5b611ee586828701611a34565b9660208601359650604090950135949350505050565b600060208284031215611f0d57600080fd5b8135611baa816126c1565b600060208284031215611f2a57600080fd5b8151611baa816126c1565b600060208284031215611f4757600080fd5b81356001600160401b03811115611f5d57600080fd5b610f4784828501611b1c565b60008060408385031215611f7c57600080fd5b82356001600160401b0380821115611f9357600080fd5b611f9f86838701611b1c565b93506020850135915080821115611fb557600080fd5b50611e5685828601611b1c565b600060208284031215611fd457600080fd5b5035919050565b60008060408385031215611fee57600080fd5b8235915060208301356001600160401b0381111561200b57600080fd5b611e5685828601611b1c565b600081518084526020808501945080840160005b838110156120475781518752958201959082019060010161202b565b509495945050505050565b6000815180845261206a8160208601602086016124eb565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061209857607f831692505b60208084108214156120ba57634e487b7160e01b600052602260045260246000fd5b8180156120ce57600181146120df5761210c565b60ff1986168952848901965061210c565b60008881526020902060005b868110156121045781548b8201529085019083016120eb565b505084890196505b50505050505092915050565b6000612124828661207e565b84516121348183602089016124eb565b6121408183018661207e565b979650505050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061217790830186612017565b82810360608401526121898186612017565b9050828103608084015261219d8185612052565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061214090830184612052565b602081526000611baa6020830184612017565b6040815260006122096040830185612017565b828103602084015261221b8185612017565b95945050505050565b602081526000611baa6020830184612052565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b038211156124b5576124b5612606565b5060051b60200190565b600082198211156124d2576124d26125c4565b500190565b6000826124e6576124e66125da565b500490565b60005b838110156125065781810151838201526020016124ee565b838111156106675750506000910152565b600081612526576125266125c4565b506000190190565b600181811c9082168061254257607f821691505b6020821081141561256357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561258e5761258e612606565b6040525050565b60006000198214156125a9576125a96125c4565b5060010190565b6000826125bf576125bf6125da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126355760046000803e5060005160e01c5b90565b600060443d10156126465790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561267557505050505090565b828501915081518181111561268d5750505050505090565b843d87010160208285010111156126a75750505050505090565b6126b660208286010187612569565b509095945050505050565b6001600160e01b031981168114610d7657600080fdfea2646970667358221220ddae43c6384fd87ac9ea0dd2e5c14567e70bf1fb583669004fa6767bc53f6d8e64736f6c63430008070033
Deployed Bytecode Sourcemap
35635:3397:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21276:231;;;;;;:::i;:::-;;:::i;:::-;;;21282:25:1;;;21270:2;21255:18;21276:231:0;;;;;;;;20299:310;;;;;;:::i;:::-;;:::i;:::-;;;14381:14:1;;14374:22;14356:41;;14344:2;14329:18;20299:310:0;14216:187:1;35757:38:0;;;:::i;:::-;;;;;;;:::i;38091:369::-;;;;;;:::i;:::-;;:::i;:::-;;36793:334;;;;;;:::i;:::-;;:::i;37927:158::-;;;;;;:::i;:::-;;:::i;23215:442::-;;;;;;:::i;:::-;;:::i;37718:203::-;;;;;;:::i;:::-;;:::i;36068:31::-;;;;;;38468:261;;;;;;:::i;:::-;;:::i;36246:85::-;;;;;;:::i;:::-;;:::i;21673:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38735:294::-;;;;;;:::i;:::-;;:::i;36339:86::-;;;;;;:::i;:::-;;:::i;36705:76::-;;;;;;:::i;:::-;;:::i;35525:103::-;;;:::i;36433:139::-;;;;;;:::i;:::-;;:::i;34841:20::-;;;;;-1:-1:-1;;;;;34841:20:0;;;;;;-1:-1:-1;;;;;12040:32:1;;;12022:51;;12010:2;11995:18;34841:20:0;11876:203:1;35802:39:0;;;:::i;22270:155::-;;;;;;:::i;:::-;;:::i;36161:77::-;;;;;;:::i;:::-;;:::i;37582:130::-;;;;;;:::i;:::-;;:::i;22497:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;22620:27:0;;;22596:4;22620:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22497:168;36580:117;;;;;;:::i;:::-;;:::i;22737:401::-;;;;;;:::i;:::-;;:::i;35314:205::-;;;;;;:::i;:::-;;:::i;21276:231::-;21362:7;-1:-1:-1;;;;;21390:21:0;;21382:77;;;;-1:-1:-1;;;21382:77:0;;16071:2:1;21382:77:0;;;16053:21:1;16110:2;16090:18;;;16083:30;16149:34;16129:18;;;16122:62;-1:-1:-1;;;16200:18:1;;;16193:41;16251:19;;21382:77:0;;;;;;;;;-1:-1:-1;21477:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;21477:22:0;;;;;;;;;;;;21276:231::o;20299:310::-;20401:4;-1:-1:-1;;;;;;20438:41:0;;-1:-1:-1;;;20438:41:0;;:110;;-1:-1:-1;;;;;;;20496:52:0;;-1:-1:-1;;;20496:52:0;20438:110;:163;;;-1:-1:-1;;;;;;;;;;11519:40:0;;;20565:36;20418:183;20299:310;-1:-1:-1;;20299:310:0:o;35757:38::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38091:369::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;38240:4:::1;:11;38225:4;:11;:26;:60;;;;;38270:8;:15;38255:4;:11;:30;38225:60;38217:125;;;::::0;-1:-1:-1;;;38217:125:0;;15664:2:1;38217:125:0::1;::::0;::::1;15646:21:1::0;15703:2;15683:18;;;15676:30;15742:34;15722:18;;;15715:62;-1:-1:-1;;;15793:18:1;;;15786:36;15839:19;;38217:125:0::1;15462:402:1::0;38217:125:0::1;38358:9;38353:100;38377:4;:11;38373:1;:15;38353:100;;;38410:40;38416:4;38421:1;38416:7;;;;;;;;:::i;:::-;;;;;;;38425:4;38430:1;38425:7;;;;;;;;:::i;:::-;;;;;;;38434:8;38443:1;38434:11;;;;;;;;:::i;:::-;;;;;;;38410:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;38390:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38353:100;;;;38091:369:::0;;;:::o;36793:334::-;36854:13;36884:12;;36900:1;36884:17;36880:240;;;36912:7;36905:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36793:334;;;:::o;36880:240::-;36942:12;;36958:1;36942:17;36938:182;;;36970:20;;;;:10;:20;;;;;36963:27;;;;;:::i;36938:182::-;37012:12;;37028:1;37012:17;37008:112;;;37064:12;37078:19;37088:8;37078:9;:19::i;:::-;37099:16;37047:69;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37033:84;;36793:334;;;:::o;37008:112::-;36793:334;;;:::o;37927:158::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;38042:35:::1;38053:3;38058:4;38064:8;38042:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;37927:158:::0;;;:::o;23215:442::-;-1:-1:-1;;;;;23448:20:0;;847:10;23448:20;;:60;;-1:-1:-1;23472:36:0;23489:4;847:10;22497:168;:::i;23472:36::-;23426:160;;;;-1:-1:-1;;;23426:160:0;;18112:2:1;23426:160:0;;;18094:21:1;18151:2;18131:18;;;18124:30;18190:34;18170:18;;;18163:62;-1:-1:-1;;;18241:18:1;;;18234:48;18299:19;;23426:160:0;17910:414:1;23426:160:0;23597:52;23620:4;23626:2;23630:3;23635:7;23644:4;23597:22;:52::i;:::-;23215:442;;;;;:::o;37718:203::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;37828:9:::1;37823:91;37847:4;:11;37843:1;:15;37823:91;;;37880:32;37886:4;37891:1;37886:7;;;;;;;;:::i;:::-;;;;;;;37895:3;37900:7;37880:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;37860:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37823:91;;38468:261:::0;-1:-1:-1;;;;;38560:23:0;;847:10;38560:23;;:66;;-1:-1:-1;38587:39:0;38604:7;847:10;22497:168;:::i;38587:39::-;38552:133;;;;-1:-1:-1;;;38552:133:0;;;;;;;:::i;:::-;38696:25;38702:7;38711:2;38715:5;38696;:25::i;36246:85::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36312:16;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;36246:85:::0;:::o;21673:524::-;21829:16;21890:3;:10;21871:8;:15;:29;21863:83;;;;-1:-1:-1;;;21863:83:0;;20117:2:1;21863:83:0;;;20099:21:1;20156:2;20136:18;;;20129:30;20195:34;20175:18;;;20168:62;-1:-1:-1;;;20246:18:1;;;20239:39;20295:19;;21863:83:0;19915:405:1;21863:83:0;21959:30;22006:8;:15;-1:-1:-1;;;;;21992:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21992:30:0;;21959:63;;22040:9;22035:122;22059:8;:15;22055:1;:19;22035:122;;;22115:30;22125:8;22134:1;22125:11;;;;;;;;:::i;:::-;;;;;;;22138:3;22142:1;22138:6;;;;;;;;:::i;:::-;;;;;;;22115:9;:30::i;:::-;22096:13;22110:1;22096:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;22076:3;;;:::i;:::-;;;22035:122;;;-1:-1:-1;22176:13:0;21673:524;-1:-1:-1;;;21673:524:0:o;38735:294::-;-1:-1:-1;;;;;38853:23:0;;847:10;38853:23;;:66;;-1:-1:-1;38880:39:0;38897:7;847:10;22497:168;:::i;38880:39::-;38845:133;;;;-1:-1:-1;;;38845:133:0;;;;;;;:::i;:::-;38989:32;39000:7;39009:3;39014:6;38989:10;:32::i;36339:86::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36402:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;36705:76::-:0;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36759:12:::1;:19:::0;36705:76::o;35525:103::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;35590:30:::1;35617:1;35590:18;:30::i;:::-;35525:103::o:0;36433:139::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36525:19;;::::1;::::0;:12:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;36546:23:0;;::::1;::::0;:16:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;35802:39::-:0;;;;;;;:::i;22270:155::-;22365:52;847:10;22398:8;22408;22365:18;:52::i;36161:77::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36223:12;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;37582:130::-:0;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;37676:28:::1;37682:3;37687;37692:7;37676:28;;;;;;;;;;;::::0;:5:::1;:28::i;36580:117::-:0;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;36667:20:::1;::::0;;;:10:::1;:20;::::0;;;;;;;:27;;::::1;::::0;;::::1;::::0;::::1;:::i;22737:401::-:0;-1:-1:-1;;;;;22945:20:0;;847:10;22945:20;;:60;;-1:-1:-1;22969:36:0;22986:4;847:10;22497:168;:::i;22969:36::-;22923:151;;;;-1:-1:-1;;;22923:151:0;;;;;;;:::i;:::-;23085:45;23103:4;23109:2;23113;23117:6;23125:4;23085:17;:45::i;35314:205::-;35031:5;;-1:-1:-1;;;;;35031:5:0;35040:10;35031:19;35023:64;;;;-1:-1:-1;;;35023:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35404:23:0;::::1;35396:75;;;::::0;-1:-1:-1;;;35396:75:0;;16483:2:1;35396:75:0::1;::::0;::::1;16465:21:1::0;16522:2;16502:18;;;16495:30;16561:34;16541:18;;;16534:62;-1:-1:-1;;;16612:18:1;;;16605:37;16659:19;;35396:75:0::1;16281:403:1::0;35396:75:0::1;35482:29;35501:9;35482:18;:29::i;:::-;35314:205:::0;:::o;27691:569::-;-1:-1:-1;;;;;27844:16:0;;27836:62;;;;-1:-1:-1;;;27836:62:0;;;;;;;:::i;:::-;847:10;27955:102;847:10;27911:16;27998:2;28002:21;28020:2;28002:17;:21::i;:::-;28025:25;28043:6;28025:17;:25::i;27955:102::-;28070:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28070:17:0;;;;;;;;;:27;;28091:6;;28070:9;:27;;28091:6;;28070:27;:::i;:::-;;;;-1:-1:-1;;28113:52:0;;;21492:25:1;;;21548:2;21533:18;;21526:34;;;-1:-1:-1;;;;;28113:52:0;;;;28146:1;;28113:52;;;;;;21465:18:1;28113:52:0;;;;;;;28178:74;28209:8;28227:1;28231:2;28235;28239:6;28247:4;28178:30;:74::i;37133:443::-;37191:13;37221:11;37217:32;;-1:-1:-1;;37236:10:0;;;;;;;;;;;;-1:-1:-1;;;37236:10:0;;;;;37133:443::o;37217:32::-;37278:6;37259:16;37312:52;37319:13;;37312:52;;37336:9;;;;:::i;:::-;;-1:-1:-1;37347:14:0;;-1:-1:-1;37359:2:0;37347:14;;:::i;:::-;;;37312:52;;;37374:20;37407:7;-1:-1:-1;;;;;37397:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37397:18:0;;37374:41;;37426:110;37433:11;;37426:110;;37448:9;;;;:::i;:::-;;-1:-1:-1;37504:11:0;;-1:-1:-1;37513:2:0;37504:6;:11;:::i;:::-;37491:26;;:2;:26;:::i;:::-;37478:41;;37459:7;37467;37459:16;;;;;;;;:::i;:::-;;;;:60;-1:-1:-1;;;;;37459:60:0;;;;;;;;-1:-1:-1;37521:12:0;37531:2;37521:12;;:::i;:::-;;;37426:110;;;37560:7;37133:443;-1:-1:-1;;;;37133:443:0:o;28616:735::-;-1:-1:-1;;;;;28794:16:0;;28786:62;;;;-1:-1:-1;;;28786:62:0;;;;;;;:::i;:::-;28881:7;:14;28867:3;:10;:28;28859:81;;;;-1:-1:-1;;;28859:81:0;;;;;;;:::i;:::-;847:10;28953:16;29076:103;29100:3;:10;29096:1;:14;29076:103;;;29157:7;29165:1;29157:10;;;;;;;;:::i;:::-;;;;;;;29132:9;:17;29142:3;29146:1;29142:6;;;;;;;;:::i;:::-;;;;;;;29132:17;;;;;;;;;;;:21;29150:2;-1:-1:-1;;;;;29132:21:0;-1:-1:-1;;;;;29132:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;29112:3:0;;-1:-1:-1;29112:3:0;;;:::i;:::-;;;;29076:103;;;;29232:2;-1:-1:-1;;;;;29196:53:0;29228:1;-1:-1:-1;;;;;29196:53:0;29210:8;-1:-1:-1;;;;;29196:53:0;;29236:3;29241:7;29196:53;;;;;;;:::i;:::-;;;;;;;;29262:81;29298:8;29316:1;29320:2;29324:3;29329:7;29338:4;29262:35;:81::i;25299:1074::-;25526:7;:14;25512:3;:10;:28;25504:81;;;;-1:-1:-1;;;25504:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25604:16:0;;25596:66;;;;-1:-1:-1;;;25596:66:0;;;;;;;:::i;:::-;847:10;25675:16;25792:421;25816:3;:10;25812:1;:14;25792:421;;;25848:10;25861:3;25865:1;25861:6;;;;;;;;:::i;:::-;;;;;;;25848:19;;25882:14;25899:7;25907:1;25899:10;;;;;;;;:::i;:::-;;;;;;;;;;;;25926:19;25948:13;;;;;;;;;;-1:-1:-1;;;;;25948:19:0;;;;;;;;;;;;25899:10;;-1:-1:-1;25990:21:0;;;;25982:76;;;;-1:-1:-1;;;25982:76:0;;;;;;;:::i;:::-;26102:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26102:19:0;;;;;;;;;;26124:20;;;26102:42;;26174:17;;;;;;;:27;;26124:20;;26102:9;26174:27;;26124:20;;26174:27;:::i;:::-;;;;;;;;25833:380;;;25828:3;;;;:::i;:::-;;;25792:421;;;;26260:2;-1:-1:-1;;;;;26230:47:0;26254:4;-1:-1:-1;;;;;26230:47:0;26244:8;-1:-1:-1;;;;;26230:47:0;;26264:3;26269:7;26230:47;;;;;;;:::i;:::-;;;;;;;;26290:75;26326:8;26336:4;26342:2;26346:3;26351:7;26360:4;26290:35;:75::i;:::-;25493:880;25299:1074;;;;;:::o;29601:648::-;-1:-1:-1;;;;;29728:18:0;;29720:66;;;;-1:-1:-1;;;29720:66:0;;;;;;;:::i;:::-;847:10;29843:102;847:10;29874:4;29799:16;29892:21;29910:2;29892:17;:21::i;:::-;29915:25;29933:6;29915:17;:25::i;:::-;-1:-1:-1;;29843:102:0;;;;;;;;;-1:-1:-1;29843:102:0;;-1:-1:-1;;;25299:1074:0;29843:102;29958:19;29980:13;;;;;;;;;;;-1:-1:-1;;;;;29980:19:0;;;;;;;;;;30018:21;;;;30010:70;;;;-1:-1:-1;;;30010:70:0;;;;;;;:::i;:::-;30116:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30116:19:0;;;;;;;;;;;;30138:20;;;30116:42;;30187:54;;21492:25:1;;;21533:18;;;21526:34;;;30116:19:0;;30187:54;;;;;;21465:18:1;30187:54:0;;;;;;;29709:540;;29601:648;;;:::o;30452:891::-;-1:-1:-1;;;;;30604:18:0;;30596:66;;;;-1:-1:-1;;;30596:66:0;;;;;;;:::i;:::-;30695:7;:14;30681:3;:10;:28;30673:81;;;;-1:-1:-1;;;30673:81:0;;;;;;;:::i;:::-;30811:66;;;;;;;;;30767:16;30811:66;;;;847:10;;30890:373;30914:3;:10;30910:1;:14;30890:373;;;30946:10;30959:3;30963:1;30959:6;;;;;;;;:::i;:::-;;;;;;;30946:19;;30980:14;30997:7;31005:1;30997:10;;;;;;;;:::i;:::-;;;;;;;;;;;;31024:19;31046:13;;;;;;;;;;-1:-1:-1;;;;;31046:19:0;;;;;;;;;;;;30997:10;;-1:-1:-1;31088:21:0;;;;31080:70;;;;-1:-1:-1;;;31080:70:0;;;;;;;:::i;:::-;31194:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31194:19:0;;;;;;;;;;31216:20;;31194:42;;30926:3;;;;:::i;:::-;;;;30890:373;;;;31318:1;-1:-1:-1;;;;;31280:55:0;31304:4;-1:-1:-1;;;;;31280:55:0;31294:8;-1:-1:-1;;;;;31280:55:0;;31322:3;31327:7;31280:55;;;;;;;:::i;:::-;;;;;;;;30585:758;30452:891;;;:::o;35100:208::-;35200:5;;;-1:-1:-1;;;;;35216:17:0;;;-1:-1:-1;;;;;;35216:17:0;;;;;;;35249:47;;35200:5;;;35216:17;35200:5;;35249:47;;35175:22;;35249:47;35164:144;35100:208;:::o;31485:331::-;31640:8;-1:-1:-1;;;;;31631:17:0;:5;-1:-1:-1;;;;;31631:17:0;;;31623:71;;;;-1:-1:-1;;;31623:71:0;;19707:2:1;31623:71:0;;;19689:21:1;19746:2;19726:18;;;19719:30;19785:34;19765:18;;;19758:62;-1:-1:-1;;;19836:18:1;;;19829:39;19885:19;;31623:71:0;19505:405:1;31623:71:0;-1:-1:-1;;;;;31705:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31705:46:0;;;;;;;;;;31767:41;;14356::1;;;31767::0;;14329:18:1;31767:41:0;;;;;;;31485:331;;;:::o;24121:820::-;-1:-1:-1;;;;;24309:16:0;;24301:66;;;;-1:-1:-1;;;24301:66:0;;;;;;;:::i;:::-;847:10;24424:96;847:10;24455:4;24461:2;24465:21;24483:2;24465:17;:21::i;24424:96::-;24533:19;24555:13;;;;;;;;;;;-1:-1:-1;;;;;24555:19:0;;;;;;;;;;24593:21;;;;24585:76;;;;-1:-1:-1;;;24585:76:0;;;;;;;:::i;:::-;24697:9;:13;;;;;;;;;;;-1:-1:-1;;;;;24697:19:0;;;;;;;;;;24719:20;;;24697:42;;24761:17;;;;;;;:27;;24719:20;;24697:9;24761:27;;24719:20;;24761:27;:::i;:::-;;;;-1:-1:-1;;24806:46:0;;;21492:25:1;;;21548:2;21533:18;;21526:34;;;-1:-1:-1;;;;;24806:46:0;;;;;;;;;;;;;;21465:18:1;24806:46:0;;;;;;;24865:68;24896:8;24906:4;24912:2;24916;24920:6;24928:4;24865:30;:68::i;:::-;24290:651;;24121:820;;;;;:::o;34574:198::-;34694:16;;;34708:1;34694:16;;;;;;;;;34640;;34669:22;;34694:16;;;;;;;;;;;;-1:-1:-1;34694:16:0;34669:41;;34732:7;34721:5;34727:1;34721:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;34759:5;34574:198;-1:-1:-1;;34574:198:0:o;33001:744::-;-1:-1:-1;;;;;33216:13:0;;2547:19;:23;33212:526;;33252:72;;-1:-1:-1;;;33252:72:0;;-1:-1:-1;;;;;33252:38:0;;;;;:72;;33291:8;;33301:4;;33307:2;;33311:6;;33319:4;;33252:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33252:72:0;;;;;;;;-1:-1:-1;;33252:72:0;;;;;;;;;;;;:::i;:::-;;;33248:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33600:6;33593:14;;-1:-1:-1;;;33593:14:0;;;;;;;;:::i;33248:479::-;;;33649:62;;-1:-1:-1;;;33649:62:0;;14834:2:1;33649:62:0;;;14816:21:1;14873:2;14853:18;;;14846:30;14912:34;14892:18;;;14885:62;-1:-1:-1;;;14963:18:1;;;14956:50;15023:19;;33649:62:0;14632:416:1;33248:479:0;-1:-1:-1;;;;;;33374:55:0;;-1:-1:-1;;;33374:55:0;33370:154;;33454:50;;-1:-1:-1;;;33454:50:0;;;;;;;:::i;33753:813::-;-1:-1:-1;;;;;33993:13:0;;2547:19;:23;33989:570;;34029:79;;-1:-1:-1;;;34029:79:0;;-1:-1:-1;;;;;34029:43:0;;;;;:79;;34073:8;;34083:4;;34089:3;;34094:7;;34103:4;;34029:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34029:79:0;;;;;;;;-1:-1:-1;;34029:79:0;;;;;;;;;;;;:::i;:::-;;;34025:523;;;;:::i;:::-;-1:-1:-1;;;;;;34190:60:0;;-1:-1:-1;;;34190:60:0;34186:159;;34275:50;;-1:-1:-1;;;34275:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:741;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:169;748:2;745:1;742:9;734:169;;;805:23;824:3;805:23;:::i;:::-;793:36;;849:12;;;;881;;;;766:1;759:9;734:169;;;-1:-1:-1;921:6:1;;192:741;-1:-1:-1;;;;;;;192:741:1:o;938:735::-;992:5;1045:3;1038:4;1030:6;1026:17;1022:27;1012:55;;1063:1;1060;1053:12;1012:55;1099:6;1086:20;1125:4;1148:43;1188:2;1148:43;:::i;:::-;1220:2;1214:9;1232:31;1260:2;1252:6;1232:31;:::i;:::-;1298:18;;;1332:15;;;;-1:-1:-1;1367:15:1;;;1417:1;1413:10;;;1401:23;;1397:32;;1394:41;-1:-1:-1;1391:61:1;;;1448:1;1445;1438:12;1391:61;1470:1;1480:163;1494:2;1491:1;1488:9;1480:163;;;1551:17;;1539:30;;1589:12;;;;1621;;;;1512:1;1505:9;1480:163;;1678:555;1720:5;1773:3;1766:4;1758:6;1754:17;1750:27;1740:55;;1791:1;1788;1781:12;1740:55;1827:6;1814:20;-1:-1:-1;;;;;1849:2:1;1846:26;1843:52;;;1875:18;;:::i;:::-;1924:2;1918:9;1936:67;1991:2;1972:13;;-1:-1:-1;;1968:27:1;1997:4;1964:38;1918:9;1936:67;:::i;:::-;2027:2;2019:6;2012:18;2073:3;2066:4;2061:2;2053:6;2049:15;2045:26;2042:35;2039:55;;;2090:1;2087;2080:12;2039:55;2154:2;2147:4;2139:6;2135:17;2128:4;2120:6;2116:17;2103:54;2201:1;2177:15;;;2194:4;2173:26;2166:37;;;;2181:6;1678:555;-1:-1:-1;;;1678:555:1:o;2238:186::-;2297:6;2350:2;2338:9;2329:7;2325:23;2321:32;2318:52;;;2366:1;2363;2356:12;2318:52;2389:29;2408:9;2389:29;:::i;:::-;2379:39;2238:186;-1:-1:-1;;;2238:186:1:o;2429:260::-;2497:6;2505;2558:2;2546:9;2537:7;2533:23;2529:32;2526:52;;;2574:1;2571;2564:12;2526:52;2597:29;2616:9;2597:29;:::i;:::-;2587:39;;2645:38;2679:2;2668:9;2664:18;2645:38;:::i;:::-;2635:48;;2429:260;;;;;:::o;2694:943::-;2848:6;2856;2864;2872;2880;2933:3;2921:9;2912:7;2908:23;2904:33;2901:53;;;2950:1;2947;2940:12;2901:53;2973:29;2992:9;2973:29;:::i;:::-;2963:39;;3021:38;3055:2;3044:9;3040:18;3021:38;:::i;:::-;3011:48;;3110:2;3099:9;3095:18;3082:32;-1:-1:-1;;;;;3174:2:1;3166:6;3163:14;3160:34;;;3190:1;3187;3180:12;3160:34;3213:61;3266:7;3257:6;3246:9;3242:22;3213:61;:::i;:::-;3203:71;;3327:2;3316:9;3312:18;3299:32;3283:48;;3356:2;3346:8;3343:16;3340:36;;;3372:1;3369;3362:12;3340:36;3395:63;3450:7;3439:8;3428:9;3424:24;3395:63;:::i;:::-;3385:73;;3511:3;3500:9;3496:19;3483:33;3467:49;;3541:2;3531:8;3528:16;3525:36;;;3557:1;3554;3547:12;3525:36;;3580:51;3623:7;3612:8;3601:9;3597:24;3580:51;:::i;:::-;3570:61;;;2694:943;;;;;;;;:::o;3642:606::-;3746:6;3754;3762;3770;3778;3831:3;3819:9;3810:7;3806:23;3802:33;3799:53;;;3848:1;3845;3838:12;3799:53;3871:29;3890:9;3871:29;:::i;:::-;3861:39;;3919:38;3953:2;3942:9;3938:18;3919:38;:::i;:::-;3909:48;;4004:2;3993:9;3989:18;3976:32;3966:42;;4055:2;4044:9;4040:18;4027:32;4017:42;;4110:3;4099:9;4095:19;4082:33;-1:-1:-1;;;;;4130:6:1;4127:30;4124:50;;;4170:1;4167;4160:12;4124:50;4193:49;4234:7;4225:6;4214:9;4210:22;4193:49;:::i;4253:669::-;4380:6;4388;4396;4449:2;4437:9;4428:7;4424:23;4420:32;4417:52;;;4465:1;4462;4455:12;4417:52;4488:29;4507:9;4488:29;:::i;:::-;4478:39;;4568:2;4557:9;4553:18;4540:32;-1:-1:-1;;;;;4632:2:1;4624:6;4621:14;4618:34;;;4648:1;4645;4638:12;4618:34;4671:61;4724:7;4715:6;4704:9;4700:22;4671:61;:::i;:::-;4661:71;;4785:2;4774:9;4770:18;4757:32;4741:48;;4814:2;4804:8;4801:16;4798:36;;;4830:1;4827;4820:12;4798:36;;4853:63;4908:7;4897:8;4886:9;4882:24;4853:63;:::i;:::-;4843:73;;;4253:669;;;;;:::o;4927:347::-;4992:6;5000;5053:2;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5092:29;5111:9;5092:29;:::i;:::-;5082:39;;5171:2;5160:9;5156:18;5143:32;5218:5;5211:13;5204:21;5197:5;5194:32;5184:60;;5240:1;5237;5230:12;5184:60;5263:5;5253:15;;;4927:347;;;;;:::o;5279:254::-;5347:6;5355;5408:2;5396:9;5387:7;5383:23;5379:32;5376:52;;;5424:1;5421;5414:12;5376:52;5447:29;5466:9;5447:29;:::i;:::-;5437:39;5523:2;5508:18;;;;5495:32;;-1:-1:-1;;;5279:254:1:o;5538:322::-;5615:6;5623;5631;5684:2;5672:9;5663:7;5659:23;5655:32;5652:52;;;5700:1;5697;5690:12;5652:52;5723:29;5742:9;5723:29;:::i;:::-;5713:39;5799:2;5784:18;;5771:32;;-1:-1:-1;5850:2:1;5835:18;;;5822:32;;5538:322;-1:-1:-1;;;5538:322:1:o;5865:595::-;5983:6;5991;6044:2;6032:9;6023:7;6019:23;6015:32;6012:52;;;6060:1;6057;6050:12;6012:52;6100:9;6087:23;-1:-1:-1;;;;;6170:2:1;6162:6;6159:14;6156:34;;;6186:1;6183;6176:12;6156:34;6209:61;6262:7;6253:6;6242:9;6238:22;6209:61;:::i;:::-;6199:71;;6323:2;6312:9;6308:18;6295:32;6279:48;;6352:2;6342:8;6339:16;6336:36;;;6368:1;6365;6358:12;6336:36;;6391:63;6446:7;6435:8;6424:9;6420:24;6391:63;:::i;:::-;6381:73;;;5865:595;;;;;:::o;6465:821::-;6617:6;6625;6633;6686:2;6674:9;6665:7;6661:23;6657:32;6654:52;;;6702:1;6699;6692:12;6654:52;6742:9;6729:23;-1:-1:-1;;;;;6812:2:1;6804:6;6801:14;6798:34;;;6828:1;6825;6818:12;6798:34;6851:61;6904:7;6895:6;6884:9;6880:22;6851:61;:::i;:::-;6841:71;;6965:2;6954:9;6950:18;6937:32;6921:48;;6994:2;6984:8;6981:16;6978:36;;;7010:1;7007;7000:12;7291:484;7393:6;7401;7409;7462:2;7450:9;7441:7;7437:23;7433:32;7430:52;;;7478:1;7475;7468:12;7430:52;7518:9;7505:23;-1:-1:-1;;;;;7543:6:1;7540:30;7537:50;;;7583:1;7580;7573:12;7537:50;7606:61;7659:7;7650:6;7639:9;7635:22;7606:61;:::i;:::-;7596:71;7714:2;7699:18;;7686:32;;-1:-1:-1;7765:2:1;7750:18;;;7737:32;;7291:484;-1:-1:-1;;;;7291:484:1:o;7780:245::-;7838:6;7891:2;7879:9;7870:7;7866:23;7862:32;7859:52;;;7907:1;7904;7897:12;7859:52;7946:9;7933:23;7965:30;7989:5;7965:30;:::i;8030:249::-;8099:6;8152:2;8140:9;8131:7;8127:23;8123:32;8120:52;;;8168:1;8165;8158:12;8120:52;8200:9;8194:16;8219:30;8243:5;8219:30;:::i;8284:321::-;8353:6;8406:2;8394:9;8385:7;8381:23;8377:32;8374:52;;;8422:1;8419;8412:12;8374:52;8462:9;8449:23;-1:-1:-1;;;;;8487:6:1;8484:30;8481:50;;;8527:1;8524;8517:12;8481:50;8550:49;8591:7;8582:6;8571:9;8567:22;8550:49;:::i;8610:541::-;8698:6;8706;8759:2;8747:9;8738:7;8734:23;8730:32;8727:52;;;8775:1;8772;8765:12;8727:52;8815:9;8802:23;-1:-1:-1;;;;;8885:2:1;8877:6;8874:14;8871:34;;;8901:1;8898;8891:12;8871:34;8924:49;8965:7;8956:6;8945:9;8941:22;8924:49;:::i;:::-;8914:59;;9026:2;9015:9;9011:18;8998:32;8982:48;;9055:2;9045:8;9042:16;9039:36;;;9071:1;9068;9061:12;9039:36;;9094:51;9137:7;9126:8;9115:9;9111:24;9094:51;:::i;9156:180::-;9215:6;9268:2;9256:9;9247:7;9243:23;9239:32;9236:52;;;9284:1;9281;9274:12;9236:52;-1:-1:-1;9307:23:1;;9156:180;-1:-1:-1;9156:180:1:o;9341:389::-;9419:6;9427;9480:2;9468:9;9459:7;9455:23;9451:32;9448:52;;;9496:1;9493;9486:12;9448:52;9532:9;9519:23;9509:33;;9593:2;9582:9;9578:18;9565:32;-1:-1:-1;;;;;9612:6:1;9609:30;9606:50;;;9652:1;9649;9642:12;9606:50;9675:49;9716:7;9707:6;9696:9;9692:22;9675:49;:::i;9735:435::-;9788:3;9826:5;9820:12;9853:6;9848:3;9841:19;9879:4;9908:2;9903:3;9899:12;9892:19;;9945:2;9938:5;9934:14;9966:1;9976:169;9990:6;9987:1;9984:13;9976:169;;;10051:13;;10039:26;;10085:12;;;;10120:15;;;;10012:1;10005:9;9976:169;;;-1:-1:-1;10161:3:1;;9735:435;-1:-1:-1;;;;;9735:435:1:o;10175:257::-;10216:3;10254:5;10248:12;10281:6;10276:3;10269:19;10297:63;10353:6;10346:4;10341:3;10337:14;10330:4;10323:5;10319:16;10297:63;:::i;:::-;10414:2;10393:15;-1:-1:-1;;10389:29:1;10380:39;;;;10421:4;10376:50;;10175:257;-1:-1:-1;;10175:257:1:o;10437:973::-;10522:12;;10487:3;;10577:1;10597:18;;;;10650;;;;10677:61;;10731:4;10723:6;10719:17;10709:27;;10677:61;10757:2;10805;10797:6;10794:14;10774:18;10771:38;10768:161;;;10851:10;10846:3;10842:20;10839:1;10832:31;10886:4;10883:1;10876:15;10914:4;10911:1;10904:15;10768:161;10945:18;10972:104;;;;11090:1;11085:319;;;;10938:466;;10972:104;-1:-1:-1;;11005:24:1;;10993:37;;11050:16;;;;-1:-1:-1;10972:104:1;;11085:319;21832:1;21825:14;;;21869:4;21856:18;;11179:1;11193:165;11207:6;11204:1;11201:13;11193:165;;;11285:14;;11272:11;;;11265:35;11328:16;;;;11222:10;;11193:165;;;11197:3;;11387:6;11382:3;11378:16;11371:23;;10938:466;;;;;;;10437:973;;;;:::o;11415:456::-;11636:3;11664:38;11698:3;11690:6;11664:38;:::i;:::-;11731:6;11725:13;11747:52;11792:6;11788:2;11781:4;11773:6;11769:17;11747:52;:::i;:::-;11815:50;11857:6;11853:2;11849:15;11841:6;11815:50;:::i;:::-;11808:57;11415:456;-1:-1:-1;;;;;;;11415:456:1:o;12084:826::-;-1:-1:-1;;;;;12481:15:1;;;12463:34;;12533:15;;12528:2;12513:18;;12506:43;12443:3;12580:2;12565:18;;12558:31;;;12406:4;;12612:57;;12649:19;;12641:6;12612:57;:::i;:::-;12717:9;12709:6;12705:22;12700:2;12689:9;12685:18;12678:50;12751:44;12788:6;12780;12751:44;:::i;:::-;12737:58;;12844:9;12836:6;12832:22;12826:3;12815:9;12811:19;12804:51;12872:32;12897:6;12889;12872:32;:::i;:::-;12864:40;12084:826;-1:-1:-1;;;;;;;;12084:826:1:o;12915:560::-;-1:-1:-1;;;;;13212:15:1;;;13194:34;;13264:15;;13259:2;13244:18;;13237:43;13311:2;13296:18;;13289:34;;;13354:2;13339:18;;13332:34;;;13174:3;13397;13382:19;;13375:32;;;13137:4;;13424:45;;13449:19;;13441:6;13424:45;:::i;13480:261::-;13659:2;13648:9;13641:21;13622:4;13679:56;13731:2;13720:9;13716:18;13708:6;13679:56;:::i;13746:465::-;14003:2;13992:9;13985:21;13966:4;14029:56;14081:2;14070:9;14066:18;14058:6;14029:56;:::i;:::-;14133:9;14125:6;14121:22;14116:2;14105:9;14101:18;14094:50;14161:44;14198:6;14190;14161:44;:::i;:::-;14153:52;13746:465;-1:-1:-1;;;;;13746:465:1:o;14408:219::-;14557:2;14546:9;14539:21;14520:4;14577:44;14617:2;14606:9;14602:18;14594:6;14577:44;:::i;15053:404::-;15255:2;15237:21;;;15294:2;15274:18;;;15267:30;15333:34;15328:2;15313:18;;15306:62;-1:-1:-1;;;15399:2:1;15384:18;;15377:38;15447:3;15432:19;;15053:404::o;16689:400::-;16891:2;16873:21;;;16930:2;16910:18;;;16903:30;16969:34;16964:2;16949:18;;16942:62;-1:-1:-1;;;17035:2:1;17020:18;;17013:34;17079:3;17064:19;;16689:400::o;17094:405::-;17296:2;17278:21;;;17335:2;17315:18;;;17308:30;17374:34;17369:2;17354:18;;17347:62;-1:-1:-1;;;17440:2:1;17425:18;;17418:39;17489:3;17474:19;;17094:405::o;17504:401::-;17706:2;17688:21;;;17745:2;17725:18;;;17718:30;17784:34;17779:2;17764:18;;17757:62;-1:-1:-1;;;17850:2:1;17835:18;;17828:35;17895:3;17880:19;;17504:401::o;18329:399::-;18531:2;18513:21;;;18570:2;18550:18;;;18543:30;18609:34;18604:2;18589:18;;18582:62;-1:-1:-1;;;18675:2:1;18660:18;;18653:33;18718:3;18703:19;;18329:399::o;18733:406::-;18935:2;18917:21;;;18974:2;18954:18;;;18947:30;19013:34;19008:2;18993:18;;18986:62;-1:-1:-1;;;19079:2:1;19064:18;;19057:40;19129:3;19114:19;;18733:406::o;19144:356::-;19346:2;19328:21;;;19365:18;;;19358:30;19424:34;19419:2;19404:18;;19397:62;19491:2;19476:18;;19144:356::o;20325:404::-;20527:2;20509:21;;;20566:2;20546:18;;;20539:30;20605:34;20600:2;20585:18;;20578:62;-1:-1:-1;;;20671:2:1;20656:18;;20649:38;20719:3;20704:19;;20325:404::o;20734:397::-;20936:2;20918:21;;;20975:2;20955:18;;;20948:30;21014:34;21009:2;20994:18;;20987:62;-1:-1:-1;;;21080:2:1;21065:18;;21058:31;21121:3;21106:19;;20734:397::o;21571:183::-;21631:4;-1:-1:-1;;;;;21656:6:1;21653:30;21650:56;;;21686:18;;:::i;:::-;-1:-1:-1;21731:1:1;21727:14;21743:4;21723:25;;21571:183::o;21885:128::-;21925:3;21956:1;21952:6;21949:1;21946:13;21943:39;;;21962:18;;:::i;:::-;-1:-1:-1;21998:9:1;;21885:128::o;22018:120::-;22058:1;22084;22074:35;;22089:18;;:::i;:::-;-1:-1:-1;22123:9:1;;22018:120::o;22143:258::-;22215:1;22225:113;22239:6;22236:1;22233:13;22225:113;;;22315:11;;;22309:18;22296:11;;;22289:39;22261:2;22254:10;22225:113;;;22356:6;22353:1;22350:13;22347:48;;;-1:-1:-1;;22391:1:1;22373:16;;22366:27;22143:258::o;22406:136::-;22445:3;22473:5;22463:39;;22482:18;;:::i;:::-;-1:-1:-1;;;22518:18:1;;22406:136::o;22547:380::-;22626:1;22622:12;;;;22669;;;22690:61;;22744:4;22736:6;22732:17;22722:27;;22690:61;22797:2;22789:6;22786:14;22766:18;22763:38;22760:161;;;22843:10;22838:3;22834:20;22831:1;22824:31;22878:4;22875:1;22868:15;22906:4;22903:1;22896:15;22760:161;;22547:380;;;:::o;22932:249::-;23042:2;23023:13;;-1:-1:-1;;23019:27:1;23007:40;;-1:-1:-1;;;;;23062:34:1;;23098:22;;;23059:62;23056:88;;;23124:18;;:::i;:::-;23160:2;23153:22;-1:-1:-1;;22932:249:1:o;23186:135::-;23225:3;-1:-1:-1;;23246:17:1;;23243:43;;;23266:18;;:::i;:::-;-1:-1:-1;23313:1:1;23302:13;;23186:135::o;23326:112::-;23358:1;23384;23374:35;;23389:18;;:::i;:::-;-1:-1:-1;23423:9:1;;23326:112::o;23443:127::-;23504:10;23499:3;23495:20;23492:1;23485:31;23535:4;23532:1;23525:15;23559:4;23556:1;23549:15;23575:127;23636:10;23631:3;23627:20;23624:1;23617:31;23667:4;23664:1;23657:15;23691:4;23688:1;23681:15;23707:127;23768:10;23763:3;23759:20;23756:1;23749:31;23799:4;23796:1;23789:15;23823:4;23820:1;23813:15;23839:127;23900:10;23895:3;23891:20;23888:1;23881:31;23931:4;23928:1;23921:15;23955:4;23952:1;23945:15;23971:179;24006:3;24048:1;24030:16;24027:23;24024:120;;;24094:1;24091;24088;24073:23;-1:-1:-1;24131:1:1;24125:8;24120:3;24116:18;24024:120;23971:179;:::o;24155:671::-;24194:3;24236:4;24218:16;24215:26;24212:39;;;24155:671;:::o;24212:39::-;24278:2;24272:9;-1:-1:-1;;24343:16:1;24339:25;;24336:1;24272:9;24315:50;24394:4;24388:11;24418:16;-1:-1:-1;;;;;24524:2:1;24517:4;24509:6;24505:17;24502:25;24497:2;24489:6;24486:14;24483:45;24480:58;;;24531:5;;;;;24155:671;:::o;24480:58::-;24568:6;24562:4;24558:17;24547:28;;24604:3;24598:10;24631:2;24623:6;24620:14;24617:27;;;24637:5;;;;;;24155:671;:::o;24617:27::-;24721:2;24702:16;24696:4;24692:27;24688:36;24681:4;24672:6;24667:3;24663:16;24659:27;24656:69;24653:82;;;24728:5;;;;;;24155:671;:::o;24653:82::-;24744:57;24795:4;24786:6;24778;24774:19;24770:30;24764:4;24744:57;:::i;:::-;-1:-1:-1;24817:3:1;;24155:671;-1:-1:-1;;;;;24155:671:1:o;24831:131::-;-1:-1:-1;;;;;;24905:32:1;;24895:43;;24885:71;;24952:1;24949;24942:12
Swarm Source
ipfs://ddae43c6384fd87ac9ea0dd2e5c14567e70bf1fb583669004fa6767bc53f6d8e
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.