Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x160f3304aafbd85b6ee670533bbceb3da0e2e3ee62414397bf7adc6c5fe08143 | 0x60806040 | 25716622 | 334 days 9 hrs ago | 0x91f50167f0cab5a289171bb08d009a65de0c1019 | IN | Create: OmletBuffNft_v2 | 0 MATIC | 0.129707595067 |
[ Download CSV Export ]
Contract Name:
OmletBuffNft_v2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-08 */ // File: contracts/buff/v2/INftTemplate.sol pragma solidity ^0.8.7; interface INftTemplate { /* * admin can be treated as operator, */ function initialize( string calldata name_, string calldata symbol_, string calldata baseUri_, address initOwner_, address om_auth_ ) external; } // File: contracts/omlet_auth/IOmletNftAuth.sol pragma solidity ^0.8.7; interface IOmletNftAuth { /* * admin can be treated as operator, */ function isTrusted(address account) external view returns (bool); } // File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @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 Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() initializer {} * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the // contract may have been reentered. require(_initializing ? _isConstructor() : !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} modifier, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.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 ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.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 IERC165Upgradeable { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.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 ERC165Upgradeable is Initializable, IERC165Upgradeable { function __ERC165_init() internal onlyInitializing { } function __ERC165_init_unchained() internal onlyInitializing { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165Upgradeable).interfaceId; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155ReceiverUpgradeable is IERC165Upgradeable { /** * @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: @openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.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 IERC1155Upgradeable is IERC165Upgradeable { /** * @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: @openzeppelin/contracts-upgradeable/token/ERC1155/extensions/IERC1155MetadataURIUpgradeable.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 IERC1155MetadataURIUpgradeable is IERC1155Upgradeable { /** * @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: @openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.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 ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable { using AddressUpgradeable 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}. */ function __ERC1155_init(string memory uri_) internal onlyInitializing { __ERC1155_init_unchained(uri_); } function __ERC1155_init_unchained(string memory uri_) internal onlyInitializing { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165Upgradeable) returns (bool) { return interfaceId == type(IERC1155Upgradeable).interfaceId || interfaceId == type(IERC1155MetadataURIUpgradeable).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 IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155ReceiverUpgradeable.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 IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155ReceiverUpgradeable.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; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[47] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155SupplyUpgradeable is Initializable, ERC1155Upgradeable { function __ERC1155Supply_init() internal onlyInitializing { } function __ERC1155Supply_init_unchained() internal onlyInitializing { } mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155SupplyUpgradeable.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } // File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol // OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/buff/v2/OmletBuffNft_v2.sol pragma solidity ^0.8.7; contract OmletBuffNft_v2 is ERC1155SupplyUpgradeable, INftTemplate { using EnumerableSet for EnumerableSet.UintSet; using EnumerableSet for EnumerableSet.AddressSet; string constant E_INVALID_OPERATOR = "OM_ERROR_NFT,INVALID_OPERATOR"; string constant E_INVALID_AUTH = "OM_ERROR_NFT,INVALID_AUTH"; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event OM_MINT( address indexed operator, address indexed owner, uint256 tokenId, uint256 amount ); event OM_TRANSFER( address indexed operator, address indexed from, address indexed to, uint256 tokenId, uint256 amount ); address private _om_auth; address _owner; address _creator; //the init owner string public name; string public symbol; /* minted tokenId */ EnumerableSet.UintSet private _tokenIds; EnumerableSet.AddressSet private _holders; //not include creator /*base URI*/ string public baseUri; string uriPadding; bool uriUseIdOnly; mapping(uint256 => string) private _permanentTokenUri; /*standard interface*/ function initialize( string calldata name_, string calldata symbol_, string calldata baseUri_, address initOwner_, address om_auth_ ) external override { if (isContract(om_auth_) == false) { revert(E_INVALID_AUTH); } if (IOmletNftAuth(om_auth_).isTrusted(tx.origin) == false) { revert(E_INVALID_AUTH); } __OmletBuffNft_v2__init(name_, symbol_, baseUri_, initOwner_, om_auth_); } function __OmletBuffNft_v2__init( string memory name_, string memory symbol_, string memory baseUri_, address initOwner_, address om_auth_ ) internal initializer { __ERC1155_init(baseUri_); _om_auth = om_auth_; _owner = initOwner_; name = name_; symbol = symbol_; baseUri = baseUri_; _creator = initOwner_; uriPadding = ""; } function owner() public view returns (address) { return _owner; } function version() public pure returns (string memory) { return "OmletBuffNft_v2"; } //for holder function burn( address account, uint256 id, uint256 value ) public virtual { //check authorization require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } //for holder function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { //check authorization require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } /*public omlet method*/ function om_mint(uint256 tokenId, uint256 amount) external onlyTrusted { _internal_om_mint(tokenId, amount); } function om_mintBatch(uint256[] memory tokenIds, uint256[] memory amounts) external onlyTrusted { _internal_om_mintBatch(_creator, tokenIds, amounts); } function om_transfer( address to, uint256 tokenId, uint256 amount, bytes memory data ) external onlyTrusted { _internal_om_transfer(_creator, to, tokenId, amount, data); } function om_transferFrom( address from, address to, uint256 tokenId, uint256 amount, bytes memory data ) external onlyTrusted { _internal_om_transfer(from, to, tokenId, amount, data); } /* for convert */ function om_batchBatchAndConvert( address account, uint256[] memory fromIds, uint256[] memory fromValues, uint256[] memory toIds, uint256[] memory toValues ) external onlyTrusted { //check amount first for (uint256 i = 0; i < fromIds.length; i++) { uint256 id = fromIds[i]; uint256 amount = fromValues[i]; uint256 fromBalance = balanceOf(account, id); require( fromBalance >= amount, "ERC1155: burn amount exceeds balance" ); } _burnBatch(account, fromIds, fromValues); _internal_om_mintBatch(account, toIds, toValues); } function om_setBaseUri( bool useIdOnly, string memory base, string memory padding ) external onlyTrusted { uriUseIdOnly = useIdOnly; uriPadding = padding; baseUri = base; } function setPermTokenUri(uint256 tokenId, string memory uri_) external onlyTrusted { bytes memory emptyStringTest = bytes(uri_); if (emptyStringTest.length == 0) { delete _permanentTokenUri[tokenId]; } else { _permanentTokenUri[tokenId] = uri_; } emit URI(uri_, tokenId); } function holders() public view returns (address[] memory) { return _holders.values(); } function getTokenIds() public view returns (uint256[] memory) { return _tokenIds.values(); } function setName(string memory name_) external onlyOwnerOrTrusted { name = name_; } function setSymbol(string memory symbol_) external onlyOwnerOrTrusted { symbol = symbol_; } /*public method*/ function uri(uint256 tokenId) public view override(ERC1155Upgradeable) returns (string memory) { if (_existTokenId(tokenId)) { string memory _pURI = _permanentTokenUri[tokenId]; if (bytes(_pURI).length > 0) { return _pURI; } if (uriUseIdOnly) { string memory s = string( abi.encodePacked( baseUri, Strings.toString(tokenId), uriPadding ) ); return s; } else { string memory s = string( abi.encodePacked( baseUri, Strings.toString(getChainID()), "/", Strings.toHexString(uint256(uint160(address(this)))), "/", Strings.toString(tokenId), uriPadding ) ); return s; } } return ""; } /*internal method*/ function _internal_om_mint(uint256 tokenId, uint256 amount) internal { /*mint to _creator*/ _tokenIds.add(tokenId); // _mint(_creator, tokenId, amount, ""); emit OM_MINT(_msgSender(), _creator, tokenId, amount); } function _internal_om_mintBatch( address account, uint256[] memory tokenIds, uint256[] memory amounts ) internal { _mintBatch(account, tokenIds, amounts, ""); for (uint256 i = 0; i < tokenIds.length; i++) { _tokenIds.add(tokenIds[i]); emit OM_MINT(_msgSender(), account, tokenIds[i], amounts[i]); } } function _internal_om_transfer( address from, address to, uint256 tokenId, uint256 amount, bytes memory data ) internal checkBeforeTransfer(from, to, tokenId, amount) { _safeTransferFrom(from, to, tokenId, amount, data); emit OM_TRANSFER(_msgSender(), from, to, tokenId, amount); _holders.add(to); } function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal override(ERC1155Upgradeable) { super._safeTransferFrom(from, to, id, amount, data); _holders.add(to); } function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal override(ERC1155Upgradeable) { super._safeBatchTransferFrom(from, to, ids, amounts, data); _holders.add(to); } /* public view functions */ function _existTokenId(uint256 tokenId) public view returns (bool) { return _tokenIds.contains(tokenId); } /******************************************************************** owner part ********************************************************************/ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } /* internal view functions */ function getChainID() internal view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /* pure functions */ function addressToHexString(address addr) public pure returns (string memory) { return Strings.toHexString(uint256(uint160(addr))); } function isContract(address account) internal view returns (bool) { if (account != address(0)) { return account.code.length > 0; } return false; } /******************************************************************************************************* * * modifiers * *******************************************************************************************************/ function _isTrusted() internal view returns (bool) { if (_om_auth != address(0)) { return IOmletNftAuth(_om_auth).isTrusted(_msgSender()); } return false; } modifier onlyOwnerOrTrusted() { if (_isTrusted() || (owner() == _msgSender())) { _; } } modifier onlyTrusted() { if (_isTrusted() == false) { revert(E_INVALID_OPERATOR); } _; } modifier checkBeforeTransfer( address from, address to, uint256 tokenId, uint256 amount ) { _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OM_MINT","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":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OM_TRANSFER","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":"uint256","name":"tokenId","type":"uint256"}],"name":"_existTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addressToHexString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseUri_","type":"string"},{"internalType":"address","name":"initOwner_","type":"address"},{"internalType":"address","name":"om_auth_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"fromIds","type":"uint256[]"},{"internalType":"uint256[]","name":"fromValues","type":"uint256[]"},{"internalType":"uint256[]","name":"toIds","type":"uint256[]"},{"internalType":"uint256[]","name":"toValues","type":"uint256[]"}],"name":"om_batchBatchAndConvert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"om_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"om_mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"useIdOnly","type":"bool"},{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"padding","type":"string"}],"name":"om_setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"om_transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"om_transferFrom","outputs":[],"stateMutability":"nonpayable","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":"string","name":"name_","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"setPermTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol_","type":"string"}],"name":"setSymbol","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":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613c66806100206000396000f3fe608060405234801561001057600080fd5b506004361061020a5760003560e01c806395d89b411161012a578063d5fedf22116100bd578063ea050d0d1161008c578063f2fde38b11610071578063f2fde38b146104c6578063f5298aca146104d9578063f60189d7146104ec57600080fd5b8063ea050d0d146104a0578063f242432a146104b357600080fd5b8063d5fedf221461042b578063d6d0faee1461043e578063d873d63714610451578063e985e9c51461046457600080fd5b8063b84c8246116100f9578063b84c8246146103d2578063bd85b039146103e5578063c47f002714610405578063cc44f1791461041857600080fd5b806395d89b411461039c57806396fc4b51146103a45780639abc8320146103b7578063a22cb465146103bf57600080fd5b80634f558e79116101a2578063715018a611610171578063715018a6146103515780638188f71c146103595780638a1e5f901461036e5780638da5cb5b1461038157600080fd5b80634f558e79146102db57806354fd4d50146102fd57806367f718a9146103365780636b20c4541461033e57600080fd5b8063125feb4d116101de578063125feb4d146102805780632eb2c2d614610295578063310c5aa8146102a85780634e1273f4146102bb57600080fd5b8062fdd58e1461020f57806301ffc9a71461023557806306fdde03146102585780630e89341c1461026d575b600080fd5b61022261021d3660046132ad565b6104ff565b6040519081526020015b60405180910390f35b610248610243366004613512565b6105ad565b604051901515815260200161022c565b610260610648565b60405161022c919061399b565b61026061027b36600461363c565b6106d6565b61029361028e3660046134a6565b61081c565b005b6102936102a3366004613042565b6108ae565b6102486102b636600461363c565b610950565b6102ce6102c936600461336b565b61095d565b60405161022c919061395a565b6102486102e936600461363c565b600090815260976020526040902054151590565b60408051808201909152600f81527f4f6d6c6574427566664e66745f763200000000000000000000000000000000006020820152610260565b6102ce610a9b565b61029361034c366004613151565b610aac565b610293610b36565b610361610be7565b60405161022c919061390d565b61029361037c3660046130ec565b610bf3565b60ca546040516001600160a01b03909116815260200161022c565b610260610c57565b6102936103b236600461343c565b610c64565b610260610cd6565b6102936103cd366004613276565b610ce3565b6102936103e0366004613607565b610cee565b6102226103f336600461363c565b60009081526097602052604090205490565b610293610413366004613607565b610d26565b6102936104263660046131c5565b610d5b565b610260610439366004612ff4565b610e91565b61029361044c36600461354c565b610ea5565b61029361045f366004613655565b611091565b61024861047236600461300f565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205460ff1690565b6102936104ae36600461330a565b61116a565b6102936104c13660046130ec565b6111da565b6102936104d4366004612ff4565b611261565b6102936104e73660046132d7565b61137a565b6102936104fa366004613692565b6113ff565b60006001600160a01b0383166105825760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060008181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061061057506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806105a757507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146105a7565b60cc805461065590613a77565b80601f016020809104026020016040519081016040528092919081815260200182805461068190613a77565b80156106ce5780601f106106a3576101008083540402835291602001916106ce565b820191906000526020600020905b8154815290600101906020018083116106b157829003601f168201915b505050505081565b60606106e182610950565b1561080857600082815260d56020526040812080546106ff90613a77565b80601f016020809104026020016040519081016040528092919081815260200182805461072b90613a77565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b5050505050905060008151111561078f5792915050565b60d45460ff16156107d357600060d26107a785611460565b60d36040516020016107bb939291906137b5565b60408051601f19818403018152919052949350505050565b600060d26107e046611460565b6107e930611566565b6107f287611460565b60d36040516020016107bb9594939291906137e8565b505060408051602081019091526000815290565b6108246115d3565b61087357604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b60d4805460ff191684151517905580516108949060d3906020840190612dd5565b5081516108a89060d2906020850190612dd5565b50505050565b6001600160a01b0385163314806108ca57506108ca8533610472565b61093c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610579565b6109498585858585611676565b5050505050565b60006105a760ce83611696565b606081518351146109d65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610579565b6000835167ffffffffffffffff8111156109f2576109f2613b50565b604051908082528060200260200182016040528015610a1b578160200160208202803683370190505b50905060005b8451811015610a9357610a66858281518110610a3f57610a3f613b3a565b6020026020010151858381518110610a5957610a59613b3a565b60200260200101516104ff565b828281518110610a7857610a78613b3a565b6020908102919091010152610a8c81613adf565b9050610a21565b509392505050565b6060610aa760ce6116b1565b905090565b6001600160a01b038316331480610ac85750610ac88333610472565b610b265760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610579565b610b318383836116be565b505050565b60ca546001600160a01b03163314610b905760405162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e6572000000000000000000006044820152606401610579565b60ca546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360ca805473ffffffffffffffffffffffffffffffffffffffff19169055565b6060610aa760d06116b1565b610bfb6115d3565b610c4a57604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b6109498585858585611908565b60cd805461065590613a77565b610c6c6115d3565b610cbb57604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b60cb54610cd2906001600160a01b03168383611996565b5050565b60d2805461065590613a77565b610cd2338383611a85565b610cf66115d3565b80610d0b575060ca546001600160a01b031633145b15610d23578051610cd29060cd906020840190612dd5565b50565b610d2e6115d3565b80610d43575060ca546001600160a01b031633145b15610d23578051610cd29060cc906020840190612dd5565b610d636115d3565b610db257604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b60005b8451811015610e7a576000858281518110610dd257610dd2613b3a565b602002602001015190506000858381518110610df057610df0613b3a565b602002602001015190506000610e0689846104ff565b905081811015610e645760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610579565b5050508080610e7290613adf565b915050610db5565b50610e868585856116be565b610949858383611996565b60606105a7826001600160a01b0316611566565b610eae81611b7a565b610efd57604080518082018252601981527f4f4d5f4552524f525f4e46542c494e56414c49445f41555448000000000000006020820152905162461bcd60e51b8152610579919060040161399b565b6040517f96d648790000000000000000000000000000000000000000000000000000000081523260048201526001600160a01b038216906396d648799060240160206040518083038186803b158015610f5557600080fd5b505afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190613489565b610fdc57604080518082018252601981527f4f4d5f4552524f525f4e46542c494e56414c49445f41555448000000000000006020820152905162461bcd60e51b8152610579919060040161399b565b61108788888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250879150611ba39050565b5050505050505050565b6110996115d3565b6110e857604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b8051819061110c57600083815260d56020526040812061110791612e59565b61112d565b600083815260d560209081526040909120835161112b92850190612dd5565b505b827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8360405161115d919061399b565b60405180910390a2505050565b6111726115d3565b6111c157604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b60cb546108a8906001600160a01b031685858585611908565b6001600160a01b0385163314806111f657506111f68533610472565b6112545760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610579565b6109498585858585611d38565b60ca546001600160a01b031633146112bb5760405162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e6572000000000000000000006044820152606401610579565b6001600160a01b0381166113115760405162461bcd60e51b815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152606401610579565b60ca546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831633148061139657506113968333610472565b6113f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610579565b610b31838383611d45565b6114076115d3565b61145657604080518082018252601d81527f4f4d5f4552524f525f4e46542c494e56414c49445f4f50455241544f520000006020820152905162461bcd60e51b8152610579919060040161399b565b610cd28282611ec2565b6060816114845750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114ae578061149881613adf565b91506114a79050600a836139ea565b9150611488565b60008167ffffffffffffffff8111156114c9576114c9613b50565b6040519080825280601f01601f1916602001820160405280156114f3576020820181803683370190505b5090505b841561155e57611508600183613a1d565b9150611515600a86613afa565b6115209060306139d2565b60f81b81838151811061153557611535613b3a565b60200101906001600160f81b031916908160001a905350611557600a866139ea565b94506114f7565b949350505050565b6060816115a657505060408051808201909152600481527f3078303000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156115c957806115ba81613adf565b915050600882901c91506115aa565b61155e8482611f45565b60c9546000906001600160a01b0316156116705760c9546001600160a01b03166396d64879336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561163857600080fd5b505afa15801561164c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190613489565b50600090565b611683858585858561210a565b61168e60d085612371565b505050505050565b600081815260018301602052604081205415155b9392505050565b606060006116aa83612386565b6001600160a01b0383166117205760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610579565b80518251146117825760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610579565b60003390506117a5818560008686604051806020016040528060008152506123e2565b60005b83518110156118a95760008482815181106117c5576117c5613b3a565b6020026020010151905060008483815181106117e3576117e3613b3a565b60209081029190910181015160008481526065835260408082206001600160a01b038c1683529093529190912054909150818110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610579565b60009283526065602090815260408085206001600160a01b038b16865290915290922091039055806118a181613adf565b9150506117a8565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118fa92919061396d565b60405180910390a450505050565b848484846119198989898989611d38565b876001600160a01b0316896001600160a01b03166119343390565b6001600160a01b03167f7d6ed04a0ec9fd05c032c348ce9399148d9c6b254d2256f730464c3f454a89338a8a604051611977929190918252602082015260400190565b60405180910390a461198a60d089612371565b50505050505050505050565b6119b1838383604051806020016040528060008152506124f7565b60005b82518110156108a8576119ea8382815181106119d2576119d2613b3a565b602002602001015160ce6126cd90919063ffffffff16565b506001600160a01b038416336001600160a01b03167f8c470abf1bdee377961ae1fef5b3f17b817128e85c4992e2292cb87021ee7a5d858481518110611a3257611a32613b3a565b6020026020010151858581518110611a4c57611a4c613b3a565b6020026020010151604051611a6b929190918252602082015260400190565b60405180910390a380611a7d81613adf565b9150506119b4565b816001600160a01b0316836001600160a01b03161415611b0d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610579565b6001600160a01b03838116600081815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006001600160a01b03821615611b9b57506001600160a01b03163b151590565b506000919050565b600054610100900460ff16611bbe5760005460ff1615611bc2565b303b155b611c345760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610579565b600054610100900460ff16158015611c56576000805461ffff19166101011790555b611c5f846126d9565b60c980546001600160a01b0380851673ffffffffffffffffffffffffffffffffffffffff199283161790925560ca8054928616929091169190911790558551611caf9060cc906020890190612dd5565b508451611cc39060cd906020880190612dd5565b508351611cd79060d2906020870190612dd5565b5060cb805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038516179055604080516020810191829052600090819052611d1e9160d391612dd5565b50801561168e576000805461ff0019169055505050505050565b611683858585858561274d565b6001600160a01b038316611da75760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610579565b33611dd681856000611db8876128f5565b611dc1876128f5565b604051806020016040528060008152506123e2565b60008381526065602090815260408083206001600160a01b038816845290915290205482811015611e555760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610579565b60008481526065602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b611ecd60ce836126cd565b5060cb54604080516020810190915260008152611ef7916001600160a01b03169084908490612940565b60cb5460408051848152602081018490526001600160a01b039092169133917f8c470abf1bdee377961ae1fef5b3f17b817128e85c4992e2292cb87021ee7a5d910160405180910390a35050565b60606000611f548360026139fe565b611f5f9060026139d2565b67ffffffffffffffff811115611f7757611f77613b50565b6040519080825280601f01601f191660200182016040528015611fa1576020820181803683370190505b509050600360fc1b81600081518110611fbc57611fbc613b3a565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061200757612007613b3a565b60200101906001600160f81b031916908160001a905350600061202b8460026139fe565b6120369060016139d2565b90505b60018111156120bb577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061207757612077613b3a565b1a60f81b82828151811061208d5761208d613b3a565b60200101906001600160f81b031916908160001a90535060049490941c936120b481613a60565b9050612039565b5083156116aa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610579565b815183511461216c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610579565b6001600160a01b0384166121d05760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610579565b336121df8187878787876123e2565b60005b845181101561230b5760008582815181106121ff576121ff613b3a565b60200260200101519050600085838151811061221d5761221d613b3a565b60209081029190910181015160008481526065835260408082206001600160a01b038e1683529093529190912054909150818110156122b15760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610579565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906122f09084906139d2565b925050819055505050508061230490613adf565b90506121e2565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161235b92919061396d565b60405180910390a461168e818787878787612a43565b60006116aa836001600160a01b038416612bf8565b6060816000018054806020026020016040519081016040528092919081815260200182805480156123d657602002820191906000526020600020905b8154815260200190600101908083116123c2575b50505050509050919050565b6001600160a01b0385166124695760005b83518110156124675782818151811061240e5761240e613b3a565b60200260200101516097600086848151811061242c5761242c613b3a565b60200260200101518152602001908152602001600020600082825461245191906139d2565b90915550612460905081613adf565b90506123f3565b505b6001600160a01b03841661168e5760005b83518110156124ee5782818151811061249557612495613b3a565b6020026020010151609760008684815181106124b3576124b3613b3a565b6020026020010151815260200190815260200160002060008282546124d89190613a1d565b909155506124e7905081613adf565b905061247a565b50505050505050565b6001600160a01b0384166125575760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610579565b81518351146125b95760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610579565b336125c9816000878787876123e2565b60005b8451811015612665578381815181106125e7576125e7613b3a565b60200260200101516065600087848151811061260557612605613b3a565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461264d91906139d2565b9091555081905061265d81613adf565b9150506125cc565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126b692919061396d565b60405180910390a461094981600087878787612a43565b60006116aa8383612bf8565b600054610100900460ff166127445760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610579565b610d2381612c47565b6001600160a01b0384166127b15760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610579565b336127d08187876127c1886128f5565b6127ca886128f5565b876123e2565b60008481526065602090815260408083206001600160a01b038a168452909152902054838110156128565760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610579565b60008581526065602090815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906128959084906139d2565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46124ee828888888888612cbb565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061292f5761292f613b3a565b602090810291909101015292915050565b6001600160a01b0384166129a05760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610579565b336129b1816000876127c1886128f5565b60008481526065602090815260408083206001600160a01b0389168452909152812080548592906129e39084906139d2565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461094981600087878787612cbb565b6001600160a01b0384163b1561168e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612a879089908990889088908890600401613877565b602060405180830381600087803b158015612aa157600080fd5b505af1925050508015612ad1575060408051601f3d908101601f19168201909252612ace9181019061352f565b60015b612b8757612add613b66565b806308c379a01415612b175750612af2613b82565b80612afd5750612b19565b8060405162461bcd60e51b8152600401610579919061399b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610579565b6001600160e01b0319811663bc197c8160e01b146124ee5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610579565b6000818152600183016020526040812054612c3f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105a7565b5060006105a7565b600054610100900460ff16612cb25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610579565b610d2381612dc6565b6001600160a01b0384163b1561168e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612cff90899089908890889088906004016138d5565b602060405180830381600087803b158015612d1957600080fd5b505af1925050508015612d49575060408051601f3d908101601f19168201909252612d469181019061352f565b60015b612d5557612add613b66565b6001600160e01b0319811663f23a6e6160e01b146124ee5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610579565b8051610cd29060679060208401905b828054612de190613a77565b90600052602060002090601f016020900481019282612e035760008555612e49565b82601f10612e1c57805160ff1916838001178555612e49565b82800160010185558215612e49579182015b82811115612e49578251825591602001919060010190612e2e565b50612e55929150612e8f565b5090565b508054612e6590613a77565b6000825580601f10612e75575050565b601f016020900490600052602060002090810190610d2391905b5b80821115612e555760008155600101612e90565b80356001600160a01b0381168114612ebb57600080fd5b919050565b600082601f830112612ed157600080fd5b81356020612ede826139ae565b604051612eeb8282613ab2565b8381528281019150858301600585901b87018401881015612f0b57600080fd5b60005b85811015612f2a57813584529284019290840190600101612f0e565b5090979650505050505050565b600082601f830112612f4857600080fd5b813567ffffffffffffffff811115612f6257612f62613b50565b604051612f79601f8301601f191660200182613ab2565b818152846020838601011115612f8e57600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612fbd57600080fd5b50813567ffffffffffffffff811115612fd557600080fd5b602083019150836020828501011115612fed57600080fd5b9250929050565b60006020828403121561300657600080fd5b6116aa82612ea4565b6000806040838503121561302257600080fd5b61302b83612ea4565b915061303960208401612ea4565b90509250929050565b600080600080600060a0868803121561305a57600080fd5b61306386612ea4565b945061307160208701612ea4565b9350604086013567ffffffffffffffff8082111561308e57600080fd5b61309a89838a01612ec0565b945060608801359150808211156130b057600080fd5b6130bc89838a01612ec0565b935060808801359150808211156130d257600080fd5b506130df88828901612f37565b9150509295509295909350565b600080600080600060a0868803121561310457600080fd5b61310d86612ea4565b945061311b60208701612ea4565b93506040860135925060608601359150608086013567ffffffffffffffff81111561314557600080fd5b6130df88828901612f37565b60008060006060848603121561316657600080fd5b61316f84612ea4565b9250602084013567ffffffffffffffff8082111561318c57600080fd5b61319887838801612ec0565b935060408601359150808211156131ae57600080fd5b506131bb86828701612ec0565b9150509250925092565b600080600080600060a086880312156131dd57600080fd5b6131e686612ea4565b9450602086013567ffffffffffffffff8082111561320357600080fd5b61320f89838a01612ec0565b9550604088013591508082111561322557600080fd5b61323189838a01612ec0565b9450606088013591508082111561324757600080fd5b61325389838a01612ec0565b9350608088013591508082111561326957600080fd5b506130df88828901612ec0565b6000806040838503121561328957600080fd5b61329283612ea4565b915060208301356132a281613c0c565b809150509250929050565b600080604083850312156132c057600080fd5b6132c983612ea4565b946020939093013593505050565b6000806000606084860312156132ec57600080fd5b6132f584612ea4565b95602085013595506040909401359392505050565b6000806000806080858703121561332057600080fd5b61332985612ea4565b93506020850135925060408501359150606085013567ffffffffffffffff81111561335357600080fd5b61335f87828801612f37565b91505092959194509250565b6000806040838503121561337e57600080fd5b823567ffffffffffffffff8082111561339657600080fd5b818501915085601f8301126133aa57600080fd5b813560206133b7826139ae565b6040516133c48282613ab2565b8381528281019150858301600585901b870184018b10156133e457600080fd5b600096505b8487101561340e576133fa81612ea4565b8352600196909601959183019183016133e9565b509650508601359250508082111561342557600080fd5b5061343285828601612ec0565b9150509250929050565b6000806040838503121561344f57600080fd5b823567ffffffffffffffff8082111561346757600080fd5b61347386838701612ec0565b9350602085013591508082111561342557600080fd5b60006020828403121561349b57600080fd5b81516116aa81613c0c565b6000806000606084860312156134bb57600080fd5b83356134c681613c0c565b9250602084013567ffffffffffffffff808211156134e357600080fd5b6134ef87838801612f37565b9350604086013591508082111561350557600080fd5b506131bb86828701612f37565b60006020828403121561352457600080fd5b81356116aa81613c1a565b60006020828403121561354157600080fd5b81516116aa81613c1a565b60008060008060008060008060a0898b03121561356857600080fd5b883567ffffffffffffffff8082111561358057600080fd5b61358c8c838d01612fab565b909a50985060208b01359150808211156135a557600080fd5b6135b18c838d01612fab565b909850965060408b01359150808211156135ca57600080fd5b506135d78b828c01612fab565b90955093506135ea905060608a01612ea4565b91506135f860808a01612ea4565b90509295985092959890939650565b60006020828403121561361957600080fd5b813567ffffffffffffffff81111561363057600080fd5b61155e84828501612f37565b60006020828403121561364e57600080fd5b5035919050565b6000806040838503121561366857600080fd5b82359150602083013567ffffffffffffffff81111561368657600080fd5b61343285828601612f37565b600080604083850312156136a557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156136e4578151875295820195908201906001016136c8565b509495945050505050565b60008151808452613707816020860160208601613a34565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061373557607f831692505b602080841082141561375757634e487b7160e01b600052602260045260246000fd5b81801561376b576001811461377c576137a9565b60ff198616895284890196506137a9565b60008881526020902060005b868110156137a15781548b820152908501908301613788565b505084890196505b50505050505092915050565b60006137c1828661371b565b84516137d1818360208901613a34565b6137dd8183018661371b565b979650505050505050565b60006137f4828861371b565b8651613804818360208b01613a34565b7f2f0000000000000000000000000000000000000000000000000000000000000091018181528651909190613840816001850160208b01613a34565b6001920191820152845161385b816002840160208901613a34565b61386a6002828401018661371b565b9998505050505050505050565b60006001600160a01b03808816835280871660208401525060a060408301526138a360a08301866136b4565b82810360608401526138b581866136b4565b905082810360808401526138c981856136ef565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526137dd60a08301846136ef565b6020808252825182820181905260009190848201906040850190845b8181101561394e5783516001600160a01b031683529284019291840191600101613929565b50909695505050505050565b6020815260006116aa60208301846136b4565b60408152600061398060408301856136b4565b828103602084015261399281856136b4565b95945050505050565b6020815260006116aa60208301846136ef565b600067ffffffffffffffff8211156139c8576139c8613b50565b5060051b60200190565b600082198211156139e5576139e5613b0e565b500190565b6000826139f9576139f9613b24565b500490565b6000816000190483118215151615613a1857613a18613b0e565b500290565b600082821015613a2f57613a2f613b0e565b500390565b60005b83811015613a4f578181015183820152602001613a37565b838111156108a85750506000910152565b600081613a6f57613a6f613b0e565b506000190190565b600181811c90821680613a8b57607f821691505b60208210811415613aac57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613ad857613ad8613b50565b6040525050565b6000600019821415613af357613af3613b0e565b5060010190565b600082613b0957613b09613b24565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115613b7f5760046000803e5060005160e01c5b90565b600060443d1015613b905790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613bc057505050505090565b8285019150815181811115613bd85750505050505090565b843d8701016020828501011115613bf25750505050505090565b613c0160208286010187613ab2565b509095945050505050565b8015158114610d2357600080fd5b6001600160e01b031981168114610d2357600080fdfea2646970667358221220002671ad4fd2c9a14aec337b407798d3186b1e61e0eef9fd4b1934fb66be2ea664736f6c63430008070033
Deployed ByteCode Sourcemap
56218:11171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:231;;;;;;:::i;:::-;;:::i;:::-;;;26920:25:1;;;26908:2;26893:18;25261:231:0;;;;;;;;24240:354;;;;;;:::i;:::-;;:::i;:::-;;;19306:14:1;;19299:22;19281:41;;19269:2;19254:18;24240:354:0;19141:187:1;57082:18:0;;;:::i;:::-;;;;;;;:::i;62107:1184::-;;;;;;:::i;:::-;;:::i;61019:236::-;;;;;;:::i;:::-;;:::i;:::-;;27200:442;;;;;;:::i;:::-;;:::i;65050:120::-;;;;;;:::i;:::-;;:::i;25658:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40260:133::-;;;;;;:::i;:::-;40317:4;40138:16;;;:12;:16;;;;;;-1:-1:-1;;;40260:133:0;58527:98;58593:24;;;;;;;;;;;;;;;;;58527:98;;61752:106;;;:::i;59027:382::-;;;;;;:::i;:::-;;:::i;65463:148::-;;;:::i;61643:101::-;;;:::i;:::-;;;;;;;:::i;60009:249::-;;;;;;:::i;:::-;;:::i;58440:79::-;58505:6;;58440:79;;-1:-1:-1;;;;;58505:6:0;;;16192:74:1;;16180:2;16165:18;58440:79:0;16046:226:1;57107:20:0;;;:::i;59578:189::-;;;;;;:::i;:::-;;:::i;57296:21::-;;;:::i;26255:155::-;;;;;;:::i;:::-;;:::i;61971:105::-;;;;;;:::i;:::-;;:::i;40049:113::-;;;;;;:::i;:::-;40111:7;40138:16;;;:12;:16;;;;;;;40049:113;61866:97;;;;;;:::i;:::-;;:::i;60289:722::-;;;;;;:::i;:::-;;:::i;66110:179::-;;;;;;:::i;:::-;;:::i;57464:506::-;;;;;;:::i;:::-;;:::i;61263:372::-;;;;;;:::i;:::-;;:::i;26482:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26605:27:0;;;26581:4;26605:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26482:168;59775:226;;;;;;:::i;:::-;;:::i;26722:401::-;;;;;;:::i;:::-;;:::i;65619:227::-;;;;;;:::i;:::-;;:::i;58651:350::-;;;;;;:::i;:::-;;:::i;59446:124::-;;;;;;:::i;:::-;;:::i;25261:231::-;25347:7;-1:-1:-1;;;;;25375:21:0;;25367:77;;;;-1:-1:-1;;;25367:77:0;;20950:2:1;25367:77:0;;;20932:21:1;20989:2;20969:18;;;20962:30;21028:34;21008:18;;;21001:62;21099:13;21079:18;;;21072:41;21130:19;;25367:77:0;;;;;;;;;-1:-1:-1;25462:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;25462:22:0;;;;;;;;;;25261:231;;;;;:::o;24240:354::-;24364:4;-1:-1:-1;;;;;;24401:52:0;;24416:37;24401:52;;:132;;-1:-1:-1;;;;;;;24470:63:0;;24485:48;24470:63;24401:132;:185;;;-1:-1:-1;14947:36:0;-1:-1:-1;;;;;;14932:51:0;;;24550:36;14823:168;57082:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;62107:1184::-;62223:13;62258:22;62272:7;62258:13;:22::i;:::-;62254:1010;;;62297:19;62319:27;;;:18;:27;;;;;62297:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62387:1;62371:5;62365:19;:23;62361:76;;;62416:5;62107:1184;-1:-1:-1;;62107:1184:0:o;62361:76::-;62457:12;;;;62453:800;;;62490:15;62580:7;62614:25;62631:7;62614:16;:25::i;:::-;62666:10;62537:162;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;62537:162:0;;;;;;;;;;62107:1184;-1:-1:-1;;;;62107:1184:0:o;62453:800::-;62786:15;62876:7;62910:30;66015:9;62910:16;:30::i;:::-;62997:52;63041:4;62997:19;:52::i;:::-;63106:25;63123:7;63106:16;:25::i;:::-;63158:10;62833:358;;;;;;;;;;;;:::i;62254:1010::-;-1:-1:-1;;63274:9:0;;;;;;;;;-1:-1:-1;63274:9:0;;;62107:1184::o;61019:236::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;61167:12:::1;:24:::0;;-1:-1:-1;;61167:24:0::1;::::0;::::1;;;::::0;;61202:20;;::::1;::::0;:10:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;61233:14:0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;61019:236:::0;;;:::o;27200:442::-;-1:-1:-1;;;;;27433:20:0;;12371:10;27433:20;;:60;;-1:-1:-1;27457:36:0;27474:4;12371:10;26482:168;:::i;27457:36::-;27411:160;;;;-1:-1:-1;;;27411:160:0;;23284:2:1;27411:160:0;;;23266:21:1;23323:2;23303:18;;;23296:30;23362:34;23342:18;;;23335:62;23433:20;23413:18;;;23406:48;23471:19;;27411:160:0;23082:414:1;27411:160:0;27582:52;27605:4;27611:2;27615:3;27620:7;27629:4;27582:22;:52::i;:::-;27200:442;;;;;:::o;65050:120::-;65111:4;65135:27;:9;65154:7;65135:18;:27::i;25658:524::-;25814:16;25875:3;:10;25856:8;:15;:29;25848:83;;;;-1:-1:-1;;;25848:83:0;;25755:2:1;25848:83:0;;;25737:21:1;25794:2;25774:18;;;25767:30;25833:34;25813:18;;;25806:62;25904:11;25884:18;;;25877:39;25933:19;;25848:83:0;25553:405:1;25848:83:0;25944:30;25991:8;:15;25977:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25977:30:0;;25944:63;;26025:9;26020:122;26044:8;:15;26040:1;:19;26020:122;;;26100:30;26110:8;26119:1;26110:11;;;;;;;;:::i;:::-;;;;;;;26123:3;26127:1;26123:6;;;;;;;;:::i;:::-;;;;;;;26100:9;:30::i;:::-;26081:13;26095:1;26081:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26061:3;;;:::i;:::-;;;26020:122;;;-1:-1:-1;26161:13:0;25658:524;-1:-1:-1;;;25658:524:0:o;61752:106::-;61796:16;61832:18;:9;:16;:18::i;:::-;61825:25;;61752:106;:::o;59027:382::-;-1:-1:-1;;;;;59223:23:0;;12371:10;59223:23;;:66;;-1:-1:-1;59250:39:0;59267:7;12371:10;26482:168;:::i;59250:39::-;59201:157;;;;-1:-1:-1;;;59201:157:0;;21767:2:1;59201:157:0;;;21749:21:1;21806:2;21786:18;;;21779:30;21845:34;21825:18;;;21818:62;-1:-1:-1;;;21896:18:1;;;21889:39;21945:19;;59201:157:0;21565:405:1;59201:157:0;59369:32;59380:7;59389:3;59394:6;59369:10;:32::i;:::-;59027:382;;;:::o;65463:148::-;58505:6;;-1:-1:-1;;;;;58505:6:0;12371:10;65385:23;65377:58;;;;-1:-1:-1;;;65377:58:0;;22177:2:1;65377:58:0;;;22159:21:1;22216:2;22196:18;;;22189:30;22255:24;22235:18;;;22228:52;22297:18;;65377:58:0;21975:346:1;65377:58:0;65554:6:::1;::::0;65533:40:::1;::::0;65570:1:::1;::::0;-1:-1:-1;;;;;65554:6:0::1;::::0;65533:40:::1;::::0;65570:1;;65533:40:::1;65584:6;:19:::0;;-1:-1:-1;;65584:19:0::1;::::0;;65463:148::o;61643:101::-;61683:16;61719:17;:8;:15;:17::i;60009:249::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;60196:54:::1;60218:4;60224:2;60228:7;60237:6;60245:4;60196:21;:54::i;57107:20::-:0;;;;;;;:::i;59578:189::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;59731:8:::1;::::0;59708:51:::1;::::0;-1:-1:-1;;;;;59731:8:0::1;59741::::0;59751:7;59708:22:::1;:51::i;:::-;59578:189:::0;;:::o;57296:21::-;;;;;;;:::i;26255:155::-;26350:52;12371:10;26383:8;26393;26350:18;:52::i;61971:105::-;67008:12;:10;:12::i;:::-;:41;;;-1:-1:-1;58505:6:0;;-1:-1:-1;;;;;58505:6:0;12371:10;67025:23;67008:41;67004:75;;;62052:16;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;67004:75::-:0;61971:105;:::o;61866:97::-;67008:12;:10;:12::i;:::-;:41;;;-1:-1:-1;58505:6:0;;-1:-1:-1;;;;;58505:6:0;12371:10;67025:23;67008:41;67004:75;;;61943:12;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;60289:722::-:0;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;60564:9:::1;60559:333;60583:7;:14;60579:1;:18;60559:333;;;60619:10;60632:7;60640:1;60632:10;;;;;;;;:::i;:::-;;;;;;;60619:23;;60657:14;60674:10;60685:1;60674:13;;;;;;;;:::i;:::-;;;;;;;60657:30;;60702:19;60724:22;60734:7;60743:2;60724:9;:22::i;:::-;60702:44;;60802:6;60787:11;:21;;60761:119;;;::::0;-1:-1:-1;;;60761:119:0;;21362:2:1;60761:119:0::1;::::0;::::1;21344:21:1::0;21401:2;21381:18;;;21374:30;21440:34;21420:18;;;21413:62;-1:-1:-1;;;21491:18:1;;;21484:34;21535:19;;60761:119:0::1;21160:400:1::0;60761:119:0::1;60604:288;;;60599:3;;;;;:::i;:::-;;;;60559:333;;;;60904:40;60915:7;60924;60933:10;60904;:40::i;:::-;60955:48;60978:7;60987:5;60994:8;60955:22;:48::i;66110:179::-:0;66200:13;66238:43;66274:4;-1:-1:-1;;;;;66258:22:0;66238:19;:43::i;57464:506::-;57681:20;57692:8;57681:10;:20::i;:::-;57677:84;;57734:14;;;;;;;;;;;;;;;;57727:22;;-1:-1:-1;;;57727:22:0;;;;57734:14;57727:22;;;:::i;57677:84::-;57777:44;;;;;57811:9;57777:44;;;16192:74:1;-1:-1:-1;;;;;57777:33:0;;;;;16165:18:1;;57777:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57773:108;;57854:14;;;;;;;;;;;;;;;;57847:22;;-1:-1:-1;;;57847:22:0;;;;57854:14;57847:22;;;:::i;57773:108::-;57891:71;57915:5;;57891:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;57891:71:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57922:7:0;;-1:-1:-1;57922:7:0;;;;57891:71;;57922:7;;;;57891:71;;;;;;;;;-1:-1:-1;;57891:71:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57931:8:0;;-1:-1:-1;57931:8:0;;;;57891:71;;57931:8;;;;57891:71;;;;;;;;;-1:-1:-1;57941:10:0;;-1:-1:-1;57953:8:0;;-1:-1:-1;57891:23:0;;-1:-1:-1;57891:71:0:i;:::-;57464:506;;;;;;;;:::o;61263:372::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;61437:22;;61417:4;;61433:161:::1;;61488:27;::::0;;;:18:::1;:27;::::0;;;;61481:34:::1;::::0;::::1;:::i;:::-;61433:161;;;61548:27;::::0;;;:18:::1;:27;::::0;;;;;;;:34;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;61433:161;61619:7;61609:18;61613:4;61609:18;;;;;;:::i;:::-;;;;;;;;61369:266;61263:372:::0;;:::o;59775:226::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;59957:8:::1;::::0;59935:58:::1;::::0;-1:-1:-1;;;;;59957:8:0::1;59967:2:::0;59971:7;59980:6;59988:4;59935:21:::1;:58::i;26722:401::-:0;-1:-1:-1;;;;;26930:20:0;;12371:10;26930:20;;:60;;-1:-1:-1;26954:36:0;26971:4;12371:10;26482:168;:::i;26954:36::-;26908:151;;;;-1:-1:-1;;;26908:151:0;;21767:2:1;26908:151:0;;;21749:21:1;21806:2;21786:18;;;21779:30;21845:34;21825:18;;;21818:62;-1:-1:-1;;;21896:18:1;;;21889:39;21945:19;;26908:151:0;21565:405:1;26908:151:0;27070:45;27088:4;27094:2;27098;27102:6;27110:4;27070:17;:45::i;65619:227::-;58505:6;;-1:-1:-1;;;;;58505:6:0;12371:10;65385:23;65377:58;;;;-1:-1:-1;;;65377:58:0;;22177:2:1;65377:58:0;;;22159:21:1;22216:2;22196:18;;;22189:30;22255:24;22235:18;;;22228:52;22297:18;;65377:58:0;21975:346:1;65377:58:0;-1:-1:-1;;;;;65708:22:0;::::1;65700:56;;;::::0;-1:-1:-1;;;65700:56:0;;22528:2:1;65700:56:0::1;::::0;::::1;22510:21:1::0;22567:2;22547:18;;;22540:30;22606:23;22586:18;;;22579:51;22647:18;;65700:56:0::1;22326:345:1::0;65700:56:0::1;65793:6;::::0;65772:38:::1;::::0;-1:-1:-1;;;;;65772:38:0;;::::1;::::0;65793:6:::1;::::0;65772:38:::1;::::0;65793:6:::1;::::0;65772:38:::1;65821:6;:17:::0;;-1:-1:-1;;65821:17:0::1;-1:-1:-1::0;;;;;65821:17:0;;;::::1;::::0;;;::::1;::::0;;65619:227::o;58651:350::-;-1:-1:-1;;;;;58822:23:0;;12371:10;58822:23;;:66;;-1:-1:-1;58849:39:0;58866:7;12371:10;26482:168;:::i;58849:39::-;58800:157;;;;-1:-1:-1;;;58800:157:0;;21767:2:1;58800:157:0;;;21749:21:1;21806:2;21786:18;;;21779:30;21845:34;21825:18;;;21818:62;-1:-1:-1;;;21896:18:1;;;21889:39;21945:19;;58800:157:0;21565:405:1;58800:157:0;58968:25;58974:7;58983:2;58987:5;58968;:25::i;59446:124::-;67132:12;:10;:12::i;:::-;67128:80;;67177:18;;;;;;;;;;;;;;;;67170:26;;-1:-1:-1;;;67170:26:0;;;;67177:18;67170:26;;;:::i;67128:80::-;59528:34:::1;59546:7;59555:6;59528:17;:34::i;54370:723::-:0;54426:13;54647:10;54643:53;;-1:-1:-1;;54674:10:0;;;;;;;;;;;;-1:-1:-1;;;54674:10:0;;;;;54370:723::o;54643:53::-;54721:5;54706:12;54762:78;54769:9;;54762:78;;54795:8;;;;:::i;:::-;;-1:-1:-1;54818:10:0;;-1:-1:-1;54826:2:0;54818:10;;:::i;:::-;;;54762:78;;;54850:19;54882:6;54872:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54872:17:0;;54850:39;;54900:154;54907:10;;54900:154;;54934:11;54944:1;54934:11;;:::i;:::-;;-1:-1:-1;55003:10:0;55011:2;55003:5;:10;:::i;:::-;54990:24;;:2;:24;:::i;:::-;54977:39;;54960:6;54967;54960:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;54960:56:0;;;;;;;;-1:-1:-1;55031:11:0;55040:2;55031:11;;:::i;:::-;;;54900:154;;;55078:6;54370:723;-1:-1:-1;;;;54370:723:0:o;55203:340::-;55262:13;55292:10;55288:56;;-1:-1:-1;;55319:13:0;;;;;;;;;;;;;;;;;;55203:340::o;55288:56::-;55369:5;55354:12;55414:78;55421:9;;55414:78;;55447:8;;;;:::i;:::-;;;;55479:1;55470:10;;;;;55414:78;;;55509:26;55521:5;55528:6;55509:11;:26::i;66754:201::-;66820:8;;66799:4;;-1:-1:-1;;;;;66820:8:0;:22;66816:109;;66880:8;;-1:-1:-1;;;;;66880:8:0;66866:33;12371:10;66866:47;;-1:-1:-1;;;;;;66866:47:0;;;;;;;-1:-1:-1;;;;;16210:55:1;;;66866:47:0;;;16192:74:1;16165:18;;66866:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;66816:109::-;-1:-1:-1;66942:5:0;;66754:201::o;64679:319::-;64905:58;64934:4;64940:2;64944:3;64949:7;64958:4;64905:28;:58::i;:::-;64974:16;:8;64987:2;64974:12;:16::i;:::-;;64679:319;;;;;:::o;52348:146::-;52425:4;45408:19;;;:12;;;:19;;;;;;:24;;52449:37;52442:44;52348:146;-1:-1:-1;;;52348:146:0:o;53735:263::-;53795:16;53824:22;53849:19;53857:3;53849:7;:19::i;34437:891::-;-1:-1:-1;;;;;34589:18:0;;34581:66;;;;-1:-1:-1;;;34581:66:0;;24118:2:1;34581:66:0;;;24100:21:1;24157:2;24137:18;;;24130:30;24196:34;24176:18;;;24169:62;-1:-1:-1;;;24247:18:1;;;24240:33;24290:19;;34581:66:0;23916:399:1;34581:66:0;34680:7;:14;34666:3;:10;:28;34658:81;;;;-1:-1:-1;;;34658:81:0;;26165:2:1;34658:81:0;;;26147:21:1;26204:2;26184:18;;;26177:30;26243:34;26223:18;;;26216:62;-1:-1:-1;;;26294:18:1;;;26287:38;26342:19;;34658:81:0;25963:404:1;34658:81:0;34752:16;12371:10;34752:31;;34796:66;34817:8;34827:4;34841:1;34845:3;34850:7;34796:66;;;;;;;;;;;;:20;:66::i;:::-;34880:9;34875:373;34899:3;:10;34895:1;:14;34875:373;;;34931:10;34944:3;34948:1;34944:6;;;;;;;;:::i;:::-;;;;;;;34931:19;;34965:14;34982:7;34990:1;34982:10;;;;;;;;:::i;:::-;;;;;;;;;;;;35009:19;35031:13;;;:9;:13;;;;;;-1:-1:-1;;;;;35031:19:0;;;;;;;;;;;;34982:10;;-1:-1:-1;35073:21:0;;;;35065:70;;;;-1:-1:-1;;;35065:70:0;;21362:2:1;35065:70:0;;;21344:21:1;21401:2;21381:18;;;21374:30;21440:34;21420:18;;;21413:62;-1:-1:-1;;;21491:18:1;;;21484:34;21535:19;;35065:70:0;21160:400:1;35065:70:0;35179:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;35179:19:0;;;;;;;;;;35201:20;;35179:42;;34911:3;;;;:::i;:::-;;;;34875:373;;;;35303:1;-1:-1:-1;;;;;35265:55:0;35289:4;-1:-1:-1;;;;;35265:55:0;35279:8;-1:-1:-1;;;;;35265:55:0;;35307:3;35312:7;35265:55;;;;;;;:::i;:::-;;;;;;;;34570:758;34437:891;;;:::o;63995:381::-;64185:4;64191:2;64195:7;64204:6;64223:50:::1;64241:4;64247:2;64251:7;64260:6;64268:4;64223:17;:50::i;:::-;64321:2;-1:-1:-1::0;;;;;64289:52:0::1;64315:4;-1:-1:-1::0;;;;;64289:52:0::1;64301:12;12371:10:::0;;12291:98;64301:12:::1;-1:-1:-1::0;;;;;64289:52:0::1;;64325:7;64334:6;64289:52;;;;;;27130:25:1::0;;;27186:2;27171:18;;27164:34;27118:2;27103:18;;26956:248;64289:52:0::1;;;;;;;;64352:16;:8;64365:2:::0;64352:12:::1;:16::i;:::-;;63995:381:::0;;;;;;;;;:::o;63597:390::-;63753:42;63764:7;63773:8;63783:7;63753:42;;;;;;;;;;;;:10;:42::i;:::-;63811:9;63806:174;63830:8;:15;63826:1;:19;63806:174;;;63867:26;63881:8;63890:1;63881:11;;;;;;;;:::i;:::-;;;;;;;63867:9;:13;;:26;;;;:::i;:::-;-1:-1:-1;;;;;;63913:55:0;;12371:10;-1:-1:-1;;;;;63913:55:0;;63944:8;63953:1;63944:11;;;;;;;;:::i;:::-;;;;;;;63957:7;63965:1;63957:10;;;;;;;;:::i;:::-;;;;;;;63913:55;;;;;;27130:25:1;;;27186:2;27171:18;;27164:34;27118:2;27103:18;;26956:248;63913:55:0;;;;;;;;63847:3;;;;:::i;:::-;;;;63806:174;;35470:331;35625:8;-1:-1:-1;;;;;35616:17:0;:5;-1:-1:-1;;;;;35616:17:0;;;35608:71;;;;-1:-1:-1;;;35608:71:0;;25345:2:1;35608:71:0;;;25327:21:1;25384:2;25364:18;;;25357:30;25423:34;25403:18;;;25396:62;25494:11;25474:18;;;25467:39;25523:19;;35608:71:0;25143:405:1;35608:71:0;-1:-1:-1;;;;;35690:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35690:46:0;;;;;;;;;;35752:41;;19281::1;;;35752::0;;19254:18:1;35752:41:0;;;;;;;35470:331;;;:::o;66297:191::-;66357:4;-1:-1:-1;;;;;66378:21:0;;;66374:84;;-1:-1:-1;;;;;;66423:19:0;;:23;;;66297:191::o;66374:84::-;-1:-1:-1;66475:5:0;;66297:191;-1:-1:-1;66297:191:0:o;57978:454::-;10591:13;;;;;;;:48;;10627:12;;;;10626:13;10591:48;;;11394:4;2171:19;:23;10607:16;10583:107;;;;-1:-1:-1;;;10583:107:0;;23703:2:1;10583:107:0;;;23685:21:1;23742:2;23722:18;;;23715:30;23781:34;23761:18;;;23754:62;23852:16;23832:18;;;23825:44;23886:19;;10583:107:0;23501:410:1;10583:107:0;10703:19;10726:13;;;;;;10725:14;10750:101;;;;10785:13;:20;;-1:-1:-1;;10820:19:0;;;;;10750:101;58201:24:::1;58216:8;58201:14;:24::i;:::-;58238:8;:19:::0;;-1:-1:-1;;;;;58238:19:0;;::::1;-1:-1:-1::0;;58238:19:0;;::::1;;::::0;;;58268:6:::1;:19:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;58298:12;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;58321:16:0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;58348:18:0;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;58377:8:0::1;:21:::0;;-1:-1:-1;;58377:21:0::1;-1:-1:-1::0;;;;;58377:21:0;::::1;;::::0;;58409:15:::1;::::0;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;58409:15:0;;;;::::1;::::0;:10:::1;::::0;:15:::1;:::i;:::-;;10881:14:::0;10877:68;;;10928:5;10912:21;;-1:-1:-1;;10912:21:0;;;10298:654;57978:454;;;;;:::o;64384:287::-;64585:51;64609:4;64615:2;64619;64623:6;64631:4;64585:23;:51::i;33586:648::-;-1:-1:-1;;;;;33713:18:0;;33705:66;;;;-1:-1:-1;;;33705:66:0;;24118:2:1;33705:66:0;;;24100:21:1;24157:2;24137:18;;;24130:30;24196:34;24176:18;;;24169:62;-1:-1:-1;;;24247:18:1;;;24240:33;24290:19;;33705:66:0;23916:399:1;33705:66:0;12371:10;33828:102;12371:10;33859:4;33784:16;33877:21;33895:2;33877:17;:21::i;:::-;33900:25;33918:6;33900:17;:25::i;:::-;33828:102;;;;;;;;;;;;:20;:102::i;:::-;33943:19;33965:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;33965:19:0;;;;;;;;;;34003:21;;;;33995:70;;;;-1:-1:-1;;;33995:70:0;;21362:2:1;33995:70:0;;;21344:21:1;21401:2;21381:18;;;21374:30;21440:34;21420:18;;;21413:62;-1:-1:-1;;;21491:18:1;;;21484:34;21535:19;;33995:70:0;21160:400:1;33995:70:0;34101:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;34101:19:0;;;;;;;;;;;;34123:20;;;34101:42;;34172:54;;27130:25:1;;;27171:18;;;27164:34;;;34101:19:0;;34172:54;;;;;;27103:18:1;34172:54:0;;;;;;;33694:540;;33586:648;;;:::o;63326:263::-;63436:22;:9;63450:7;63436:13;:22::i;:::-;-1:-1:-1;63487:8:0;;63481:36;;;;;;;;;63487:8;63481:36;;;;-1:-1:-1;;;;;63487:8:0;;63497:7;;63506:6;;63481:5;:36::i;:::-;63555:8;;63533:48;;;27130:25:1;;;27186:2;27171:18;;27164:34;;;-1:-1:-1;;;;;63555:8:0;;;;12371:10;;63533:48;;27103:18:1;63533:48:0;;;;;;;63326:263;;:::o;55671:451::-;55746:13;55772:19;55804:10;55808:6;55804:1;:10;:::i;:::-;:14;;55817:1;55804:14;:::i;:::-;55794:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55794:25:0;;55772:47;;-1:-1:-1;;;55830:6:0;55837:1;55830:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;55830:15:0;;;;;;;;;55856;:6;55863:1;55856:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;55856:15:0;;;;;;;;-1:-1:-1;55887:9:0;55899:10;55903:6;55899:1;:10;:::i;:::-;:14;;55912:1;55899:14;:::i;:::-;55887:26;;55882:135;55919:1;55915;:5;55882:135;;;55954:12;55967:5;55975:3;55967:11;55954:25;;;;;;;:::i;:::-;;;;55942:6;55949:1;55942:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;55942:37:0;;;;;;;;-1:-1:-1;56004:1:0;55994:11;;;;;55922:3;;;:::i;:::-;;;55882:135;;;-1:-1:-1;56035:10:0;;56027:55;;;;-1:-1:-1;;;56027:55:0;;20180:2:1;56027:55:0;;;20162:21:1;;;20199:18;;;20192:30;20258:34;20238:18;;;20231:62;20310:18;;56027:55:0;19978:356:1;29284:1074:0;29511:7;:14;29497:3;:10;:28;29489:81;;;;-1:-1:-1;;;29489:81:0;;26165:2:1;29489:81:0;;;26147:21:1;26204:2;26184:18;;;26177:30;26243:34;26223:18;;;26216:62;-1:-1:-1;;;26294:18:1;;;26287:38;26342:19;;29489:81:0;25963:404:1;29489:81:0;-1:-1:-1;;;;;29589:16:0;;29581:66;;;;-1:-1:-1;;;29581:66:0;;22878:2:1;29581:66:0;;;22860:21:1;22917:2;22897:18;;;22890:30;22956:34;22936:18;;;22929:62;-1:-1:-1;;;23007:18:1;;;23000:35;23052:19;;29581:66:0;22676:401:1;29581:66:0;12371:10;29704:60;12371:10;29735:4;29741:2;29745:3;29750:7;29759:4;29704:20;:60::i;:::-;29782:9;29777:421;29801:3;:10;29797:1;:14;29777:421;;;29833:10;29846:3;29850:1;29846:6;;;;;;;;:::i;:::-;;;;;;;29833:19;;29867:14;29884:7;29892:1;29884:10;;;;;;;;:::i;:::-;;;;;;;;;;;;29911:19;29933:13;;;:9;:13;;;;;;-1:-1:-1;;;;;29933:19:0;;;;;;;;;;;;29884:10;;-1:-1:-1;29975:21:0;;;;29967:76;;;;-1:-1:-1;;;29967:76:0;;24522:2:1;29967:76:0;;;24504:21:1;24561:2;24541:18;;;24534:30;24600:34;24580:18;;;24573:62;-1:-1:-1;;;24651:18:1;;;24644:40;24701:19;;29967:76:0;24320:406:1;29967:76:0;30087:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;30087:19:0;;;;;;;;;;30109:20;;;30087:42;;30159:17;;;;;;;:27;;30109:20;;30087:13;30159:27;;30109:20;;30159:27;:::i;:::-;;;;;;;;29818:380;;;29813:3;;;;:::i;:::-;;;29777:421;;;;30245:2;-1:-1:-1;;;;;30215:47:0;30239:4;-1:-1:-1;;;;;30215:47:0;30229:8;-1:-1:-1;;;;;30215:47:0;;30249:3;30254:7;30215:47;;;;;;;:::i;:::-;;;;;;;;30275:75;30311:8;30321:4;30327:2;30331:3;30336:7;30345:4;30275:35;:75::i;49300:152::-;49370:4;49394:50;49399:3;-1:-1:-1;;;;;49419:23:0;;49394:4;:50::i;46659:111::-;46715:16;46751:3;:11;;46744:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46659:111;;;:::o;40468:655::-;-1:-1:-1;;;;;40790:18:0;;40786:160;;40830:9;40825:110;40849:3;:10;40845:1;:14;40825:110;;;40909:7;40917:1;40909:10;;;;;;;;:::i;:::-;;;;;;;40885:12;:20;40898:3;40902:1;40898:6;;;;;;;;:::i;:::-;;;;;;;40885:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40861:3:0;;-1:-1:-1;40861:3:0;;:::i;:::-;;;40825:110;;;;40786:160;-1:-1:-1;;;;;40962:16:0;;40958:158;;41000:9;40995:110;41019:3;:10;41015:1;:14;40995:110;;;41079:7;41087:1;41079:10;;;;;;;;:::i;:::-;;;;;;;41055:12;:20;41068:3;41072:1;41068:6;;;;;;;;:::i;:::-;;;;;;;41055:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;41031:3:0;;-1:-1:-1;41031:3:0;;:::i;:::-;;;40995:110;;;;40468:655;;;;;;:::o;32601:735::-;-1:-1:-1;;;;;32779:16:0;;32771:62;;;;-1:-1:-1;;;32771:62:0;;26574:2:1;32771:62:0;;;26556:21:1;26613:2;26593:18;;;26586:30;26652:34;26632:18;;;26625:62;-1:-1:-1;;;26703:18:1;;;26696:31;26744:19;;32771:62:0;26372:397:1;32771:62:0;32866:7;:14;32852:3;:10;:28;32844:81;;;;-1:-1:-1;;;32844:81:0;;26165:2:1;32844:81:0;;;26147:21:1;26204:2;26184:18;;;26177:30;26243:34;26223:18;;;26216:62;-1:-1:-1;;;26294:18:1;;;26287:38;26342:19;;32844:81:0;25963:404:1;32844:81:0;12371:10;32982:66;12371:10;32938:16;33025:2;33029:3;33034:7;33043:4;32982:20;:66::i;:::-;33066:9;33061:103;33085:3;:10;33081:1;:14;33061:103;;;33142:7;33150:1;33142:10;;;;;;;;:::i;:::-;;;;;;;33117:9;:17;33127:3;33131:1;33127:6;;;;;;;;:::i;:::-;;;;;;;33117:17;;;;;;;;;;;:21;33135:2;-1:-1:-1;;;;;33117:21:0;-1:-1:-1;;;;;33117:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;33097:3:0;;-1:-1:-1;33097:3:0;;;:::i;:::-;;;;33061:103;;;;33217:2;-1:-1:-1;;;;;33181:53:0;33213:1;-1:-1:-1;;;;;33181:53:0;33195:8;-1:-1:-1;;;;;33181:53:0;;33221:3;33226:7;33181:53;;;;;;;:::i;:::-;;;;;;;;33247:81;33283:8;33301:1;33305:2;33309:3;33314:7;33323:4;33247:35;:81::i;51818:131::-;51885:4;51909:32;51914:3;51934:5;51909:4;:32::i;23929:119::-;11194:13;;;;;;;11186:69;;;;-1:-1:-1;;;11186:69:0;;24933:2:1;11186:69:0;;;24915:21:1;24972:2;24952:18;;;24945:30;25011:34;24991:18;;;24984:62;-1:-1:-1;;;25062:18:1;;;25055:41;25113:19;;11186:69:0;24731:407:1;11186:69:0;24010:30:::1;24035:4;24010:24;:30::i;28106:820::-:0;-1:-1:-1;;;;;28294:16:0;;28286:66;;;;-1:-1:-1;;;28286:66:0;;22878:2:1;28286:66:0;;;22860:21:1;22917:2;22897:18;;;22890:30;22956:34;22936:18;;;22929:62;-1:-1:-1;;;23007:18:1;;;23000:35;23052:19;;28286:66:0;22676:401:1;28286:66:0;12371:10;28409:96;12371:10;28440:4;28446:2;28450:21;28468:2;28450:17;:21::i;:::-;28473:25;28491:6;28473:17;:25::i;:::-;28500:4;28409:20;:96::i;:::-;28518:19;28540:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28540:19:0;;;;;;;;;;28578:21;;;;28570:76;;;;-1:-1:-1;;;28570:76:0;;24522:2:1;28570:76:0;;;24504:21:1;24561:2;24541:18;;;24534:30;24600:34;24580:18;;;24573:62;-1:-1:-1;;;24651:18:1;;;24644:40;24701:19;;28570:76:0;24320:406:1;28570:76:0;28682:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28682:19:0;;;;;;;;;;28704:20;;;28682:42;;28746:17;;;;;;;:27;;28704:20;;28682:13;28746:27;;28704:20;;28746:27;:::i;:::-;;;;-1:-1:-1;;28791:46:0;;;27130:25:1;;;27186:2;27171:18;;27164:34;;;-1:-1:-1;;;;;28791:46:0;;;;;;;;;;;;;;27103:18:1;28791:46:0;;;;;;;28850:68;28881:8;28891:4;28897:2;28901;28905:6;28913:4;28850:30;:68::i;38603:198::-;38723:16;;;38737:1;38723:16;;;;;;;;;38669;;38698:22;;38723:16;;;;;;;;;;;;-1:-1:-1;38723:16:0;38698:41;;38761:7;38750:5;38756:1;38750:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;38788:5;38603:198;-1:-1:-1;;38603:198:0:o;31676:569::-;-1:-1:-1;;;;;31829:16:0;;31821:62;;;;-1:-1:-1;;;31821:62:0;;26574:2:1;31821:62:0;;;26556:21:1;26613:2;26593:18;;;26586:30;26652:34;26632:18;;;26625:62;-1:-1:-1;;;26703:18:1;;;26696:31;26744:19;;31821:62:0;26372:397:1;31821:62:0;12371:10;31940:102;12371:10;31896:16;31983:2;31987:21;32005:2;31987:17;:21::i;31940:102::-;32055:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32055:17:0;;;;;;;;;:27;;32076:6;;32055:13;:27;;32076:6;;32055:27;:::i;:::-;;;;-1:-1:-1;;32098:52:0;;;27130:25:1;;;27186:2;27171:18;;27164:34;;;-1:-1:-1;;;;;32098:52:0;;;;32131:1;;32098:52;;;;;;27103:18:1;32098:52:0;;;;;;;32163:74;32194:8;32212:1;32216:2;32220;32224:6;32232:4;32163:30;:74::i;37760:835::-;-1:-1:-1;;;;;38000:13:0;;2171:19;:23;37996:592;;38036:90;;-1:-1:-1;;;38036:90:0;;-1:-1:-1;;;;;38036:54:0;;;;;:90;;38091:8;;38101:4;;38107:3;;38112:7;;38121:4;;38036:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38036:90:0;;;;;;;;-1:-1:-1;;38036:90:0;;;;;;;;;;;;:::i;:::-;;;38032:545;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38450:6;38443:14;;-1:-1:-1;;;38443:14:0;;;;;;;;:::i;38032:545::-;;;38499:62;;-1:-1:-1;;;38499:62:0;;19759:2:1;38499:62:0;;;19741:21:1;19798:2;19778:18;;;19771:30;19837:34;19817:18;;;19810:62;19908:22;19888:18;;;19881:50;19948:19;;38499:62:0;19557:416:1;38032:545:0;-1:-1:-1;;;;;;38208:71:0;;-1:-1:-1;;;38208:71:0;38204:170;;38304:50;;-1:-1:-1;;;38304:50:0;;20541:2:1;38304:50:0;;;20523:21:1;20580:2;20560:18;;;20553:30;20619:34;20599:18;;;20592:62;-1:-1:-1;;;20670:18:1;;;20663:38;20718:19;;38304:50:0;20339:404:1;43215:414:0;43278:4;45408:19;;;:12;;;:19;;;;;;43295:327;;-1:-1:-1;43338:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;43521:18;;43499:19;;;:12;;;:19;;;;;;:40;;;;43554:11;;43295:327;-1:-1:-1;43605:5:0;43598:12;;24056:112;11194:13;;;;;;;11186:69;;;;-1:-1:-1;;;11186:69:0;;24933:2:1;11186:69:0;;;24915:21:1;24972:2;24952:18;;;24945:30;25011:34;24991:18;;;24984:62;-1:-1:-1;;;25062:18:1;;;25055:41;25113:19;;11186:69:0;24731:407:1;11186:69:0;24147:13:::1;24155:4;24147:7;:13::i;36986:766::-:0;-1:-1:-1;;;;;37201:13:0;;2171:19;:23;37197:548;;37237:83;;-1:-1:-1;;;37237:83:0;;-1:-1:-1;;;;;37237:49:0;;;;;:83;;37287:8;;37297:4;;37303:2;;37307:6;;37315:4;;37237:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37237:83:0;;;;;;;;-1:-1:-1;;37237:83:0;;;;;;;;;;;;:::i;:::-;;;37233:501;;;;:::i;:::-;-1:-1:-1;;;;;;37370:66:0;;-1:-1:-1;;;37370:66:0;37366:165;;37461:50;;-1:-1:-1;;;37461:50:0;;20541:2:1;37461:50:0;;;20523:21:1;20580:2;20560:18;;;20553:30;20619:34;20599:18;;;20592:62;-1:-1:-1;;;20670:18:1;;;20663:38;20718:19;;37461:50:0;20339:404:1;31202:88:0;31269:13;;;;:4;;:13;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:735::-;269:5;322:3;315:4;307:6;303:17;299:27;289:55;;340:1;337;330:12;289:55;376:6;363:20;402:4;425:43;465:2;425:43;:::i;:::-;497:2;491:9;509:31;537:2;529:6;509:31;:::i;:::-;575:18;;;609:15;;;;-1:-1:-1;644:15:1;;;694:1;690:10;;;678:23;;674:32;;671:41;-1:-1:-1;668:61:1;;;725:1;722;715:12;668:61;747:1;757:163;771:2;768:1;765:9;757:163;;;828:17;;816:30;;866:12;;;;898;;;;789:1;782:9;757:163;;;-1:-1:-1;938:6:1;;215:735;-1:-1:-1;;;;;;;215:735:1:o;955:555::-;997:5;1050:3;1043:4;1035:6;1031:17;1027:27;1017:55;;1068:1;1065;1058:12;1017:55;1104:6;1091:20;1130:18;1126:2;1123:26;1120:52;;;1152:18;;:::i;:::-;1201:2;1195:9;1213:67;1268:2;1249:13;;-1:-1:-1;;1245:27:1;1274:4;1241:38;1195:9;1213:67;:::i;:::-;1304:2;1296:6;1289:18;1350:3;1343:4;1338:2;1330:6;1326:15;1322:26;1319:35;1316:55;;;1367:1;1364;1357:12;1316:55;1431:2;1424:4;1416:6;1412:17;1405:4;1397:6;1393:17;1380:54;1478:1;1454:15;;;1471:4;1450:26;1443:37;;;;1458:6;955:555;-1:-1:-1;;;955:555:1:o;1515:348::-;1567:8;1577:6;1631:3;1624:4;1616:6;1612:17;1608:27;1598:55;;1649:1;1646;1639:12;1598:55;-1:-1:-1;1672:20:1;;1715:18;1704:30;;1701:50;;;1747:1;1744;1737:12;1701:50;1784:4;1776:6;1772:17;1760:29;;1836:3;1829:4;1820:6;1812;1808:19;1804:30;1801:39;1798:59;;;1853:1;1850;1843:12;1798:59;1515:348;;;;;:::o;1868:186::-;1927:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2019:29;2038:9;2019:29;:::i;2059:260::-;2127:6;2135;2188:2;2176:9;2167:7;2163:23;2159:32;2156:52;;;2204:1;2201;2194:12;2156:52;2227:29;2246:9;2227:29;:::i;:::-;2217:39;;2275:38;2309:2;2298:9;2294:18;2275:38;:::i;:::-;2265:48;;2059:260;;;;;:::o;2324:943::-;2478:6;2486;2494;2502;2510;2563:3;2551:9;2542:7;2538:23;2534:33;2531:53;;;2580:1;2577;2570:12;2531:53;2603:29;2622:9;2603:29;:::i;:::-;2593:39;;2651:38;2685:2;2674:9;2670:18;2651:38;:::i;:::-;2641:48;;2740:2;2729:9;2725:18;2712:32;2763:18;2804:2;2796:6;2793:14;2790:34;;;2820:1;2817;2810:12;2790:34;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;2957:2;2946:9;2942:18;2929:32;2913:48;;2986:2;2976:8;2973:16;2970:36;;;3002:1;2999;2992:12;2970:36;3025:63;3080:7;3069:8;3058:9;3054:24;3025:63;:::i;:::-;3015:73;;3141:3;3130:9;3126:19;3113:33;3097:49;;3171:2;3161:8;3158:16;3155:36;;;3187:1;3184;3177:12;3155:36;;3210:51;3253:7;3242:8;3231:9;3227:24;3210:51;:::i;:::-;3200:61;;;2324:943;;;;;;;;:::o;3272:606::-;3376:6;3384;3392;3400;3408;3461:3;3449:9;3440:7;3436:23;3432:33;3429:53;;;3478:1;3475;3468:12;3429:53;3501:29;3520:9;3501:29;:::i;:::-;3491:39;;3549:38;3583:2;3572:9;3568:18;3549:38;:::i;:::-;3539:48;;3634:2;3623:9;3619:18;3606:32;3596:42;;3685:2;3674:9;3670:18;3657:32;3647:42;;3740:3;3729:9;3725:19;3712:33;3768:18;3760:6;3757:30;3754:50;;;3800:1;3797;3790:12;3754:50;3823:49;3864:7;3855:6;3844:9;3840:22;3823:49;:::i;3883:669::-;4010:6;4018;4026;4079:2;4067:9;4058:7;4054:23;4050:32;4047:52;;;4095:1;4092;4085:12;4047:52;4118:29;4137:9;4118:29;:::i;:::-;4108:39;;4198:2;4187:9;4183:18;4170:32;4221:18;4262:2;4254:6;4251:14;4248:34;;;4278:1;4275;4268:12;4248:34;4301:61;4354:7;4345:6;4334:9;4330:22;4301:61;:::i;:::-;4291:71;;4415:2;4404:9;4400:18;4387:32;4371:48;;4444:2;4434:8;4431:16;4428:36;;;4460:1;4457;4450:12;4428:36;;4483:63;4538:7;4527:8;4516:9;4512:24;4483:63;:::i;:::-;4473:73;;;3883:669;;;;;:::o;4557:1123::-;4752:6;4760;4768;4776;4784;4837:3;4825:9;4816:7;4812:23;4808:33;4805:53;;;4854:1;4851;4844:12;4805:53;4877:29;4896:9;4877:29;:::i;:::-;4867:39;;4957:2;4946:9;4942:18;4929:32;4980:18;5021:2;5013:6;5010:14;5007:34;;;5037:1;5034;5027:12;5007:34;5060:61;5113:7;5104:6;5093:9;5089:22;5060:61;:::i;:::-;5050:71;;5174:2;5163:9;5159:18;5146:32;5130:48;;5203:2;5193:8;5190:16;5187:36;;;5219:1;5216;5209:12;5187:36;5242:63;5297:7;5286:8;5275:9;5271:24;5242:63;:::i;:::-;5232:73;;5358:2;5347:9;5343:18;5330:32;5314:48;;5387:2;5377:8;5374:16;5371:36;;;5403:1;5400;5393:12;5371:36;5426:63;5481:7;5470:8;5459:9;5455:24;5426:63;:::i;:::-;5416:73;;5542:3;5531:9;5527:19;5514:33;5498:49;;5572:2;5562:8;5559:16;5556:36;;;5588:1;5585;5578:12;5556:36;;5611:63;5666:7;5655:8;5644:9;5640:24;5611:63;:::i;5685:315::-;5750:6;5758;5811:2;5799:9;5790:7;5786:23;5782:32;5779:52;;;5827:1;5824;5817:12;5779:52;5850:29;5869:9;5850:29;:::i;:::-;5840:39;;5929:2;5918:9;5914:18;5901:32;5942:28;5964:5;5942:28;:::i;:::-;5989:5;5979:15;;;5685:315;;;;;:::o;6005:254::-;6073:6;6081;6134:2;6122:9;6113:7;6109:23;6105:32;6102:52;;;6150:1;6147;6140:12;6102:52;6173:29;6192:9;6173:29;:::i;:::-;6163:39;6249:2;6234:18;;;;6221:32;;-1:-1:-1;;;6005:254:1:o;6264:322::-;6341:6;6349;6357;6410:2;6398:9;6389:7;6385:23;6381:32;6378:52;;;6426:1;6423;6416:12;6378:52;6449:29;6468:9;6449:29;:::i;:::-;6439:39;6525:2;6510:18;;6497:32;;-1:-1:-1;6576:2:1;6561:18;;;6548:32;;6264:322;-1:-1:-1;;;6264:322:1:o;6591:531::-;6686:6;6694;6702;6710;6763:3;6751:9;6742:7;6738:23;6734:33;6731:53;;;6780:1;6777;6770:12;6731:53;6803:29;6822:9;6803:29;:::i;:::-;6793:39;;6879:2;6868:9;6864:18;6851:32;6841:42;;6930:2;6919:9;6915:18;6902:32;6892:42;;6985:2;6974:9;6970:18;6957:32;7012:18;7004:6;7001:30;6998:50;;;7044:1;7041;7034:12;6998:50;7067:49;7108:7;7099:6;7088:9;7084:22;7067:49;:::i;:::-;7057:59;;;6591:531;;;;;;;:::o;7127:1219::-;7245:6;7253;7306:2;7294:9;7285:7;7281:23;7277:32;7274:52;;;7322:1;7319;7312:12;7274:52;7362:9;7349:23;7391:18;7432:2;7424:6;7421:14;7418:34;;;7448:1;7445;7438:12;7418:34;7486:6;7475:9;7471:22;7461:32;;7531:7;7524:4;7520:2;7516:13;7512:27;7502:55;;7553:1;7550;7543:12;7502:55;7589:2;7576:16;7611:4;7634:43;7674:2;7634:43;:::i;:::-;7706:2;7700:9;7718:31;7746:2;7738:6;7718:31;:::i;:::-;7784:18;;;7818:15;;;;-1:-1:-1;7853:11:1;;;7895:1;7891:10;;;7883:19;;7879:28;;7876:41;-1:-1:-1;7873:61:1;;;7930:1;7927;7920:12;7873:61;7952:1;7943:10;;7962:169;7976:2;7973:1;7970:9;7962:169;;;8033:23;8052:3;8033:23;:::i;:::-;8021:36;;7994:1;7987:9;;;;;8077:12;;;;8109;;7962:169;;;-1:-1:-1;8150:6:1;-1:-1:-1;;8194:18:1;;8181:32;;-1:-1:-1;;8225:16:1;;;8222:36;;;8254:1;8251;8244:12;8222:36;;8277:63;8332:7;8321:8;8310:9;8306:24;8277:63;:::i;:::-;8267:73;;;7127:1219;;;;;:::o;8351:595::-;8469:6;8477;8530:2;8518:9;8509:7;8505:23;8501:32;8498:52;;;8546:1;8543;8536:12;8498:52;8586:9;8573:23;8615:18;8656:2;8648:6;8645:14;8642:34;;;8672:1;8669;8662:12;8642:34;8695:61;8748:7;8739:6;8728:9;8724:22;8695:61;:::i;:::-;8685:71;;8809:2;8798:9;8794:18;8781:32;8765:48;;8838:2;8828:8;8825:16;8822:36;;;8854:1;8851;8844:12;8951:245;9018:6;9071:2;9059:9;9050:7;9046:23;9042:32;9039:52;;;9087:1;9084;9077:12;9039:52;9119:9;9113:16;9138:28;9160:5;9138:28;:::i;9201:670::-;9295:6;9303;9311;9364:2;9352:9;9343:7;9339:23;9335:32;9332:52;;;9380:1;9377;9370:12;9332:52;9419:9;9406:23;9438:28;9460:5;9438:28;:::i;:::-;9485:5;-1:-1:-1;9541:2:1;9526:18;;9513:32;9564:18;9594:14;;;9591:34;;;9621:1;9618;9611:12;9591:34;9644:49;9685:7;9676:6;9665:9;9661:22;9644:49;:::i;:::-;9634:59;;9746:2;9735:9;9731:18;9718:32;9702:48;;9775:2;9765:8;9762:16;9759:36;;;9791:1;9788;9781:12;9759:36;;9814:51;9857:7;9846:8;9835:9;9831:24;9814:51;:::i;9876:245::-;9934:6;9987:2;9975:9;9966:7;9962:23;9958:32;9955:52;;;10003:1;10000;9993:12;9955:52;10042:9;10029:23;10061:30;10085:5;10061:30;:::i;10126:249::-;10195:6;10248:2;10236:9;10227:7;10223:23;10219:32;10216:52;;;10264:1;10261;10254:12;10216:52;10296:9;10290:16;10315:30;10339:5;10315:30;:::i;10380:1160::-;10511:6;10519;10527;10535;10543;10551;10559;10567;10620:3;10608:9;10599:7;10595:23;10591:33;10588:53;;;10637:1;10634;10627:12;10588:53;10677:9;10664:23;10706:18;10747:2;10739:6;10736:14;10733:34;;;10763:1;10760;10753:12;10733:34;10802:59;10853:7;10844:6;10833:9;10829:22;10802:59;:::i;:::-;10880:8;;-1:-1:-1;10776:85:1;-1:-1:-1;10968:2:1;10953:18;;10940:32;;-1:-1:-1;10984:16:1;;;10981:36;;;11013:1;11010;11003:12;10981:36;11052:61;11105:7;11094:8;11083:9;11079:24;11052:61;:::i;:::-;11132:8;;-1:-1:-1;11026:87:1;-1:-1:-1;11220:2:1;11205:18;;11192:32;;-1:-1:-1;11236:16:1;;;11233:36;;;11265:1;11262;11255:12;11233:36;;11304:61;11357:7;11346:8;11335:9;11331:24;11304:61;:::i;:::-;11384:8;;-1:-1:-1;11278:87:1;-1:-1:-1;11438:38:1;;-1:-1:-1;11472:2:1;11457:18;;11438:38;:::i;:::-;11428:48;;11495:39;11529:3;11518:9;11514:19;11495:39;:::i;:::-;11485:49;;10380:1160;;;;;;;;;;;:::o;11545:321::-;11614:6;11667:2;11655:9;11646:7;11642:23;11638:32;11635:52;;;11683:1;11680;11673:12;11635:52;11723:9;11710:23;11756:18;11748:6;11745:30;11742:50;;;11788:1;11785;11778:12;11742:50;11811:49;11852:7;11843:6;11832:9;11828:22;11811:49;:::i;11871:180::-;11930:6;11983:2;11971:9;11962:7;11958:23;11954:32;11951:52;;;11999:1;11996;11989:12;11951:52;-1:-1:-1;12022:23:1;;11871:180;-1:-1:-1;11871:180:1:o;12056:389::-;12134:6;12142;12195:2;12183:9;12174:7;12170:23;12166:32;12163:52;;;12211:1;12208;12201:12;12163:52;12247:9;12234:23;12224:33;;12308:2;12297:9;12293:18;12280:32;12335:18;12327:6;12324:30;12321:50;;;12367:1;12364;12357:12;12321:50;12390:49;12431:7;12422:6;12411:9;12407:22;12390:49;:::i;12450:248::-;12518:6;12526;12579:2;12567:9;12558:7;12554:23;12550:32;12547:52;;;12595:1;12592;12585:12;12547:52;-1:-1:-1;;12618:23:1;;;12688:2;12673:18;;;12660:32;;-1:-1:-1;12450:248:1:o;12703:435::-;12756:3;12794:5;12788:12;12821:6;12816:3;12809:19;12847:4;12876:2;12871:3;12867:12;12860:19;;12913:2;12906:5;12902:14;12934:1;12944:169;12958:6;12955:1;12952:13;12944:169;;;13019:13;;13007:26;;13053:12;;;;13088:15;;;;12980:1;12973:9;12944:169;;;-1:-1:-1;13129:3:1;;12703:435;-1:-1:-1;;;;;12703:435:1:o;13143:257::-;13184:3;13222:5;13216:12;13249:6;13244:3;13237:19;13265:63;13321:6;13314:4;13309:3;13305:14;13298:4;13291:5;13287:16;13265:63;:::i;:::-;13382:2;13361:15;-1:-1:-1;;13357:29:1;13348:39;;;;13389:4;13344:50;;13143:257;-1:-1:-1;;13143:257:1:o;13405:1030::-;13490:12;;13455:3;;13545:1;13565:18;;;;13618;;;;13645:61;;13699:4;13691:6;13687:17;13677:27;;13645:61;13725:2;13773;13765:6;13762:14;13742:18;13739:38;13736:218;;;-1:-1:-1;;;13807:1:1;13800:88;13911:4;13908:1;13901:15;13939:4;13936:1;13929:15;13736:218;13970:18;13997:104;;;;14115:1;14110:319;;;;13963:466;;13997:104;-1:-1:-1;;14030:24:1;;14018:37;;14075:16;;;;-1:-1:-1;13997:104:1;;14110:319;27470:1;27463:14;;;27507:4;27494:18;;14204:1;14218:165;14232:6;14229:1;14226:13;14218:165;;;14310:14;;14297:11;;;14290:35;14353:16;;;;14247:10;;14218:165;;;14222:3;;14412:6;14407:3;14403:16;14396:23;;13963:466;;;;;;;13405:1030;;;;:::o;14440:456::-;14661:3;14689:38;14723:3;14715:6;14689:38;:::i;:::-;14756:6;14750:13;14772:52;14817:6;14813:2;14806:4;14798:6;14794:17;14772:52;:::i;:::-;14840:50;14882:6;14878:2;14874:15;14866:6;14840:50;:::i;:::-;14833:57;14440:456;-1:-1:-1;;;;;;;14440:456:1:o;14901:1140::-;15420:3;15448:38;15482:3;15474:6;15448:38;:::i;:::-;15515:6;15509:13;15531:52;15576:6;15572:2;15565:4;15557:6;15553:17;15531:52;:::i;:::-;15639:3;15605:15;;15651:17;;;15693:13;;15605:15;;15639:3;15715:65;15693:13;15767:1;15756:13;;15749:4;15737:17;;15715:65;:::i;:::-;15843:1;15799:20;;15835:10;;;15828:22;15875:13;;15897:62;15875:13;15946:1;15938:10;;15931:4;15919:17;;15897:62;:::i;:::-;15975:60;16032:1;16021:8;16017:2;16013:17;16009:25;16001:6;15975:60;:::i;:::-;15968:67;14901:1140;-1:-1:-1;;;;;;;;;14901:1140:1:o;16277:849::-;16599:4;-1:-1:-1;;;;;16709:2:1;16701:6;16697:15;16686:9;16679:34;16761:2;16753:6;16749:15;16744:2;16733:9;16729:18;16722:43;;16801:3;16796:2;16785:9;16781:18;16774:31;16828:57;16880:3;16869:9;16865:19;16857:6;16828:57;:::i;:::-;16933:9;16925:6;16921:22;16916:2;16905:9;16901:18;16894:50;16967:44;17004:6;16996;16967:44;:::i;:::-;16953:58;;17060:9;17052:6;17048:22;17042:3;17031:9;17027:19;17020:51;17088:32;17113:6;17105;17088:32;:::i;:::-;17080:40;16277:849;-1:-1:-1;;;;;;;;16277:849:1:o;17131:583::-;17353:4;-1:-1:-1;;;;;17463:2:1;17455:6;17451:15;17440:9;17433:34;17515:2;17507:6;17503:15;17498:2;17487:9;17483:18;17476:43;;17555:6;17550:2;17539:9;17535:18;17528:34;17598:6;17593:2;17582:9;17578:18;17571:34;17642:3;17636;17625:9;17621:19;17614:32;17663:45;17703:3;17692:9;17688:19;17680:6;17663:45;:::i;17719:681::-;17890:2;17942:21;;;18012:13;;17915:18;;;18034:22;;;17861:4;;17890:2;18113:15;;;;18087:2;18072:18;;;17861:4;18156:218;18170:6;18167:1;18164:13;18156:218;;;18235:13;;-1:-1:-1;;;;;18231:62:1;18219:75;;18349:15;;;;18314:12;;;;18192:1;18185:9;18156:218;;;-1:-1:-1;18391:3:1;;17719:681;-1:-1:-1;;;;;;17719:681:1:o;18405:261::-;18584:2;18573:9;18566:21;18547:4;18604:56;18656:2;18645:9;18641:18;18633:6;18604:56;:::i;18671:465::-;18928:2;18917:9;18910:21;18891:4;18954:56;19006:2;18995:9;18991:18;18983:6;18954:56;:::i;:::-;19058:9;19050:6;19046:22;19041:2;19030:9;19026:18;19019:50;19086:44;19123:6;19115;19086:44;:::i;:::-;19078:52;18671:465;-1:-1:-1;;;;;18671:465:1:o;19333:219::-;19482:2;19471:9;19464:21;19445:4;19502:44;19542:2;19531:9;19527:18;19519:6;19502:44;:::i;27209:183::-;27269:4;27302:18;27294:6;27291:30;27288:56;;;27324:18;;:::i;:::-;-1:-1:-1;27369:1:1;27365:14;27381:4;27361:25;;27209:183::o;27523:128::-;27563:3;27594:1;27590:6;27587:1;27584:13;27581:39;;;27600:18;;:::i;:::-;-1:-1:-1;27636:9:1;;27523:128::o;27656:120::-;27696:1;27722;27712:35;;27727:18;;:::i;:::-;-1:-1:-1;27761:9:1;;27656:120::o;27781:168::-;27821:7;27887:1;27883;27879:6;27875:14;27872:1;27869:21;27864:1;27857:9;27850:17;27846:45;27843:71;;;27894:18;;:::i;:::-;-1:-1:-1;27934:9:1;;27781:168::o;27954:125::-;27994:4;28022:1;28019;28016:8;28013:34;;;28027:18;;:::i;:::-;-1:-1:-1;28064:9:1;;27954:125::o;28084:258::-;28156:1;28166:113;28180:6;28177:1;28174:13;28166:113;;;28256:11;;;28250:18;28237:11;;;28230:39;28202:2;28195:10;28166:113;;;28297:6;28294:1;28291:13;28288:48;;;-1:-1:-1;;28332:1:1;28314:16;;28307:27;28084:258::o;28347:136::-;28386:3;28414:5;28404:39;;28423:18;;:::i;:::-;-1:-1:-1;;;28459:18:1;;28347:136::o;28488:437::-;28567:1;28563:12;;;;28610;;;28631:61;;28685:4;28677:6;28673:17;28663:27;;28631:61;28738:2;28730:6;28727:14;28707:18;28704:38;28701:218;;;-1:-1:-1;;;28772:1:1;28765:88;28876:4;28873:1;28866:15;28904:4;28901:1;28894:15;28701:218;;28488:437;;;:::o;28930:249::-;29040:2;29021:13;;-1:-1:-1;;29017:27:1;29005:40;;29075:18;29060:34;;29096:22;;;29057:62;29054:88;;;29122:18;;:::i;:::-;29158:2;29151:22;-1:-1:-1;;28930:249:1:o;29184:135::-;29223:3;-1:-1:-1;;29244:17:1;;29241:43;;;29264:18;;:::i;:::-;-1:-1:-1;29311:1:1;29300:13;;29184:135::o;29324:112::-;29356:1;29382;29372:35;;29387:18;;:::i;:::-;-1:-1:-1;29421:9:1;;29324:112::o;29441:184::-;-1:-1:-1;;;29490:1:1;29483:88;29590:4;29587:1;29580:15;29614:4;29611:1;29604:15;29630:184;-1:-1:-1;;;29679:1:1;29672:88;29779:4;29776:1;29769:15;29803:4;29800:1;29793:15;29819:184;-1:-1:-1;;;29868:1:1;29861:88;29968:4;29965:1;29958:15;29992:4;29989:1;29982:15;30008:184;-1:-1:-1;;;30057:1:1;30050:88;30157:4;30154:1;30147:15;30181:4;30178:1;30171:15;30197:179;30232:3;30274:1;30256:16;30253:23;30250:120;;;30320:1;30317;30314;30299:23;-1:-1:-1;30357:1:1;30351:8;30346:3;30342:18;30250:120;30197:179;:::o;30381:671::-;30420:3;30462:4;30444:16;30441:26;30438:39;;;30381:671;:::o;30438:39::-;30504:2;30498:9;-1:-1:-1;;30569:16:1;30565:25;;30562:1;30498:9;30541:50;30620:4;30614:11;30644:16;30679:18;30750:2;30743:4;30735:6;30731:17;30728:25;30723:2;30715:6;30712:14;30709:45;30706:58;;;30757:5;;;;;30381:671;:::o;30706:58::-;30794:6;30788:4;30784:17;30773:28;;30830:3;30824:10;30857:2;30849:6;30846:14;30843:27;;;30863:5;;;;;;30381:671;:::o;30843:27::-;30947:2;30928:16;30922:4;30918:27;30914:36;30907:4;30898:6;30893:3;30889:16;30885:27;30882:69;30879:82;;;30954:5;;;;;;30381:671;:::o;30879:82::-;30970:57;31021:4;31012:6;31004;31000:19;30996:30;30990:4;30970:57;:::i;:::-;-1:-1:-1;31043:3:1;;30381:671;-1:-1:-1;;;;;30381:671:1:o;31057:118::-;31143:5;31136:13;31129:21;31122:5;31119:32;31109:60;;31165:1;31162;31155:12;31180:177;-1:-1:-1;;;;;;31258:5:1;31254:78;31247:5;31244:89;31234:117;;31347:1;31344;31337:12
Swarm Source
ipfs://002671ad4fd2c9a14aec337b407798d3186b1e61e0eef9fd4b1934fb66be2ea6
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.