Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
0 KRONIC
Holders
64
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KronicKatz
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-22 */ // SPDX-License-Identifier: MIT // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** ██ ██ ██████ ██████ ███ ██ ██ ██████ ██ ██ █████ ████████ ███████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ███ █████ ██████ ██ ██ ██ ██ ██ ██ ██ █████ ███████ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ ██████ ██ ████ ██ ██████ ██ ██ ██ ██ ██ ███████ */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.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 Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/KronicKatz.sol pragma solidity ^0.8.0; contract KronicKatz is ERC1155, Ownable { string public name; string public symbol; mapping(uint => string) public tokenURI; constructor() ERC1155("") { name = "KronicKatz"; symbol = "KRONIC"; } function mint(address _to, uint _id, uint _amount) external onlyOwner { _mint(_to, _id, _amount, ""); } function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner { _mintBatch(_to, _ids, _amounts, ""); } function burn(uint _id, uint _amount) external { _burn(msg.sender, _id, _amount); } function burnBatch(uint[] memory _ids, uint[] memory _amounts) external { _burnBatch(msg.sender, _ids, _amounts); } function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner { _burnBatch(_from, _burnIds, _burnAmounts); _mintBatch(_from, _mintIds, _mintAmounts, ""); } function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","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":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600a81526020017f4b726f6e69634b61747a0000000000000000000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600681526020017f4b524f4e4943000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f4565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee90620002bf565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d857607f821691505b602082108103620002ee57620002ed62000290565b5b50919050565b613ed880620003046000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a6004803603810190610145919061265a565b6103cc565b60405161015791906126a9565b60405180910390f35b61017a6004803603810190610175919061271c565b610494565b6040516101879190612764565b60405180910390f35b610198610576565b6040516101a59190612818565b60405180910390f35b6101c860048036038101906101c3919061283a565b610604565b6040516101d59190612818565b60405180910390f35b6101f860048036038101906101f39190612867565b6106a9565b005b610214600480360381019061020f9190612ab7565b610745565b005b610230600480360381019061022b9190612c49565b6107e6565b60405161023d9190612d7f565b60405180910390f35b610260600480360381019061025b9190612da1565b6108ff565b005b61026a6109a8565b005b61028660048036038101906102819190612e8c565b610a30565b005b6102a2600480360381019061029d9190612fa5565b610a3f565b005b6102ac610b1f565b6040516102b99190613010565b60405180910390f35b6102ca610b49565b6040516102d79190612818565b60405180910390f35b6102fa60048036038101906102f59190613057565b610bd7565b005b61031660048036038101906103119190613097565b610bed565b005b610332600480360381019061032d919061283a565b610bfc565b60405161033f9190612818565b60405180910390f35b610362600480360381019061035d91906130d7565b610c9c565b005b61037e60048036038101906103799190613162565b610d38565b60405161038b9190612764565b60405180910390f35b6103ae60048036038101906103a991906131a2565b610dcc565b005b6103ca60048036038101906103c59190613239565b610e6d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361043c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610433906132d8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056f575061056e82610f64565b5b9050919050565b6004805461058390613327565b80601f01602080910402602001604051908101604052809291908181526020018280546105af90613327565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461062490613327565b80601f016020809104026020016040519081016040528092919081815260200182805461065090613327565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6106b1610fce565b73ffffffffffffffffffffffffffffffffffffffff166106cf610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071c906133a4565b60405180910390fd5b61074083838360405180602001604052806000815250610fd6565b505050565b61074d610fce565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079357506107928561078d610fce565b610d38565b5b6107d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c990613436565b60405180910390fd5b6107df8585858585611186565b5050505050565b6060815183511461082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610823906134c8565b60405180910390fd5b6000835167ffffffffffffffff811115610849576108486128bf565b5b6040519080825280602002602001820160405280156108775781602001602082028036833780820191505090505b50905060005b84518110156108f4576108c485828151811061089c5761089b6134e8565b5b60200260200101518583815181106108b7576108b66134e8565b5b60200260200101516103cc565b8282815181106108d7576108d66134e8565b5b602002602001018181525050806108ed90613546565b905061087d565b508091505092915050565b610907610fce565b73ffffffffffffffffffffffffffffffffffffffff16610925610b1f565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610972906133a4565b60405180910390fd5b6109868585856114a7565b6109a185838360405180602001604052806000815250611775565b5050505050565b6109b0610fce565b73ffffffffffffffffffffffffffffffffffffffff166109ce610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b906133a4565b60405180910390fd5b610a2e60006119a1565b565b610a3b3383836114a7565b5050565b610a47610fce565b73ffffffffffffffffffffffffffffffffffffffff16610a65610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab2906133a4565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae292919061250f565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b139190612818565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b5690613327565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290613327565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b505050505081565b610be9610be2610fce565b8383611a67565b5050565b610bf8338383611bd3565b5050565b60066020528060005260406000206000915090508054610c1b90613327565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4790613327565b8015610c945780601f10610c6957610100808354040283529160200191610c94565b820191906000526020600020905b815481529060010190602001808311610c7757829003601f168201915b505050505081565b610ca4610fce565b73ffffffffffffffffffffffffffffffffffffffff16610cc2610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906133a4565b60405180910390fd5b610d3383838360405180602001604052806000815250611775565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd4610fce565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1a5750610e1985610e14610fce565b610d38565b5b610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613600565b60405180910390fd5b610e668585858585611e19565b5050505050565b610e75610fce565b73ffffffffffffffffffffffffffffffffffffffff16610e93610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906133a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613692565b60405180910390fd5b610f61816119a1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90613724565b60405180910390fd5b600061104f610fce565b9050600061105c856120b4565b90506000611069856120b4565b905061107a8360008985858961212e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d99190613744565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161115792919061379a565b60405180910390a461116e83600089858589612136565b61117d8360008989898961213e565b50505050505050565b81518351146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613835565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906138c7565b60405180910390fd5b6000611243610fce565b905061125381878787878761212e565b60005b8451811015611404576000858281518110611274576112736134e8565b5b602002602001015190506000858381518110611293576112926134e8565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90613959565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e99190613744565b92505081905550505050806113fd90613546565b9050611256565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161147b929190613979565b60405180910390a4611491818787878787612136565b61149f818787878787612315565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613a22565b60405180910390fd5b805182511461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613835565b60405180910390fd5b6000611564610fce565b90506115848185600086866040518060200160405280600081525061212e565b60005b83518110156116d15760008482815181106115a5576115a46134e8565b5b6020026020010151905060008483815181106115c4576115c36134e8565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90613ab4565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116c990613546565b915050611587565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611749929190613979565b60405180910390a461176f81856000868660405180602001604052806000815250612136565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613724565b60405180910390fd5b8151835114611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613835565b60405180910390fd5b6000611832610fce565b90506118438160008787878761212e565b60005b84518110156118fc57838181518110611862576118616134e8565b5b60200260200101516000808784815181106118805761187f6134e8565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e29190613744565b9250508190555080806118f490613546565b915050611846565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611974929190613979565b60405180910390a461198b81600087878787612136565b61199a81600087878787612315565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613b46565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc69190612764565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613a22565b60405180910390fd5b6000611c4c610fce565b90506000611c59846120b4565b90506000611c66846120b4565b9050611c868387600085856040518060200160405280600081525061212e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613ab4565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611dea92919061379a565b60405180910390a4611e1084886000868660405180602001604052806000815250612136565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906138c7565b60405180910390fd5b6000611e92610fce565b90506000611e9f856120b4565b90506000611eac856120b4565b9050611ebc83898985858961212e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90613959565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120089190613744565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161208592919061379a565b60405180910390a461209b848a8a86868a612136565b6120a9848a8a8a8a8a61213e565b505050505050505050565b60606000600167ffffffffffffffff8111156120d3576120d26128bf565b5b6040519080825280602002602001820160405280156121015781602001602082028036833780820191505090505b5090508281600081518110612119576121186134e8565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b61215d8473ffffffffffffffffffffffffffffffffffffffff166124ec565b1561230d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121a3959493929190613bbb565b6020604051808303816000875af19250505080156121df57506040513d601f19601f820116820180604052508101906121dc9190613c2a565b60015b612284576121eb613c64565b806308c379a00361224757506121ff613c86565b8061220a5750612249565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e9190612818565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613d88565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290613e1a565b60405180910390fd5b505b505050505050565b6123348473ffffffffffffffffffffffffffffffffffffffff166124ec565b156124e4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161237a959493929190613e3a565b6020604051808303816000875af19250505080156123b657506040513d601f19601f820116820180604052508101906123b39190613c2a565b60015b61245b576123c2613c64565b806308c379a00361241e57506123d6613c86565b806123e15750612420565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124159190612818565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290613d88565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990613e1a565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461251b90613327565b90600052602060002090601f01602090048101928261253d5760008555612584565b82601f1061255657805160ff1916838001178555612584565b82800160010185558215612584579182015b82811115612583578251825591602001919060010190612568565b5b5090506125919190612595565b5090565b5b808211156125ae576000816000905550600101612596565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125f1826125c6565b9050919050565b612601816125e6565b811461260c57600080fd5b50565b60008135905061261e816125f8565b92915050565b6000819050919050565b61263781612624565b811461264257600080fd5b50565b6000813590506126548161262e565b92915050565b60008060408385031215612671576126706125bc565b5b600061267f8582860161260f565b925050602061269085828601612645565b9150509250929050565b6126a381612624565b82525050565b60006020820190506126be600083018461269a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f9816126c4565b811461270457600080fd5b50565b600081359050612716816126f0565b92915050565b600060208284031215612732576127316125bc565b5b600061274084828501612707565b91505092915050565b60008115159050919050565b61275e81612749565b82525050565b60006020820190506127796000830184612755565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b957808201518184015260208101905061279e565b838111156127c8576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ea8261277f565b6127f4818561278a565b935061280481856020860161279b565b61280d816127ce565b840191505092915050565b6000602082019050818103600083015261283281846127df565b905092915050565b6000602082840312156128505761284f6125bc565b5b600061285e84828501612645565b91505092915050565b6000806000606084860312156128805761287f6125bc565b5b600061288e8682870161260f565b935050602061289f86828701612645565b92505060406128b086828701612645565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128f7826127ce565b810181811067ffffffffffffffff82111715612916576129156128bf565b5b80604052505050565b60006129296125b2565b905061293582826128ee565b919050565b600067ffffffffffffffff821115612955576129546128bf565b5b602082029050602081019050919050565b600080fd5b600061297e6129798461293a565b61291f565b905080838252602082019050602084028301858111156129a1576129a0612966565b5b835b818110156129ca57806129b68882612645565b8452602084019350506020810190506129a3565b5050509392505050565b600082601f8301126129e9576129e86128ba565b5b81356129f984826020860161296b565b91505092915050565b600080fd5b600067ffffffffffffffff821115612a2257612a216128bf565b5b612a2b826127ce565b9050602081019050919050565b82818337600083830152505050565b6000612a5a612a5584612a07565b61291f565b905082815260208101848484011115612a7657612a75612a02565b5b612a81848285612a38565b509392505050565b600082601f830112612a9e57612a9d6128ba565b5b8135612aae848260208601612a47565b91505092915050565b600080600080600060a08688031215612ad357612ad26125bc565b5b6000612ae18882890161260f565b9550506020612af28882890161260f565b945050604086013567ffffffffffffffff811115612b1357612b126125c1565b5b612b1f888289016129d4565b935050606086013567ffffffffffffffff811115612b4057612b3f6125c1565b5b612b4c888289016129d4565b925050608086013567ffffffffffffffff811115612b6d57612b6c6125c1565b5b612b7988828901612a89565b9150509295509295909350565b600067ffffffffffffffff821115612ba157612ba06128bf565b5b602082029050602081019050919050565b6000612bc5612bc084612b86565b61291f565b90508083825260208201905060208402830185811115612be857612be7612966565b5b835b81811015612c115780612bfd888261260f565b845260208401935050602081019050612bea565b5050509392505050565b600082601f830112612c3057612c2f6128ba565b5b8135612c40848260208601612bb2565b91505092915050565b60008060408385031215612c6057612c5f6125bc565b5b600083013567ffffffffffffffff811115612c7e57612c7d6125c1565b5b612c8a85828601612c1b565b925050602083013567ffffffffffffffff811115612cab57612caa6125c1565b5b612cb7858286016129d4565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cf681612624565b82525050565b6000612d088383612ced565b60208301905092915050565b6000602082019050919050565b6000612d2c82612cc1565b612d368185612ccc565b9350612d4183612cdd565b8060005b83811015612d72578151612d598882612cfc565b9750612d6483612d14565b925050600181019050612d45565b5085935050505092915050565b60006020820190508181036000830152612d998184612d21565b905092915050565b600080600080600060a08688031215612dbd57612dbc6125bc565b5b6000612dcb8882890161260f565b955050602086013567ffffffffffffffff811115612dec57612deb6125c1565b5b612df8888289016129d4565b945050604086013567ffffffffffffffff811115612e1957612e186125c1565b5b612e25888289016129d4565b935050606086013567ffffffffffffffff811115612e4657612e456125c1565b5b612e52888289016129d4565b925050608086013567ffffffffffffffff811115612e7357612e726125c1565b5b612e7f888289016129d4565b9150509295509295909350565b60008060408385031215612ea357612ea26125bc565b5b600083013567ffffffffffffffff811115612ec157612ec06125c1565b5b612ecd858286016129d4565b925050602083013567ffffffffffffffff811115612eee57612eed6125c1565b5b612efa858286016129d4565b9150509250929050565b600067ffffffffffffffff821115612f1f57612f1e6128bf565b5b612f28826127ce565b9050602081019050919050565b6000612f48612f4384612f04565b61291f565b905082815260208101848484011115612f6457612f63612a02565b5b612f6f848285612a38565b509392505050565b600082601f830112612f8c57612f8b6128ba565b5b8135612f9c848260208601612f35565b91505092915050565b60008060408385031215612fbc57612fbb6125bc565b5b6000612fca85828601612645565b925050602083013567ffffffffffffffff811115612feb57612fea6125c1565b5b612ff785828601612f77565b9150509250929050565b61300a816125e6565b82525050565b60006020820190506130256000830184613001565b92915050565b61303481612749565b811461303f57600080fd5b50565b6000813590506130518161302b565b92915050565b6000806040838503121561306e5761306d6125bc565b5b600061307c8582860161260f565b925050602061308d85828601613042565b9150509250929050565b600080604083850312156130ae576130ad6125bc565b5b60006130bc85828601612645565b92505060206130cd85828601612645565b9150509250929050565b6000806000606084860312156130f0576130ef6125bc565b5b60006130fe8682870161260f565b935050602084013567ffffffffffffffff81111561311f5761311e6125c1565b5b61312b868287016129d4565b925050604084013567ffffffffffffffff81111561314c5761314b6125c1565b5b613158868287016129d4565b9150509250925092565b60008060408385031215613179576131786125bc565b5b60006131878582860161260f565b92505060206131988582860161260f565b9150509250929050565b600080600080600060a086880312156131be576131bd6125bc565b5b60006131cc8882890161260f565b95505060206131dd8882890161260f565b94505060406131ee88828901612645565b93505060606131ff88828901612645565b925050608086013567ffffffffffffffff8111156132205761321f6125c1565b5b61322c88828901612a89565b9150509295509295909350565b60006020828403121561324f5761324e6125bc565b5b600061325d8482850161260f565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006132c2602b8361278a565b91506132cd82613266565b604082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333f57607f821691505b602082108103613352576133516132f8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338e60208361278a565b915061339982613358565b602082019050919050565b600060208201905081810360008301526133bd81613381565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061342060328361278a565b915061342b826133c4565b604082019050919050565b6000602082019050818103600083015261344f81613413565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006134b260298361278a565b91506134bd82613456565b604082019050919050565b600060208201905081810360008301526134e1816134a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061355182612624565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361358357613582613517565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006135ea60298361278a565b91506135f58261358e565b604082019050919050565b60006020820190508181036000830152613619816135dd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061367c60268361278a565b915061368782613620565b604082019050919050565b600060208201905081810360008301526136ab8161366f565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061370e60218361278a565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b600061374f82612624565b915061375a83612624565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561378f5761378e613517565b5b828201905092915050565b60006040820190506137af600083018561269a565b6137bc602083018461269a565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061381f60288361278a565b915061382a826137c3565b604082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006138b160258361278a565b91506138bc82613855565b604082019050919050565b600060208201905081810360008301526138e0816138a4565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613943602a8361278a565b915061394e826138e7565b604082019050919050565b6000602082019050818103600083015261397281613936565b9050919050565b600060408201905081810360008301526139938185612d21565b905081810360208301526139a78184612d21565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a0c60238361278a565b9150613a17826139b0565b604082019050919050565b60006020820190508181036000830152613a3b816139ff565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613a9e60248361278a565b9150613aa982613a42565b604082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613b3060298361278a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b8d82613b66565b613b978185613b71565b9350613ba781856020860161279b565b613bb0816127ce565b840191505092915050565b600060a082019050613bd06000830188613001565b613bdd6020830187613001565b613bea604083018661269a565b613bf7606083018561269a565b8181036080830152613c098184613b82565b90509695505050505050565b600081519050613c24816126f0565b92915050565b600060208284031215613c4057613c3f6125bc565b5b6000613c4e84828501613c15565b91505092915050565b60008160e01c9050919050565b600060033d1115613c835760046000803e613c80600051613c57565b90505b90565b600060443d10613d1357613c986125b2565b60043d036004823e80513d602482011167ffffffffffffffff82111715613cc0575050613d13565b808201805167ffffffffffffffff811115613cde5750505050613d13565b80602083010160043d038501811115613cfb575050505050613d13565b613d0a826020018501866128ee565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613d7260348361278a565b9150613d7d82613d16565b604082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613e0460288361278a565b9150613e0f82613da8565b604082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b600060a082019050613e4f6000830188613001565b613e5c6020830187613001565b8181036040830152613e6e8186612d21565b90508181036060830152613e828185612d21565b90508181036080830152613e968184613b82565b9050969550505050505056fea2646970667358221220603fe5ffbf86bc6b3425d570a71c470c620191ee6e1a4b4a9c4ec51740f0aa1964736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a6004803603810190610145919061265a565b6103cc565b60405161015791906126a9565b60405180910390f35b61017a6004803603810190610175919061271c565b610494565b6040516101879190612764565b60405180910390f35b610198610576565b6040516101a59190612818565b60405180910390f35b6101c860048036038101906101c3919061283a565b610604565b6040516101d59190612818565b60405180910390f35b6101f860048036038101906101f39190612867565b6106a9565b005b610214600480360381019061020f9190612ab7565b610745565b005b610230600480360381019061022b9190612c49565b6107e6565b60405161023d9190612d7f565b60405180910390f35b610260600480360381019061025b9190612da1565b6108ff565b005b61026a6109a8565b005b61028660048036038101906102819190612e8c565b610a30565b005b6102a2600480360381019061029d9190612fa5565b610a3f565b005b6102ac610b1f565b6040516102b99190613010565b60405180910390f35b6102ca610b49565b6040516102d79190612818565b60405180910390f35b6102fa60048036038101906102f59190613057565b610bd7565b005b61031660048036038101906103119190613097565b610bed565b005b610332600480360381019061032d919061283a565b610bfc565b60405161033f9190612818565b60405180910390f35b610362600480360381019061035d91906130d7565b610c9c565b005b61037e60048036038101906103799190613162565b610d38565b60405161038b9190612764565b60405180910390f35b6103ae60048036038101906103a991906131a2565b610dcc565b005b6103ca60048036038101906103c59190613239565b610e6d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361043c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610433906132d8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056f575061056e82610f64565b5b9050919050565b6004805461058390613327565b80601f01602080910402602001604051908101604052809291908181526020018280546105af90613327565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461062490613327565b80601f016020809104026020016040519081016040528092919081815260200182805461065090613327565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6106b1610fce565b73ffffffffffffffffffffffffffffffffffffffff166106cf610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071c906133a4565b60405180910390fd5b61074083838360405180602001604052806000815250610fd6565b505050565b61074d610fce565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079357506107928561078d610fce565b610d38565b5b6107d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c990613436565b60405180910390fd5b6107df8585858585611186565b5050505050565b6060815183511461082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610823906134c8565b60405180910390fd5b6000835167ffffffffffffffff811115610849576108486128bf565b5b6040519080825280602002602001820160405280156108775781602001602082028036833780820191505090505b50905060005b84518110156108f4576108c485828151811061089c5761089b6134e8565b5b60200260200101518583815181106108b7576108b66134e8565b5b60200260200101516103cc565b8282815181106108d7576108d66134e8565b5b602002602001018181525050806108ed90613546565b905061087d565b508091505092915050565b610907610fce565b73ffffffffffffffffffffffffffffffffffffffff16610925610b1f565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610972906133a4565b60405180910390fd5b6109868585856114a7565b6109a185838360405180602001604052806000815250611775565b5050505050565b6109b0610fce565b73ffffffffffffffffffffffffffffffffffffffff166109ce610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b906133a4565b60405180910390fd5b610a2e60006119a1565b565b610a3b3383836114a7565b5050565b610a47610fce565b73ffffffffffffffffffffffffffffffffffffffff16610a65610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab2906133a4565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae292919061250f565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b139190612818565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b5690613327565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290613327565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b505050505081565b610be9610be2610fce565b8383611a67565b5050565b610bf8338383611bd3565b5050565b60066020528060005260406000206000915090508054610c1b90613327565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4790613327565b8015610c945780601f10610c6957610100808354040283529160200191610c94565b820191906000526020600020905b815481529060010190602001808311610c7757829003601f168201915b505050505081565b610ca4610fce565b73ffffffffffffffffffffffffffffffffffffffff16610cc2610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906133a4565b60405180910390fd5b610d3383838360405180602001604052806000815250611775565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd4610fce565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1a5750610e1985610e14610fce565b610d38565b5b610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613600565b60405180910390fd5b610e668585858585611e19565b5050505050565b610e75610fce565b73ffffffffffffffffffffffffffffffffffffffff16610e93610b1f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906133a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613692565b60405180910390fd5b610f61816119a1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90613724565b60405180910390fd5b600061104f610fce565b9050600061105c856120b4565b90506000611069856120b4565b905061107a8360008985858961212e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d99190613744565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161115792919061379a565b60405180910390a461116e83600089858589612136565b61117d8360008989898961213e565b50505050505050565b81518351146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613835565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906138c7565b60405180910390fd5b6000611243610fce565b905061125381878787878761212e565b60005b8451811015611404576000858281518110611274576112736134e8565b5b602002602001015190506000858381518110611293576112926134e8565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90613959565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e99190613744565b92505081905550505050806113fd90613546565b9050611256565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161147b929190613979565b60405180910390a4611491818787878787612136565b61149f818787878787612315565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613a22565b60405180910390fd5b805182511461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613835565b60405180910390fd5b6000611564610fce565b90506115848185600086866040518060200160405280600081525061212e565b60005b83518110156116d15760008482815181106115a5576115a46134e8565b5b6020026020010151905060008483815181106115c4576115c36134e8565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90613ab4565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116c990613546565b915050611587565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611749929190613979565b60405180910390a461176f81856000868660405180602001604052806000815250612136565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613724565b60405180910390fd5b8151835114611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613835565b60405180910390fd5b6000611832610fce565b90506118438160008787878761212e565b60005b84518110156118fc57838181518110611862576118616134e8565b5b60200260200101516000808784815181106118805761187f6134e8565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e29190613744565b9250508190555080806118f490613546565b915050611846565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611974929190613979565b60405180910390a461198b81600087878787612136565b61199a81600087878787612315565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90613b46565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bc69190612764565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613a22565b60405180910390fd5b6000611c4c610fce565b90506000611c59846120b4565b90506000611c66846120b4565b9050611c868387600085856040518060200160405280600081525061212e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613ab4565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611dea92919061379a565b60405180910390a4611e1084886000868660405180602001604052806000815250612136565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906138c7565b60405180910390fd5b6000611e92610fce565b90506000611e9f856120b4565b90506000611eac856120b4565b9050611ebc83898985858961212e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90613959565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120089190613744565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161208592919061379a565b60405180910390a461209b848a8a86868a612136565b6120a9848a8a8a8a8a61213e565b505050505050505050565b60606000600167ffffffffffffffff8111156120d3576120d26128bf565b5b6040519080825280602002602001820160405280156121015781602001602082028036833780820191505090505b5090508281600081518110612119576121186134e8565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b61215d8473ffffffffffffffffffffffffffffffffffffffff166124ec565b1561230d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121a3959493929190613bbb565b6020604051808303816000875af19250505080156121df57506040513d601f19601f820116820180604052508101906121dc9190613c2a565b60015b612284576121eb613c64565b806308c379a00361224757506121ff613c86565b8061220a5750612249565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e9190612818565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613d88565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290613e1a565b60405180910390fd5b505b505050505050565b6123348473ffffffffffffffffffffffffffffffffffffffff166124ec565b156124e4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161237a959493929190613e3a565b6020604051808303816000875af19250505080156123b657506040513d601f19601f820116820180604052508101906123b39190613c2a565b60015b61245b576123c2613c64565b806308c379a00361241e57506123d6613c86565b806123e15750612420565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124159190612818565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290613d88565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990613e1a565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461251b90613327565b90600052602060002090601f01602090048101928261253d5760008555612584565b82601f1061255657805160ff1916838001178555612584565b82800160010185558215612584579182015b82811115612583578251825591602001919060010190612568565b5b5090506125919190612595565b5090565b5b808211156125ae576000816000905550600101612596565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125f1826125c6565b9050919050565b612601816125e6565b811461260c57600080fd5b50565b60008135905061261e816125f8565b92915050565b6000819050919050565b61263781612624565b811461264257600080fd5b50565b6000813590506126548161262e565b92915050565b60008060408385031215612671576126706125bc565b5b600061267f8582860161260f565b925050602061269085828601612645565b9150509250929050565b6126a381612624565b82525050565b60006020820190506126be600083018461269a565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f9816126c4565b811461270457600080fd5b50565b600081359050612716816126f0565b92915050565b600060208284031215612732576127316125bc565b5b600061274084828501612707565b91505092915050565b60008115159050919050565b61275e81612749565b82525050565b60006020820190506127796000830184612755565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127b957808201518184015260208101905061279e565b838111156127c8576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ea8261277f565b6127f4818561278a565b935061280481856020860161279b565b61280d816127ce565b840191505092915050565b6000602082019050818103600083015261283281846127df565b905092915050565b6000602082840312156128505761284f6125bc565b5b600061285e84828501612645565b91505092915050565b6000806000606084860312156128805761287f6125bc565b5b600061288e8682870161260f565b935050602061289f86828701612645565b92505060406128b086828701612645565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128f7826127ce565b810181811067ffffffffffffffff82111715612916576129156128bf565b5b80604052505050565b60006129296125b2565b905061293582826128ee565b919050565b600067ffffffffffffffff821115612955576129546128bf565b5b602082029050602081019050919050565b600080fd5b600061297e6129798461293a565b61291f565b905080838252602082019050602084028301858111156129a1576129a0612966565b5b835b818110156129ca57806129b68882612645565b8452602084019350506020810190506129a3565b5050509392505050565b600082601f8301126129e9576129e86128ba565b5b81356129f984826020860161296b565b91505092915050565b600080fd5b600067ffffffffffffffff821115612a2257612a216128bf565b5b612a2b826127ce565b9050602081019050919050565b82818337600083830152505050565b6000612a5a612a5584612a07565b61291f565b905082815260208101848484011115612a7657612a75612a02565b5b612a81848285612a38565b509392505050565b600082601f830112612a9e57612a9d6128ba565b5b8135612aae848260208601612a47565b91505092915050565b600080600080600060a08688031215612ad357612ad26125bc565b5b6000612ae18882890161260f565b9550506020612af28882890161260f565b945050604086013567ffffffffffffffff811115612b1357612b126125c1565b5b612b1f888289016129d4565b935050606086013567ffffffffffffffff811115612b4057612b3f6125c1565b5b612b4c888289016129d4565b925050608086013567ffffffffffffffff811115612b6d57612b6c6125c1565b5b612b7988828901612a89565b9150509295509295909350565b600067ffffffffffffffff821115612ba157612ba06128bf565b5b602082029050602081019050919050565b6000612bc5612bc084612b86565b61291f565b90508083825260208201905060208402830185811115612be857612be7612966565b5b835b81811015612c115780612bfd888261260f565b845260208401935050602081019050612bea565b5050509392505050565b600082601f830112612c3057612c2f6128ba565b5b8135612c40848260208601612bb2565b91505092915050565b60008060408385031215612c6057612c5f6125bc565b5b600083013567ffffffffffffffff811115612c7e57612c7d6125c1565b5b612c8a85828601612c1b565b925050602083013567ffffffffffffffff811115612cab57612caa6125c1565b5b612cb7858286016129d4565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cf681612624565b82525050565b6000612d088383612ced565b60208301905092915050565b6000602082019050919050565b6000612d2c82612cc1565b612d368185612ccc565b9350612d4183612cdd565b8060005b83811015612d72578151612d598882612cfc565b9750612d6483612d14565b925050600181019050612d45565b5085935050505092915050565b60006020820190508181036000830152612d998184612d21565b905092915050565b600080600080600060a08688031215612dbd57612dbc6125bc565b5b6000612dcb8882890161260f565b955050602086013567ffffffffffffffff811115612dec57612deb6125c1565b5b612df8888289016129d4565b945050604086013567ffffffffffffffff811115612e1957612e186125c1565b5b612e25888289016129d4565b935050606086013567ffffffffffffffff811115612e4657612e456125c1565b5b612e52888289016129d4565b925050608086013567ffffffffffffffff811115612e7357612e726125c1565b5b612e7f888289016129d4565b9150509295509295909350565b60008060408385031215612ea357612ea26125bc565b5b600083013567ffffffffffffffff811115612ec157612ec06125c1565b5b612ecd858286016129d4565b925050602083013567ffffffffffffffff811115612eee57612eed6125c1565b5b612efa858286016129d4565b9150509250929050565b600067ffffffffffffffff821115612f1f57612f1e6128bf565b5b612f28826127ce565b9050602081019050919050565b6000612f48612f4384612f04565b61291f565b905082815260208101848484011115612f6457612f63612a02565b5b612f6f848285612a38565b509392505050565b600082601f830112612f8c57612f8b6128ba565b5b8135612f9c848260208601612f35565b91505092915050565b60008060408385031215612fbc57612fbb6125bc565b5b6000612fca85828601612645565b925050602083013567ffffffffffffffff811115612feb57612fea6125c1565b5b612ff785828601612f77565b9150509250929050565b61300a816125e6565b82525050565b60006020820190506130256000830184613001565b92915050565b61303481612749565b811461303f57600080fd5b50565b6000813590506130518161302b565b92915050565b6000806040838503121561306e5761306d6125bc565b5b600061307c8582860161260f565b925050602061308d85828601613042565b9150509250929050565b600080604083850312156130ae576130ad6125bc565b5b60006130bc85828601612645565b92505060206130cd85828601612645565b9150509250929050565b6000806000606084860312156130f0576130ef6125bc565b5b60006130fe8682870161260f565b935050602084013567ffffffffffffffff81111561311f5761311e6125c1565b5b61312b868287016129d4565b925050604084013567ffffffffffffffff81111561314c5761314b6125c1565b5b613158868287016129d4565b9150509250925092565b60008060408385031215613179576131786125bc565b5b60006131878582860161260f565b92505060206131988582860161260f565b9150509250929050565b600080600080600060a086880312156131be576131bd6125bc565b5b60006131cc8882890161260f565b95505060206131dd8882890161260f565b94505060406131ee88828901612645565b93505060606131ff88828901612645565b925050608086013567ffffffffffffffff8111156132205761321f6125c1565b5b61322c88828901612a89565b9150509295509295909350565b60006020828403121561324f5761324e6125bc565b5b600061325d8482850161260f565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006132c2602b8361278a565b91506132cd82613266565b604082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333f57607f821691505b602082108103613352576133516132f8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338e60208361278a565b915061339982613358565b602082019050919050565b600060208201905081810360008301526133bd81613381565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061342060328361278a565b915061342b826133c4565b604082019050919050565b6000602082019050818103600083015261344f81613413565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006134b260298361278a565b91506134bd82613456565b604082019050919050565b600060208201905081810360008301526134e1816134a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061355182612624565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361358357613582613517565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006135ea60298361278a565b91506135f58261358e565b604082019050919050565b60006020820190508181036000830152613619816135dd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061367c60268361278a565b915061368782613620565b604082019050919050565b600060208201905081810360008301526136ab8161366f565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061370e60218361278a565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b600061374f82612624565b915061375a83612624565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561378f5761378e613517565b5b828201905092915050565b60006040820190506137af600083018561269a565b6137bc602083018461269a565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061381f60288361278a565b915061382a826137c3565b604082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006138b160258361278a565b91506138bc82613855565b604082019050919050565b600060208201905081810360008301526138e0816138a4565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613943602a8361278a565b915061394e826138e7565b604082019050919050565b6000602082019050818103600083015261397281613936565b9050919050565b600060408201905081810360008301526139938185612d21565b905081810360208301526139a78184612d21565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a0c60238361278a565b9150613a17826139b0565b604082019050919050565b60006020820190508181036000830152613a3b816139ff565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613a9e60248361278a565b9150613aa982613a42565b604082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613b3060298361278a565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b8d82613b66565b613b978185613b71565b9350613ba781856020860161279b565b613bb0816127ce565b840191505092915050565b600060a082019050613bd06000830188613001565b613bdd6020830187613001565b613bea604083018661269a565b613bf7606083018561269a565b8181036080830152613c098184613b82565b90509695505050505050565b600081519050613c24816126f0565b92915050565b600060208284031215613c4057613c3f6125bc565b5b6000613c4e84828501613c15565b91505092915050565b60008160e01c9050919050565b600060033d1115613c835760046000803e613c80600051613c57565b90505b90565b600060443d10613d1357613c986125b2565b60043d036004823e80513d602482011167ffffffffffffffff82111715613cc0575050613d13565b808201805167ffffffffffffffff811115613cde5750505050613d13565b80602083010160043d038501811115613cfb575050505050613d13565b613d0a826020018501866128ee565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613d7260348361278a565b9150613d7d82613d16565b604082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613e0460288361278a565b9150613e0f82613da8565b604082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b600060a082019050613e4f6000830188613001565b613e5c6020830187613001565b8181036040830152613e6e8186612d21565b90508181036060830152613e828185612d21565b90508181036080830152613e968184613b82565b9050969550505050505056fea2646970667358221220603fe5ffbf86bc6b3425d570a71c470c620191ee6e1a4b4a9c4ec51740f0aa1964736f6c634300080d0033
Deployed Bytecode Sourcemap
40085:1234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24635:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23658:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40136:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41213:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40320:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26574:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25032:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40812:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3493:103;;;:::i;:::-;;40683:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41083:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2842:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40159:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25629:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40586:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40186:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40437:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25856:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26096:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3751:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24635:231;24721:7;24768:1;24749:21;;:7;:21;;;24741:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24836:9;:13;24846:2;24836:13;;;;;;;;;;;:22;24850:7;24836:22;;;;;;;;;;;;;;;;24829:29;;24635:231;;;;:::o;23658:310::-;23760:4;23812:26;23797:41;;;:11;:41;;;;:110;;;;23870:37;23855:52;;;:11;:52;;;;23797:110;:163;;;;23924:36;23948:11;23924:23;:36::i;:::-;23797:163;23777:183;;23658:310;;;:::o;40136:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41213:101::-;41266:13;41295:8;:13;41304:3;41295:13;;;;;;;;;;;41288:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41213:101;;;:::o;40320:111::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40397:28:::1;40403:3;40408;40413:7;40397:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;40320:111:::0;;;:::o;26574:442::-;26815:12;:10;:12::i;:::-;26807:20;;:4;:20;;;:60;;;;26831:36;26848:4;26854:12;:10;:12::i;:::-;26831:16;:36::i;:::-;26807:60;26785:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:52;26979:4;26985:2;26989:3;26994:7;27003:4;26956:22;:52::i;:::-;26574:442;;;;;:::o;25032:524::-;25188:16;25249:3;:10;25230:8;:15;:29;25222:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25318:30;25365:8;:15;25351:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25318:63;;25399:9;25394:122;25418:8;:15;25414:1;:19;25394:122;;;25474:30;25484:8;25493:1;25484:11;;;;;;;;:::i;:::-;;;;;;;;25497:3;25501:1;25497:6;;;;;;;;:::i;:::-;;;;;;;;25474:9;:30::i;:::-;25455:13;25469:1;25455:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25435:3;;;;:::i;:::-;;;25394:122;;;;25535:13;25528:20;;;25032:524;;;;:::o;40812:265::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40978:41:::1;40989:5;40996:8;41006:12;40978:10;:41::i;:::-;41026:45;41037:5;41044:8;41054:12;41026:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;40812:265:::0;;;;;:::o;3493:103::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3558:30:::1;3585:1;3558:18;:30::i;:::-;3493:103::o:0;40683:123::-;40762:38;40773:10;40785:4;40791:8;40762:10;:38::i;:::-;40683:123;;:::o;41083:124::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41171:4:::1;41155:8;:13;41164:3;41155:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;41197:3;41187:14;41191:4;41187:14;;;;;;:::i;:::-;;;;;;;;41083:124:::0;;:::o;2842:87::-;2888:7;2915:6;;;;;;;;;;;2908:13;;2842:87;:::o;40159:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25629:155::-;25724:52;25743:12;:10;:12::i;:::-;25757:8;25767;25724:18;:52::i;:::-;25629:155;;:::o;40586:91::-;40640:31;40646:10;40658:3;40663:7;40640:5;:31::i;:::-;40586:91;;:::o;40186:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40437:143::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40539:35:::1;40550:3;40555:4;40561:8;40539:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;40437:143:::0;;;:::o;25856:168::-;25955:4;25979:18;:27;25998:7;25979:27;;;;;;;;;;;;;;;:37;26007:8;25979:37;;;;;;;;;;;;;;;;;;;;;;;;;25972:44;;25856:168;;;;:::o;26096:401::-;26312:12;:10;:12::i;:::-;26304:20;;:4;:20;;;:60;;;;26328:36;26345:4;26351:12;:10;:12::i;:::-;26328:16;:36::i;:::-;26304:60;26282:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26444:45;26462:4;26468:2;26472;26476:6;26484:4;26444:17;:45::i;:::-;26096:401;;;;;:::o;3751:201::-;3073:12;:10;:12::i;:::-;3062:23;;:7;:5;:7::i;:::-;:23;;;3054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3860:1:::1;3840:22;;:8;:22;;::::0;3832:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3916:28;3935:8;3916:18;:28::i;:::-;3751:201:::0;:::o;14754:157::-;14839:4;14878:25;14863:40;;;:11;:40;;;;14856:47;;14754:157;;;:::o;1513:98::-;1566:7;1593:10;1586:17;;1513:98;:::o;31276:729::-;31443:1;31429:16;;:2;:16;;;31421:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31496:16;31515:12;:10;:12::i;:::-;31496:31;;31538:20;31561:21;31579:2;31561:17;:21::i;:::-;31538:44;;31593:24;31620:25;31638:6;31620:17;:25::i;:::-;31593:52;;31658:66;31679:8;31697:1;31701:2;31705:3;31710:7;31719:4;31658:20;:66::i;:::-;31758:6;31737:9;:13;31747:2;31737:13;;;;;;;;;;;:17;31751:2;31737:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31817:2;31780:52;;31813:1;31780:52;;31795:8;31780:52;;;31821:2;31825:6;31780:52;;;;;;;:::i;:::-;;;;;;;;31845:65;31865:8;31883:1;31887:2;31891:3;31896:7;31905:4;31845:19;:65::i;:::-;31923:74;31954:8;31972:1;31976:2;31980;31984:6;31992:4;31923:30;:74::i;:::-;31410:595;;;31276:729;;;;:::o;28812:1146::-;29039:7;:14;29025:3;:10;:28;29017:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:1;29117:16;;:2;:16;;;29109:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29188:16;29207:12;:10;:12::i;:::-;29188:31;;29232:60;29253:8;29263:4;29269:2;29273:3;29278:7;29287:4;29232:20;:60::i;:::-;29310:9;29305:421;29329:3;:10;29325:1;:14;29305:421;;;29361:10;29374:3;29378:1;29374:6;;;;;;;;:::i;:::-;;;;;;;;29361:19;;29395:14;29412:7;29420:1;29412:10;;;;;;;;:::i;:::-;;;;;;;;29395:27;;29439:19;29461:9;:13;29471:2;29461:13;;;;;;;;;;;:19;29475:4;29461:19;;;;;;;;;;;;;;;;29439:41;;29518:6;29503:11;:21;;29495:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29651:6;29637:11;:20;29615:9;:13;29625:2;29615:13;;;;;;;;;;;:19;29629:4;29615:19;;;;;;;;;;;;;;;:42;;;;29708:6;29687:9;:13;29697:2;29687:13;;;;;;;;;;;:17;29701:2;29687:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29346:380;;;29341:3;;;;:::i;:::-;;;29305:421;;;;29773:2;29743:47;;29767:4;29743:47;;29757:8;29743:47;;;29777:3;29782:7;29743:47;;;;;;;:::i;:::-;;;;;;;;29803:59;29823:8;29833:4;29839:2;29843:3;29848:7;29857:4;29803:19;:59::i;:::-;29875:75;29911:8;29921:4;29927:2;29931:3;29936:7;29945:4;29875:35;:75::i;:::-;29006:952;28812:1146;;;;;:::o;34435:969::-;34603:1;34587:18;;:4;:18;;;34579:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34678:7;:14;34664:3;:10;:28;34656:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34750:16;34769:12;:10;:12::i;:::-;34750:31;;34794:66;34815:8;34825:4;34839:1;34843:3;34848:7;34794:66;;;;;;;;;;;;:20;:66::i;:::-;34878:9;34873:373;34897:3;:10;34893:1;:14;34873:373;;;34929:10;34942:3;34946:1;34942:6;;;;;;;;:::i;:::-;;;;;;;;34929:19;;34963:14;34980:7;34988:1;34980:10;;;;;;;;:::i;:::-;;;;;;;;34963:27;;35007:19;35029:9;:13;35039:2;35029:13;;;;;;;;;;;:19;35043:4;35029:19;;;;;;;;;;;;;;;;35007:41;;35086:6;35071:11;:21;;35063:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35213:6;35199:11;:20;35177:9;:13;35187:2;35177:13;;;;;;;;;;;:19;35191:4;35177:19;;;;;;;;;;;;;;;:42;;;;34914:332;;;34909:3;;;;;:::i;:::-;;;;34873:373;;;;35301:1;35263:55;;35287:4;35263:55;;35277:8;35263:55;;;35305:3;35310:7;35263:55;;;;;;;:::i;:::-;;;;;;;;35331:65;35351:8;35361:4;35375:1;35379:3;35384:7;35331:65;;;;;;;;;;;;:19;:65::i;:::-;34568:836;34435:969;;;:::o;32361:813::-;32553:1;32539:16;;:2;:16;;;32531:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32626:7;:14;32612:3;:10;:28;32604:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32698:16;32717:12;:10;:12::i;:::-;32698:31;;32742:66;32763:8;32781:1;32785:2;32789:3;32794:7;32803:4;32742:20;:66::i;:::-;32826:9;32821:103;32845:3;:10;32841:1;:14;32821:103;;;32902:7;32910:1;32902:10;;;;;;;;:::i;:::-;;;;;;;;32877:9;:17;32887:3;32891:1;32887:6;;;;;;;;:::i;:::-;;;;;;;;32877:17;;;;;;;;;;;:21;32895:2;32877:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32857:3;;;;;:::i;:::-;;;;32821:103;;;;32977:2;32941:53;;32973:1;32941:53;;32955:8;32941:53;;;32981:3;32986:7;32941:53;;;;;;;:::i;:::-;;;;;;;;33007:65;33027:8;33045:1;33049:2;33053:3;33058:7;33067:4;33007:19;:65::i;:::-;33085:81;33121:8;33139:1;33143:2;33147:3;33152:7;33161:4;33085:35;:81::i;:::-;32520:654;32361:813;;;;:::o;4112:191::-;4186:16;4205:6;;;;;;;;;;;4186:25;;4231:8;4222:6;;:17;;;;;;;;;;;;;;;;;;4286:8;4255:40;;4276:8;4255:40;;;;;;;;;;;;4175:128;4112:191;:::o;35546:331::-;35701:8;35692:17;;:5;:17;;;35684:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35804:8;35766:18;:25;35785:5;35766:25;;;;;;;;;;;;;;;:35;35792:8;35766:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35850:8;35828:41;;35843:5;35828:41;;;35860:8;35828:41;;;;;;:::i;:::-;;;;;;;;35546:331;;;:::o;33424:808::-;33567:1;33551:18;;:4;:18;;;33543:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:16;33641:12;:10;:12::i;:::-;33622:31;;33664:20;33687:21;33705:2;33687:17;:21::i;:::-;33664:44;;33719:24;33746:25;33764:6;33746:17;:25::i;:::-;33719:52;;33784:66;33805:8;33815:4;33829:1;33833:3;33838:7;33784:66;;;;;;;;;;;;:20;:66::i;:::-;33863:19;33885:9;:13;33895:2;33885:13;;;;;;;;;;;:19;33899:4;33885:19;;;;;;;;;;;;;;;;33863:41;;33938:6;33923:11;:21;;33915:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34057:6;34043:11;:20;34021:9;:13;34031:2;34021:13;;;;;;;;;;;:19;34035:4;34021:19;;;;;;;;;;;;;;;:42;;;;34131:1;34092:54;;34117:4;34092:54;;34107:8;34092:54;;;34135:2;34139:6;34092:54;;;;;;;:::i;:::-;;;;;;;;34159:65;34179:8;34189:4;34203:1;34207:3;34212:7;34159:65;;;;;;;;;;;;:19;:65::i;:::-;33532:700;;;;33424:808;;;:::o;27480:974::-;27682:1;27668:16;;:2;:16;;;27660:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27739:16;27758:12;:10;:12::i;:::-;27739:31;;27781:20;27804:21;27822:2;27804:17;:21::i;:::-;27781:44;;27836:24;27863:25;27881:6;27863:17;:25::i;:::-;27836:52;;27901:60;27922:8;27932:4;27938:2;27942:3;27947:7;27956:4;27901:20;:60::i;:::-;27974:19;27996:9;:13;28006:2;27996:13;;;;;;;;;;;:19;28010:4;27996:19;;;;;;;;;;;;;;;;27974:41;;28049:6;28034:11;:21;;28026:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28174:6;28160:11;:20;28138:9;:13;28148:2;28138:13;;;;;;;;;;;:19;28152:4;28138:19;;;;;;;;;;;;;;;:42;;;;28223:6;28202:9;:13;28212:2;28202:13;;;;;;;;;;;:17;28216:2;28202:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28278:2;28247:46;;28272:4;28247:46;;28262:8;28247:46;;;28282:2;28286:6;28247:46;;;;;;;:::i;:::-;;;;;;;;28306:59;28326:8;28336:4;28342:2;28346:3;28351:7;28360:4;28306:19;:59::i;:::-;28378:68;28409:8;28419:4;28425:2;28429;28433:6;28441:4;28378:30;:68::i;:::-;27649:805;;;;27480:974;;;;;:::o;39810:198::-;39876:16;39905:22;39944:1;39930:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39905:41;;39968:7;39957:5;39963:1;39957:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39995:5;39988:12;;;39810:198;;;:::o;36833:221::-;;;;;;;:::o;38009:220::-;;;;;;;:::o;38237:744::-;38452:15;:2;:13;;;:15::i;:::-;38448:526;;;38505:2;38488:38;;;38527:8;38537:4;38543:2;38547:6;38555:4;38488:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38484:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38836:6;38829:14;;;;;;;;;;;:::i;:::-;;;;;;;;38484:479;;;38885:62;;;;;;;;;;:::i;:::-;;;;;;;;38484:479;38622:43;;;38610:55;;;:8;:55;;;;38606:154;;38690:50;;;;;;;;;;:::i;:::-;;;;;;;;38606:154;38561:214;38448:526;38237:744;;;;;;:::o;38989:813::-;39229:15;:2;:13;;;:15::i;:::-;39225:570;;;39282:2;39265:43;;;39309:8;39319:4;39325:3;39330:7;39339:4;39265:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39261:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39657:6;39650:14;;;;;;;;;;;:::i;:::-;;;;;;;;39261:523;;;39706:62;;;;;;;;;;:::i;:::-;;;;;;;;39261:523;39438:48;;;39426:60;;;:8;:60;;;;39422:159;;39511:50;;;;;;;;;;:::i;:::-;;;;;;;;39422:159;39345:251;39225:570;38989:813;;;;;;:::o;5596:326::-;5656:4;5913:1;5891:7;:19;;;:23;5884:30;;5596:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:180;5734:77;5731:1;5724:88;5831:4;5828:1;5821:15;5855:4;5852:1;5845:15;5872:281;5955:27;5977:4;5955:27;:::i;:::-;5947:6;5943:40;6085:6;6073:10;6070:22;6049:18;6037:10;6034:34;6031:62;6028:88;;;6096:18;;:::i;:::-;6028:88;6136:10;6132:2;6125:22;5915:238;5872:281;;:::o;6159:129::-;6193:6;6220:20;;:::i;:::-;6210:30;;6249:33;6277:4;6269:6;6249:33;:::i;:::-;6159:129;;;:::o;6294:311::-;6371:4;6461:18;6453:6;6450:30;6447:56;;;6483:18;;:::i;:::-;6447:56;6533:4;6525:6;6521:17;6513:25;;6593:4;6587;6583:15;6575:23;;6294:311;;;:::o;6611:117::-;6720:1;6717;6710:12;6751:710;6847:5;6872:81;6888:64;6945:6;6888:64;:::i;:::-;6872:81;:::i;:::-;6863:90;;6973:5;7002:6;6995:5;6988:21;7036:4;7029:5;7025:16;7018:23;;7089:4;7081:6;7077:17;7069:6;7065:30;7118:3;7110:6;7107:15;7104:122;;;7137:79;;:::i;:::-;7104:122;7252:6;7235:220;7269:6;7264:3;7261:15;7235:220;;;7344:3;7373:37;7406:3;7394:10;7373:37;:::i;:::-;7368:3;7361:50;7440:4;7435:3;7431:14;7424:21;;7311:144;7295:4;7290:3;7286:14;7279:21;;7235:220;;;7239:21;6853:608;;6751:710;;;;;:::o;7484:370::-;7555:5;7604:3;7597:4;7589:6;7585:17;7581:27;7571:122;;7612:79;;:::i;:::-;7571:122;7729:6;7716:20;7754:94;7844:3;7836:6;7829:4;7821:6;7817:17;7754:94;:::i;:::-;7745:103;;7561:293;7484:370;;;;:::o;7860:117::-;7969:1;7966;7959:12;7983:307;8044:4;8134:18;8126:6;8123:30;8120:56;;;8156:18;;:::i;:::-;8120:56;8194:29;8216:6;8194:29;:::i;:::-;8186:37;;8278:4;8272;8268:15;8260:23;;7983:307;;;:::o;8296:154::-;8380:6;8375:3;8370;8357:30;8442:1;8433:6;8428:3;8424:16;8417:27;8296:154;;;:::o;8456:410::-;8533:5;8558:65;8574:48;8615:6;8574:48;:::i;:::-;8558:65;:::i;:::-;8549:74;;8646:6;8639:5;8632:21;8684:4;8677:5;8673:16;8722:3;8713:6;8708:3;8704:16;8701:25;8698:112;;;8729:79;;:::i;:::-;8698:112;8819:41;8853:6;8848:3;8843;8819:41;:::i;:::-;8539:327;8456:410;;;;;:::o;8885:338::-;8940:5;8989:3;8982:4;8974:6;8970:17;8966:27;8956:122;;8997:79;;:::i;:::-;8956:122;9114:6;9101:20;9139:78;9213:3;9205:6;9198:4;9190:6;9186:17;9139:78;:::i;:::-;9130:87;;8946:277;8885:338;;;;:::o;9229:1509::-;9383:6;9391;9399;9407;9415;9464:3;9452:9;9443:7;9439:23;9435:33;9432:120;;;9471:79;;:::i;:::-;9432:120;9591:1;9616:53;9661:7;9652:6;9641:9;9637:22;9616:53;:::i;:::-;9606:63;;9562:117;9718:2;9744:53;9789:7;9780:6;9769:9;9765:22;9744:53;:::i;:::-;9734:63;;9689:118;9874:2;9863:9;9859:18;9846:32;9905:18;9897:6;9894:30;9891:117;;;9927:79;;:::i;:::-;9891:117;10032:78;10102:7;10093:6;10082:9;10078:22;10032:78;:::i;:::-;10022:88;;9817:303;10187:2;10176:9;10172:18;10159:32;10218:18;10210:6;10207:30;10204:117;;;10240:79;;:::i;:::-;10204:117;10345:78;10415:7;10406:6;10395:9;10391:22;10345:78;:::i;:::-;10335:88;;10130:303;10500:3;10489:9;10485:19;10472:33;10532:18;10524:6;10521:30;10518:117;;;10554:79;;:::i;:::-;10518:117;10659:62;10713:7;10704:6;10693:9;10689:22;10659:62;:::i;:::-;10649:72;;10443:288;9229:1509;;;;;;;;:::o;10744:311::-;10821:4;10911:18;10903:6;10900:30;10897:56;;;10933:18;;:::i;:::-;10897:56;10983:4;10975:6;10971:17;10963:25;;11043:4;11037;11033:15;11025:23;;10744:311;;;:::o;11078:710::-;11174:5;11199:81;11215:64;11272:6;11215:64;:::i;:::-;11199:81;:::i;:::-;11190:90;;11300:5;11329:6;11322:5;11315:21;11363:4;11356:5;11352:16;11345:23;;11416:4;11408:6;11404:17;11396:6;11392:30;11445:3;11437:6;11434:15;11431:122;;;11464:79;;:::i;:::-;11431:122;11579:6;11562:220;11596:6;11591:3;11588:15;11562:220;;;11671:3;11700:37;11733:3;11721:10;11700:37;:::i;:::-;11695:3;11688:50;11767:4;11762:3;11758:14;11751:21;;11638:144;11622:4;11617:3;11613:14;11606:21;;11562:220;;;11566:21;11180:608;;11078:710;;;;;:::o;11811:370::-;11882:5;11931:3;11924:4;11916:6;11912:17;11908:27;11898:122;;11939:79;;:::i;:::-;11898:122;12056:6;12043:20;12081:94;12171:3;12163:6;12156:4;12148:6;12144:17;12081:94;:::i;:::-;12072:103;;11888:293;11811:370;;;;:::o;12187:894::-;12305:6;12313;12362:2;12350:9;12341:7;12337:23;12333:32;12330:119;;;12368:79;;:::i;:::-;12330:119;12516:1;12505:9;12501:17;12488:31;12546:18;12538:6;12535:30;12532:117;;;12568:79;;:::i;:::-;12532:117;12673:78;12743:7;12734:6;12723:9;12719:22;12673:78;:::i;:::-;12663:88;;12459:302;12828:2;12817:9;12813:18;12800:32;12859:18;12851:6;12848:30;12845:117;;;12881:79;;:::i;:::-;12845:117;12986:78;13056:7;13047:6;13036:9;13032:22;12986:78;:::i;:::-;12976:88;;12771:303;12187:894;;;;;:::o;13087:114::-;13154:6;13188:5;13182:12;13172:22;;13087:114;;;:::o;13207:184::-;13306:11;13340:6;13335:3;13328:19;13380:4;13375:3;13371:14;13356:29;;13207:184;;;;:::o;13397:132::-;13464:4;13487:3;13479:11;;13517:4;13512:3;13508:14;13500:22;;13397:132;;;:::o;13535:108::-;13612:24;13630:5;13612:24;:::i;:::-;13607:3;13600:37;13535:108;;:::o;13649:179::-;13718:10;13739:46;13781:3;13773:6;13739:46;:::i;:::-;13817:4;13812:3;13808:14;13794:28;;13649:179;;;;:::o;13834:113::-;13904:4;13936;13931:3;13927:14;13919:22;;13834:113;;;:::o;13983:732::-;14102:3;14131:54;14179:5;14131:54;:::i;:::-;14201:86;14280:6;14275:3;14201:86;:::i;:::-;14194:93;;14311:56;14361:5;14311:56;:::i;:::-;14390:7;14421:1;14406:284;14431:6;14428:1;14425:13;14406:284;;;14507:6;14501:13;14534:63;14593:3;14578:13;14534:63;:::i;:::-;14527:70;;14620:60;14673:6;14620:60;:::i;:::-;14610:70;;14466:224;14453:1;14450;14446:9;14441:14;;14406:284;;;14410:14;14706:3;14699:10;;14107:608;;;13983:732;;;;:::o;14721:373::-;14864:4;14902:2;14891:9;14887:18;14879:26;;14951:9;14945:4;14941:20;14937:1;14926:9;14922:17;14915:47;14979:108;15082:4;15073:6;14979:108;:::i;:::-;14971:116;;14721:373;;;;:::o;15100:1751::-;15295:6;15303;15311;15319;15327;15376:3;15364:9;15355:7;15351:23;15347:33;15344:120;;;15383:79;;:::i;:::-;15344:120;15503:1;15528:53;15573:7;15564:6;15553:9;15549:22;15528:53;:::i;:::-;15518:63;;15474:117;15658:2;15647:9;15643:18;15630:32;15689:18;15681:6;15678:30;15675:117;;;15711:79;;:::i;:::-;15675:117;15816:78;15886:7;15877:6;15866:9;15862:22;15816:78;:::i;:::-;15806:88;;15601:303;15971:2;15960:9;15956:18;15943:32;16002:18;15994:6;15991:30;15988:117;;;16024:79;;:::i;:::-;15988:117;16129:78;16199:7;16190:6;16179:9;16175:22;16129:78;:::i;:::-;16119:88;;15914:303;16284:2;16273:9;16269:18;16256:32;16315:18;16307:6;16304:30;16301:117;;;16337:79;;:::i;:::-;16301:117;16442:78;16512:7;16503:6;16492:9;16488:22;16442:78;:::i;:::-;16432:88;;16227:303;16597:3;16586:9;16582:19;16569:33;16629:18;16621:6;16618:30;16615:117;;;16651:79;;:::i;:::-;16615:117;16756:78;16826:7;16817:6;16806:9;16802:22;16756:78;:::i;:::-;16746:88;;16540:304;15100:1751;;;;;;;;:::o;16857:894::-;16975:6;16983;17032:2;17020:9;17011:7;17007:23;17003:32;17000:119;;;17038:79;;:::i;:::-;17000:119;17186:1;17175:9;17171:17;17158:31;17216:18;17208:6;17205:30;17202:117;;;17238:79;;:::i;:::-;17202:117;17343:78;17413:7;17404:6;17393:9;17389:22;17343:78;:::i;:::-;17333:88;;17129:302;17498:2;17487:9;17483:18;17470:32;17529:18;17521:6;17518:30;17515:117;;;17551:79;;:::i;:::-;17515:117;17656:78;17726:7;17717:6;17706:9;17702:22;17656:78;:::i;:::-;17646:88;;17441:303;16857:894;;;;;:::o;17757:308::-;17819:4;17909:18;17901:6;17898:30;17895:56;;;17931:18;;:::i;:::-;17895:56;17969:29;17991:6;17969:29;:::i;:::-;17961:37;;18053:4;18047;18043:15;18035:23;;17757:308;;;:::o;18071:412::-;18149:5;18174:66;18190:49;18232:6;18190:49;:::i;:::-;18174:66;:::i;:::-;18165:75;;18263:6;18256:5;18249:21;18301:4;18294:5;18290:16;18339:3;18330:6;18325:3;18321:16;18318:25;18315:112;;;18346:79;;:::i;:::-;18315:112;18436:41;18470:6;18465:3;18460;18436:41;:::i;:::-;18155:328;18071:412;;;;;:::o;18503:340::-;18559:5;18608:3;18601:4;18593:6;18589:17;18585:27;18575:122;;18616:79;;:::i;:::-;18575:122;18733:6;18720:20;18758:79;18833:3;18825:6;18818:4;18810:6;18806:17;18758:79;:::i;:::-;18749:88;;18565:278;18503:340;;;;:::o;18849:654::-;18927:6;18935;18984:2;18972:9;18963:7;18959:23;18955:32;18952:119;;;18990:79;;:::i;:::-;18952:119;19110:1;19135:53;19180:7;19171:6;19160:9;19156:22;19135:53;:::i;:::-;19125:63;;19081:117;19265:2;19254:9;19250:18;19237:32;19296:18;19288:6;19285:30;19282:117;;;19318:79;;:::i;:::-;19282:117;19423:63;19478:7;19469:6;19458:9;19454:22;19423:63;:::i;:::-;19413:73;;19208:288;18849:654;;;;;:::o;19509:118::-;19596:24;19614:5;19596:24;:::i;:::-;19591:3;19584:37;19509:118;;:::o;19633:222::-;19726:4;19764:2;19753:9;19749:18;19741:26;;19777:71;19845:1;19834:9;19830:17;19821:6;19777:71;:::i;:::-;19633:222;;;;:::o;19861:116::-;19931:21;19946:5;19931:21;:::i;:::-;19924:5;19921:32;19911:60;;19967:1;19964;19957:12;19911:60;19861:116;:::o;19983:133::-;20026:5;20064:6;20051:20;20042:29;;20080:30;20104:5;20080:30;:::i;:::-;19983:133;;;;:::o;20122:468::-;20187:6;20195;20244:2;20232:9;20223:7;20219:23;20215:32;20212:119;;;20250:79;;:::i;:::-;20212:119;20370:1;20395:53;20440:7;20431:6;20420:9;20416:22;20395:53;:::i;:::-;20385:63;;20341:117;20497:2;20523:50;20565:7;20556:6;20545:9;20541:22;20523:50;:::i;:::-;20513:60;;20468:115;20122:468;;;;;:::o;20596:474::-;20664:6;20672;20721:2;20709:9;20700:7;20696:23;20692:32;20689:119;;;20727:79;;:::i;:::-;20689:119;20847:1;20872:53;20917:7;20908:6;20897:9;20893:22;20872:53;:::i;:::-;20862:63;;20818:117;20974:2;21000:53;21045:7;21036:6;21025:9;21021:22;21000:53;:::i;:::-;20990:63;;20945:118;20596:474;;;;;:::o;21076:1039::-;21203:6;21211;21219;21268:2;21256:9;21247:7;21243:23;21239:32;21236:119;;;21274:79;;:::i;:::-;21236:119;21394:1;21419:53;21464:7;21455:6;21444:9;21440:22;21419:53;:::i;:::-;21409:63;;21365:117;21549:2;21538:9;21534:18;21521:32;21580:18;21572:6;21569:30;21566:117;;;21602:79;;:::i;:::-;21566:117;21707:78;21777:7;21768:6;21757:9;21753:22;21707:78;:::i;:::-;21697:88;;21492:303;21862:2;21851:9;21847:18;21834:32;21893:18;21885:6;21882:30;21879:117;;;21915:79;;:::i;:::-;21879:117;22020:78;22090:7;22081:6;22070:9;22066:22;22020:78;:::i;:::-;22010:88;;21805:303;21076:1039;;;;;:::o;22121:474::-;22189:6;22197;22246:2;22234:9;22225:7;22221:23;22217:32;22214:119;;;22252:79;;:::i;:::-;22214:119;22372:1;22397:53;22442:7;22433:6;22422:9;22418:22;22397:53;:::i;:::-;22387:63;;22343:117;22499:2;22525:53;22570:7;22561:6;22550:9;22546:22;22525:53;:::i;:::-;22515:63;;22470:118;22121:474;;;;;:::o;22601:1089::-;22705:6;22713;22721;22729;22737;22786:3;22774:9;22765:7;22761:23;22757:33;22754:120;;;22793:79;;:::i;:::-;22754:120;22913:1;22938:53;22983:7;22974:6;22963:9;22959:22;22938:53;:::i;:::-;22928:63;;22884:117;23040:2;23066:53;23111:7;23102:6;23091:9;23087:22;23066:53;:::i;:::-;23056:63;;23011:118;23168:2;23194:53;23239:7;23230:6;23219:9;23215:22;23194:53;:::i;:::-;23184:63;;23139:118;23296:2;23322:53;23367:7;23358:6;23347:9;23343:22;23322:53;:::i;:::-;23312:63;;23267:118;23452:3;23441:9;23437:19;23424:33;23484:18;23476:6;23473:30;23470:117;;;23506:79;;:::i;:::-;23470:117;23611:62;23665:7;23656:6;23645:9;23641:22;23611:62;:::i;:::-;23601:72;;23395:288;22601:1089;;;;;;;;:::o;23696:329::-;23755:6;23804:2;23792:9;23783:7;23779:23;23775:32;23772:119;;;23810:79;;:::i;:::-;23772:119;23930:1;23955:53;24000:7;23991:6;23980:9;23976:22;23955:53;:::i;:::-;23945:63;;23901:117;23696:329;;;;:::o;24031:230::-;24171:34;24167:1;24159:6;24155:14;24148:58;24240:13;24235:2;24227:6;24223:15;24216:38;24031:230;:::o;24267:366::-;24409:3;24430:67;24494:2;24489:3;24430:67;:::i;:::-;24423:74;;24506:93;24595:3;24506:93;:::i;:::-;24624:2;24619:3;24615:12;24608:19;;24267:366;;;:::o;24639:419::-;24805:4;24843:2;24832:9;24828:18;24820:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24920:131;25046:4;24920:131;:::i;:::-;24912:139;;24639:419;;;:::o;25064:180::-;25112:77;25109:1;25102:88;25209:4;25206:1;25199:15;25233:4;25230:1;25223:15;25250:320;25294:6;25331:1;25325:4;25321:12;25311:22;;25378:1;25372:4;25368:12;25399:18;25389:81;;25455:4;25447:6;25443:17;25433:27;;25389:81;25517:2;25509:6;25506:14;25486:18;25483:38;25480:84;;25536:18;;:::i;:::-;25480:84;25301:269;25250:320;;;:::o;25576:182::-;25716:34;25712:1;25704:6;25700:14;25693:58;25576:182;:::o;25764:366::-;25906:3;25927:67;25991:2;25986:3;25927:67;:::i;:::-;25920:74;;26003:93;26092:3;26003:93;:::i;:::-;26121:2;26116:3;26112:12;26105:19;;25764:366;;;:::o;26136:419::-;26302:4;26340:2;26329:9;26325:18;26317:26;;26389:9;26383:4;26379:20;26375:1;26364:9;26360:17;26353:47;26417:131;26543:4;26417:131;:::i;:::-;26409:139;;26136:419;;;:::o;26561:237::-;26701:34;26697:1;26689:6;26685:14;26678:58;26770:20;26765:2;26757:6;26753:15;26746:45;26561:237;:::o;26804:366::-;26946:3;26967:67;27031:2;27026:3;26967:67;:::i;:::-;26960:74;;27043:93;27132:3;27043:93;:::i;:::-;27161:2;27156:3;27152:12;27145:19;;26804:366;;;:::o;27176:419::-;27342:4;27380:2;27369:9;27365:18;27357:26;;27429:9;27423:4;27419:20;27415:1;27404:9;27400:17;27393:47;27457:131;27583:4;27457:131;:::i;:::-;27449:139;;27176:419;;;:::o;27601:228::-;27741:34;27737:1;27729:6;27725:14;27718:58;27810:11;27805:2;27797:6;27793:15;27786:36;27601:228;:::o;27835:366::-;27977:3;27998:67;28062:2;28057:3;27998:67;:::i;:::-;27991:74;;28074:93;28163:3;28074:93;:::i;:::-;28192:2;28187:3;28183:12;28176:19;;27835:366;;;:::o;28207:419::-;28373:4;28411:2;28400:9;28396:18;28388:26;;28460:9;28454:4;28450:20;28446:1;28435:9;28431:17;28424:47;28488:131;28614:4;28488:131;:::i;:::-;28480:139;;28207:419;;;:::o;28632:180::-;28680:77;28677:1;28670:88;28777:4;28774:1;28767:15;28801:4;28798:1;28791:15;28818:180;28866:77;28863:1;28856:88;28963:4;28960:1;28953:15;28987:4;28984:1;28977:15;29004:233;29043:3;29066:24;29084:5;29066:24;:::i;:::-;29057:33;;29112:66;29105:5;29102:77;29099:103;;29182:18;;:::i;:::-;29099:103;29229:1;29222:5;29218:13;29211:20;;29004:233;;;:::o;29243:228::-;29383:34;29379:1;29371:6;29367:14;29360:58;29452:11;29447:2;29439:6;29435:15;29428:36;29243:228;:::o;29477:366::-;29619:3;29640:67;29704:2;29699:3;29640:67;:::i;:::-;29633:74;;29716:93;29805:3;29716:93;:::i;:::-;29834:2;29829:3;29825:12;29818:19;;29477:366;;;:::o;29849:419::-;30015:4;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;29849:419;;;:::o;30274:225::-;30414:34;30410:1;30402:6;30398:14;30391:58;30483:8;30478:2;30470:6;30466:15;30459:33;30274:225;:::o;30505:366::-;30647:3;30668:67;30732:2;30727:3;30668:67;:::i;:::-;30661:74;;30744:93;30833:3;30744:93;:::i;:::-;30862:2;30857:3;30853:12;30846:19;;30505:366;;;:::o;30877:419::-;31043:4;31081:2;31070:9;31066:18;31058:26;;31130:9;31124:4;31120:20;31116:1;31105:9;31101:17;31094:47;31158:131;31284:4;31158:131;:::i;:::-;31150:139;;30877:419;;;:::o;31302:220::-;31442:34;31438:1;31430:6;31426:14;31419:58;31511:3;31506:2;31498:6;31494:15;31487:28;31302:220;:::o;31528:366::-;31670:3;31691:67;31755:2;31750:3;31691:67;:::i;:::-;31684:74;;31767:93;31856:3;31767:93;:::i;:::-;31885:2;31880:3;31876:12;31869:19;;31528:366;;;:::o;31900:419::-;32066:4;32104:2;32093:9;32089:18;32081:26;;32153:9;32147:4;32143:20;32139:1;32128:9;32124:17;32117:47;32181:131;32307:4;32181:131;:::i;:::-;32173:139;;31900:419;;;:::o;32325:305::-;32365:3;32384:20;32402:1;32384:20;:::i;:::-;32379:25;;32418:20;32436:1;32418:20;:::i;:::-;32413:25;;32572:1;32504:66;32500:74;32497:1;32494:81;32491:107;;;32578:18;;:::i;:::-;32491:107;32622:1;32619;32615:9;32608:16;;32325:305;;;;:::o;32636:332::-;32757:4;32795:2;32784:9;32780:18;32772:26;;32808:71;32876:1;32865:9;32861:17;32852:6;32808:71;:::i;:::-;32889:72;32957:2;32946:9;32942:18;32933:6;32889:72;:::i;:::-;32636:332;;;;;:::o;32974:227::-;33114:34;33110:1;33102:6;33098:14;33091:58;33183:10;33178:2;33170:6;33166:15;33159:35;32974:227;:::o;33207:366::-;33349:3;33370:67;33434:2;33429:3;33370:67;:::i;:::-;33363:74;;33446:93;33535:3;33446:93;:::i;:::-;33564:2;33559:3;33555:12;33548:19;;33207:366;;;:::o;33579:419::-;33745:4;33783:2;33772:9;33768:18;33760:26;;33832:9;33826:4;33822:20;33818:1;33807:9;33803:17;33796:47;33860:131;33986:4;33860:131;:::i;:::-;33852:139;;33579:419;;;:::o;34004:224::-;34144:34;34140:1;34132:6;34128:14;34121:58;34213:7;34208:2;34200:6;34196:15;34189:32;34004:224;:::o;34234:366::-;34376:3;34397:67;34461:2;34456:3;34397:67;:::i;:::-;34390:74;;34473:93;34562:3;34473:93;:::i;:::-;34591:2;34586:3;34582:12;34575:19;;34234:366;;;:::o;34606:419::-;34772:4;34810:2;34799:9;34795:18;34787:26;;34859:9;34853:4;34849:20;34845:1;34834:9;34830:17;34823:47;34887:131;35013:4;34887:131;:::i;:::-;34879:139;;34606:419;;;:::o;35031:229::-;35171:34;35167:1;35159:6;35155:14;35148:58;35240:12;35235:2;35227:6;35223:15;35216:37;35031:229;:::o;35266:366::-;35408:3;35429:67;35493:2;35488:3;35429:67;:::i;:::-;35422:74;;35505:93;35594:3;35505:93;:::i;:::-;35623:2;35618:3;35614:12;35607:19;;35266:366;;;:::o;35638:419::-;35804:4;35842:2;35831:9;35827:18;35819:26;;35891:9;35885:4;35881:20;35877:1;35866:9;35862:17;35855:47;35919:131;36045:4;35919:131;:::i;:::-;35911:139;;35638:419;;;:::o;36063:634::-;36284:4;36322:2;36311:9;36307:18;36299:26;;36371:9;36365:4;36361:20;36357:1;36346:9;36342:17;36335:47;36399:108;36502:4;36493:6;36399:108;:::i;:::-;36391:116;;36554:9;36548:4;36544:20;36539:2;36528:9;36524:18;36517:48;36582:108;36685:4;36676:6;36582:108;:::i;:::-;36574:116;;36063:634;;;;;:::o;36703:222::-;36843:34;36839:1;36831:6;36827:14;36820:58;36912:5;36907:2;36899:6;36895:15;36888:30;36703:222;:::o;36931:366::-;37073:3;37094:67;37158:2;37153:3;37094:67;:::i;:::-;37087:74;;37170:93;37259:3;37170:93;:::i;:::-;37288:2;37283:3;37279:12;37272:19;;36931:366;;;:::o;37303:419::-;37469:4;37507:2;37496:9;37492:18;37484:26;;37556:9;37550:4;37546:20;37542:1;37531:9;37527:17;37520:47;37584:131;37710:4;37584:131;:::i;:::-;37576:139;;37303:419;;;:::o;37728:223::-;37868:34;37864:1;37856:6;37852:14;37845:58;37937:6;37932:2;37924:6;37920:15;37913:31;37728:223;:::o;37957:366::-;38099:3;38120:67;38184:2;38179:3;38120:67;:::i;:::-;38113:74;;38196:93;38285:3;38196:93;:::i;:::-;38314:2;38309:3;38305:12;38298:19;;37957:366;;;:::o;38329:419::-;38495:4;38533:2;38522:9;38518:18;38510:26;;38582:9;38576:4;38572:20;38568:1;38557:9;38553:17;38546:47;38610:131;38736:4;38610:131;:::i;:::-;38602:139;;38329:419;;;:::o;38754:228::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:11;38958:2;38950:6;38946:15;38939:36;38754:228;:::o;38988:366::-;39130:3;39151:67;39215:2;39210:3;39151:67;:::i;:::-;39144:74;;39227:93;39316:3;39227:93;:::i;:::-;39345:2;39340:3;39336:12;39329:19;;38988:366;;;:::o;39360:419::-;39526:4;39564:2;39553:9;39549:18;39541:26;;39613:9;39607:4;39603:20;39599:1;39588:9;39584:17;39577:47;39641:131;39767:4;39641:131;:::i;:::-;39633:139;;39360:419;;;:::o;39785:98::-;39836:6;39870:5;39864:12;39854:22;;39785:98;;;:::o;39889:168::-;39972:11;40006:6;40001:3;39994:19;40046:4;40041:3;40037:14;40022:29;;39889:168;;;;:::o;40063:360::-;40149:3;40177:38;40209:5;40177:38;:::i;:::-;40231:70;40294:6;40289:3;40231:70;:::i;:::-;40224:77;;40310:52;40355:6;40350:3;40343:4;40336:5;40332:16;40310:52;:::i;:::-;40387:29;40409:6;40387:29;:::i;:::-;40382:3;40378:39;40371:46;;40153:270;40063:360;;;;:::o;40429:751::-;40652:4;40690:3;40679:9;40675:19;40667:27;;40704:71;40772:1;40761:9;40757:17;40748:6;40704:71;:::i;:::-;40785:72;40853:2;40842:9;40838:18;40829:6;40785:72;:::i;:::-;40867;40935:2;40924:9;40920:18;40911:6;40867:72;:::i;:::-;40949;41017:2;41006:9;41002:18;40993:6;40949:72;:::i;:::-;41069:9;41063:4;41059:20;41053:3;41042:9;41038:19;41031:49;41097:76;41168:4;41159:6;41097:76;:::i;:::-;41089:84;;40429:751;;;;;;;;:::o;41186:141::-;41242:5;41273:6;41267:13;41258:22;;41289:32;41315:5;41289:32;:::i;:::-;41186:141;;;;:::o;41333:349::-;41402:6;41451:2;41439:9;41430:7;41426:23;41422:32;41419:119;;;41457:79;;:::i;:::-;41419:119;41577:1;41602:63;41657:7;41648:6;41637:9;41633:22;41602:63;:::i;:::-;41592:73;;41548:127;41333:349;;;;:::o;41688:106::-;41732:8;41781:5;41776:3;41772:15;41751:36;;41688:106;;;:::o;41800:183::-;41835:3;41873:1;41855:16;41852:23;41849:128;;;41911:1;41908;41905;41890:23;41933:34;41964:1;41958:8;41933:34;:::i;:::-;41926:41;;41849:128;41800:183;:::o;41989:711::-;42028:3;42066:4;42048:16;42045:26;42074:5;42042:39;42103:20;;:::i;:::-;42178:1;42160:16;42156:24;42153:1;42147:4;42132:49;42211:4;42205:11;42310:16;42303:4;42295:6;42291:17;42288:39;42255:18;42247:6;42244:30;42228:113;42225:146;;;42356:5;;;;42225:146;42402:6;42396:4;42392:17;42438:3;42432:10;42465:18;42457:6;42454:30;42451:43;;;42487:5;;;;;;42451:43;42535:6;42528:4;42523:3;42519:14;42515:27;42594:1;42576:16;42572:24;42566:4;42562:35;42557:3;42554:44;42551:57;;;42601:5;;;;;;;42551:57;42618;42666:6;42660:4;42656:17;42648:6;42644:30;42638:4;42618:57;:::i;:::-;42691:3;42684:10;;42032:668;;;;;41989:711;;:::o;42706:239::-;42846:34;42842:1;42834:6;42830:14;42823:58;42915:22;42910:2;42902:6;42898:15;42891:47;42706:239;:::o;42951:366::-;43093:3;43114:67;43178:2;43173:3;43114:67;:::i;:::-;43107:74;;43190:93;43279:3;43190:93;:::i;:::-;43308:2;43303:3;43299:12;43292:19;;42951:366;;;:::o;43323:419::-;43489:4;43527:2;43516:9;43512:18;43504:26;;43576:9;43570:4;43566:20;43562:1;43551:9;43547:17;43540:47;43604:131;43730:4;43604:131;:::i;:::-;43596:139;;43323:419;;;:::o;43748:227::-;43888:34;43884:1;43876:6;43872:14;43865:58;43957:10;43952:2;43944:6;43940:15;43933:35;43748:227;:::o;43981:366::-;44123:3;44144:67;44208:2;44203:3;44144:67;:::i;:::-;44137:74;;44220:93;44309:3;44220:93;:::i;:::-;44338:2;44333:3;44329:12;44322:19;;43981:366;;;:::o;44353:419::-;44519:4;44557:2;44546:9;44542:18;44534:26;;44606:9;44600:4;44596:20;44592:1;44581:9;44577:17;44570:47;44634:131;44760:4;44634:131;:::i;:::-;44626:139;;44353:419;;;:::o;44778:1053::-;45101:4;45139:3;45128:9;45124:19;45116:27;;45153:71;45221:1;45210:9;45206:17;45197:6;45153:71;:::i;:::-;45234:72;45302:2;45291:9;45287:18;45278:6;45234:72;:::i;:::-;45353:9;45347:4;45343:20;45338:2;45327:9;45323:18;45316:48;45381:108;45484:4;45475:6;45381:108;:::i;:::-;45373:116;;45536:9;45530:4;45526:20;45521:2;45510:9;45506:18;45499:48;45564:108;45667:4;45658:6;45564:108;:::i;:::-;45556:116;;45720:9;45714:4;45710:20;45704:3;45693:9;45689:19;45682:49;45748:76;45819:4;45810:6;45748:76;:::i;:::-;45740:84;;44778:1053;;;;;;;;:::o
Swarm Source
ipfs://603fe5ffbf86bc6b3425d570a71c470c620191ee6e1a4b4a9c4ec51740f0aa19
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.