Token
Overview ERC-1155
Total Supply:
0 N/A
Holders:
62 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PancakeNftERC11155
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.9 <0.9.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; contract PancakeNftERC11155 is ERC1155, ERC1155Burnable,ReentrancyGuard, Ownable, Pausable { uint public tokensCount = 19; string private _uri; mapping(address => bool) private _mintApprovals; constructor(string memory _baseUri) ERC1155(string( abi.encodePacked( _baseUri, "{id}.json" ) )) { _uri = _baseUri; } modifier existId(uint _tokenid) { require(_tokenid <= tokensCount, "Invalid token id"); _; } modifier existIds(uint[] memory _tokenIds) { for(uint i=0; i < _tokenIds.length; i++){ require(_tokenIds[i] <= tokensCount, "Invalid token id"); } _; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function setURI(string memory newuri) external onlyOwner { _uri = newuri; } function setMintApprovalForAll(address operator, bool approved) external onlyOwner{ _mintApprovals[operator] = approved; } function isMintApprovedForAll(address operator) public view returns (bool) { return _mintApprovals[operator]; } // contract mint function function mint(address to, uint tokenId, uint amount) external existId(tokenId){ require( isMintApprovedForAll(msg.sender) || owner() == msg.sender, "ERC1155: caller is not owner nor approved" ); _mint(to, tokenId, amount, ""); } function mintBatch(address to, uint[] memory tokenIds, uint[] memory amounts) external existIds(tokenIds) { require( isMintApprovedForAll(msg.sender) || owner() == msg.sender, "ERC1155: caller is not owner nor approved" ); _mintBatch(to, tokenIds, amounts, ""); } function getWalletToken() external view returns(uint[] memory){ uint256[] memory tokens = new uint256[](tokensCount); for(uint256 i = 0; i < tokensCount; i++ ){ tokens[i] = balanceOf(msg.sender, i+1); } return(tokens); } function uri(uint256 _tokenId) override public view existId(_tokenId) returns (string memory) { return string( abi.encodePacked( _uri, Strings.toString(_tokenId),".json" ) ); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./extensions/IERC1155MetadataURI.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/introspection/ERC165.sol"; /** * @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: address zero is not a valid owner"); 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 token 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: caller is not token 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}. * * 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 _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` * * Emits a {TransferSingle} event. * * 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}. * * Emits a {TransferBatch} event. * * 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 an {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 `ids` and `amounts` 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; import "../ERC1155.sol"; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "../IERC1155.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWalletToken","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"isMintApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setMintApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","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":"tokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260136005553480156200001657600080fd5b506040516200494c3803806200494c83398181016040528101906200003c91906200040a565b806040516020016200004f9190620004f8565b6040516020818303038152906040526200006f81620000d360201b60201c565b506001600381905550620000986200008c620000ef60201b60201c565b620000f760201b60201c565b6000600460146101000a81548160ff0219169083151502179055508060069080519060200190620000cb929190620001bd565b505062000583565b8060029080519060200190620000eb929190620001bd565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001cb906200054d565b90600052602060002090601f016020900481019282620001ef57600085556200023b565b82601f106200020a57805160ff19168380011785556200023b565b828001600101855582156200023b579182015b828111156200023a5782518255916020019190600101906200021d565b5b5090506200024a91906200024e565b5090565b5b80821115620002695760008160009055506001016200024f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002d6826200028b565b810181811067ffffffffffffffff82111715620002f857620002f76200029c565b5b80604052505050565b60006200030d6200026d565b90506200031b8282620002cb565b919050565b600067ffffffffffffffff8211156200033e576200033d6200029c565b5b62000349826200028b565b9050602081019050919050565b60005b838110156200037657808201518184015260208101905062000359565b8381111562000386576000848401525b50505050565b6000620003a36200039d8462000320565b62000301565b905082815260208101848484011115620003c257620003c162000286565b5b620003cf84828562000356565b509392505050565b600082601f830112620003ef57620003ee62000281565b5b8151620004018482602086016200038c565b91505092915050565b60006020828403121562000423576200042262000277565b5b600082015167ffffffffffffffff8111156200044457620004436200027c565b5b6200045284828501620003d7565b91505092915050565b600081519050919050565b600081905092915050565b60006200047e826200045b565b6200048a818562000466565b93506200049c81856020860162000356565b80840191505092915050565b7f7b69647d2e6a736f6e0000000000000000000000000000000000000000000000600082015250565b6000620004e060098362000466565b9150620004ed82620004a8565b600982019050919050565b600062000506828462000471565b91506200051382620004d1565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056657607f821691505b602082108114156200057d576200057c6200051e565b5b50919050565b6143b980620005936000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c8063715018a6116100c3578063a9c7b7121161007c578063a9c7b71214610363578063d81d0a151461037f578063e985e9c51461039b578063f242432a146103cb578063f2fde38b146103e7578063f5298aca146104035761014c565b8063715018a6146102d95780638456cb59146102e35780638a478477146102ed5780638da5cb5b1461030b578063a22cb46514610329578063a64ed8ba146103455761014c565b80632eb2c2d6116101155780632eb2c2d6146102195780633a4a67ab146102355780633f4ba83a146102655780634e1273f41461026f5780635c975abb1461029f5780636b20c454146102bd5761014c565b8062fdd58e1461015157806301ffc9a71461018157806302fe5305146101b15780630e89341c146101cd578063156e29f6146101fd575b600080fd5b61016b60048036038101906101669190612995565b61041f565b60405161017891906129e4565b60405180910390f35b61019b60048036038101906101969190612a57565b6104e8565b6040516101a89190612a9f565b60405180910390f35b6101cb60048036038101906101c69190612c00565b6105ca565b005b6101e760048036038101906101e29190612c49565b6105ec565b6040516101f49190612cfe565b60405180910390f35b61021760048036038101906102129190612d20565b610667565b005b610233600480360381019061022e9190612edc565b610753565b005b61024f600480360381019061024a9190612fab565b6107f4565b60405161025c9190612a9f565b60405180910390f35b61026d61084a565b005b6102896004803603810190610284919061309b565b61085c565b60405161029691906131d1565b60405180910390f35b6102a7610975565b6040516102b49190612a9f565b60405180910390f35b6102d760048036038101906102d291906131f3565b61098c565b005b6102e1610a29565b005b6102eb610a3d565b005b6102f5610a4f565b60405161030291906131d1565b60405180910390f35b610313610afd565b604051610320919061328d565b60405180910390f35b610343600480360381019061033e91906132d4565b610b27565b005b61034d610b3d565b60405161035a91906129e4565b60405180910390f35b61037d600480360381019061037891906132d4565b610b43565b005b610399600480360381019061039491906131f3565b610ba6565b005b6103b560048036038101906103b09190613314565b610ccc565b6040516103c29190612a9f565b60405180910390f35b6103e560048036038101906103e09190613354565b610d60565b005b61040160048036038101906103fc9190612fab565b610e01565b005b61041d60048036038101906104189190612d20565b610e85565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104879061345d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105b357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105c357506105c282610f22565b5b9050919050565b6105d2610f8c565b80600690805190602001906105e892919061284a565b5050565b606081600554811115610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062b906134c9565b60405180910390fd5b600661063f8461100a565b604051602001610650929190613666565b604051602081830303815290604052915050919050565b816005548111156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906134c9565b60405180910390fd5b6106b6336107f4565b806106f357503373ffffffffffffffffffffffffffffffffffffffff166106db610afd565b73ffffffffffffffffffffffffffffffffffffffff16145b610732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072990613707565b60405180910390fd5b61074d8484846040518060200160405280600081525061116b565b50505050565b61075b61131c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107a157506107a08561079b61131c565b610ccc565b5b6107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d790613799565b60405180910390fd5b6107ed8585858585611324565b5050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610852610f8c565b61085a611646565b565b606081518351146108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061382b565b60405180910390fd5b6000835167ffffffffffffffff8111156108bf576108be612ad5565b5b6040519080825280602002602001820160405280156108ed5781602001602082028036833780820191505090505b50905060005b845181101561096a5761093a8582815181106109125761091161384b565b5b602002602001015185838151811061092d5761092c61384b565b5b602002602001015161041f565b82828151811061094d5761094c61384b565b5b60200260200101818152505080610963906138a9565b90506108f3565b508091505092915050565b6000600460149054906101000a900460ff16905090565b61099461131c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806109da57506109d9836109d461131c565b610ccc565b5b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090613799565b60405180910390fd5b610a248383836116a9565b505050565b610a31610f8c565b610a3b6000611978565b565b610a45610f8c565b610a4d611a3e565b565b6060600060055467ffffffffffffffff811115610a6f57610a6e612ad5565b5b604051908082528060200260200182016040528015610a9d5781602001602082028036833780820191505090505b50905060005b600554811015610af557610ac333600183610abe91906138f2565b61041f565b828281518110610ad657610ad561384b565b5b6020026020010181815250508080610aed906138a9565b915050610aa3565b508091505090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b39610b3261131c565b8383611aa1565b5050565b60055481565b610b4b610f8c565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b8160005b8151811015610c2557600554828281518110610bc957610bc861384b565b5b60200260200101511115610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906134c9565b60405180910390fd5b8080610c1d906138a9565b915050610baa565b50610c2f336107f4565b80610c6c57503373ffffffffffffffffffffffffffffffffffffffff16610c54610afd565b73ffffffffffffffffffffffffffffffffffffffff16145b610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613707565b60405180910390fd5b610cc684848460405180602001604052806000815250611c0e565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d6861131c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610dae5750610dad85610da861131c565b610ccc565b5b610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613799565b60405180910390fd5b610dfa8585858585611e3b565b5050505050565b610e09610f8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906139ba565b60405180910390fd5b610e8281611978565b50565b610e8d61131c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ed35750610ed283610ecd61131c565b610ccc565b5b610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990613799565b60405180910390fd5b610f1d8383836120d7565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610f9461131c565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610afd565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90613a26565b60405180910390fd5b565b60606000821415611052576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611166565b600082905060005b6000821461108457808061106d906138a9565b915050600a8261107d9190613a75565b915061105a565b60008167ffffffffffffffff8111156110a05761109f612ad5565b5b6040519080825280601f01601f1916602001820160405280156110d25781602001600182028036833780820191505090505b5090505b6000851461115f576001826110eb9190613aa6565b9150600a856110fa9190613ada565b603061110691906138f2565b60f81b81838151811061111c5761111b61384b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856111589190613a75565b94506110d6565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613b7d565b60405180910390fd5b60006111e561131c565b905060006111f28561231e565b905060006111ff8561231e565b905061121083600089858589612398565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461126f91906138f2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516112ed929190613b9d565b60405180910390a4611304836000898585896123b6565b611313836000898989896123be565b50505050505050565b600033905090565b8151835114611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613c38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90613cca565b60405180910390fd5b60006113e261131c565b90506113f2818787878787612398565b60005b84518110156115a35760008582815181106114135761141261384b565b5b6020026020010151905060008583815181106114325761143161384b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90613d5c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158891906138f2565b925050819055505050508061159c906138a9565b90506113f5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161161a929190613d7c565b60405180910390a46116308187878787876123b6565b61163e8187878787876125a5565b505050505050565b61164e61278c565b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61169261131c565b60405161169f919061328d565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613e25565b60405180910390fd5b805182511461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613c38565b60405180910390fd5b600061176761131c565b905061178781856000868660405180602001604052806000815250612398565b60005b83518110156118d45760008482815181106117a8576117a761384b565b5b6020026020010151905060008483815181106117c7576117c661384b565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f90613eb7565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806118cc906138a9565b91505061178a565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161194c929190613d7c565b60405180910390a4611972818560008686604051806020016040528060008152506123b6565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a466127d5565b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a8a61131c565b604051611a97919061328d565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790613f49565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c019190612a9f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7590613b7d565b60405180910390fd5b8151835114611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990613c38565b60405180910390fd5b6000611ccc61131c565b9050611cdd81600087878787612398565b60005b8451811015611d9657838181518110611cfc57611cfb61384b565b5b6020026020010151600080878481518110611d1a57611d1961384b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7c91906138f2565b925050819055508080611d8e906138a9565b915050611ce0565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e0e929190613d7c565b60405180910390a4611e25816000878787876123b6565b611e34816000878787876125a5565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613cca565b60405180910390fd5b6000611eb561131c565b90506000611ec28561231e565b90506000611ecf8561231e565b9050611edf838989858589612398565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613d5c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202b91906138f2565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516120a8929190613b9d565b60405180910390a46120be848a8a86868a6123b6565b6120cc848a8a8a8a8a6123be565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90613e25565b60405180910390fd5b600061215161131c565b9050600061215e8461231e565b9050600061216b8461231e565b905061218b83876000858560405180602001604052806000815250612398565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990613eb7565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516122ef929190613b9d565b60405180910390a4612315848860008686604051806020016040528060008152506123b6565b50505050505050565b60606000600167ffffffffffffffff81111561233d5761233c612ad5565b5b60405190808252806020026020018201604052801561236b5781602001602082028036833780820191505090505b50905082816000815181106123835761238261384b565b5b60200260200101818152505080915050919050565b6123a06127d5565b6123ae86868686868661281f565b505050505050565b505050505050565b6123dd8473ffffffffffffffffffffffffffffffffffffffff16612827565b1561259d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612423959493929190613fbe565b602060405180830381600087803b15801561243d57600080fd5b505af192505050801561246e57506040513d601f19601f8201168201806040525081019061246b919061402d565b60015b6125145761247a614067565b806308c379a014156124d7575061248f614089565b8061249a57506124d9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce9190612cfe565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b90614191565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614223565b60405180910390fd5b505b505050505050565b6125c48473ffffffffffffffffffffffffffffffffffffffff16612827565b15612784578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161260a959493929190614243565b602060405180830381600087803b15801561262457600080fd5b505af192505050801561265557506040513d601f19601f82011682018060405250810190612652919061402d565b60015b6126fb57612661614067565b806308c379a014156126be5750612676614089565b8061268157506126c0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b59190612cfe565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614191565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614223565b60405180910390fd5b505b505050505050565b612794610975565b6127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca906142f7565b60405180910390fd5b565b6127dd610975565b1561281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614363565b60405180910390fd5b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461285690613518565b90600052602060002090601f01602090048101928261287857600085556128bf565b82601f1061289157805160ff19168380011785556128bf565b828001600101855582156128bf579182015b828111156128be5782518255916020019190600101906128a3565b5b5090506128cc91906128d0565b5090565b5b808211156128e95760008160009055506001016128d1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061292c82612901565b9050919050565b61293c81612921565b811461294757600080fd5b50565b60008135905061295981612933565b92915050565b6000819050919050565b6129728161295f565b811461297d57600080fd5b50565b60008135905061298f81612969565b92915050565b600080604083850312156129ac576129ab6128f7565b5b60006129ba8582860161294a565b92505060206129cb85828601612980565b9150509250929050565b6129de8161295f565b82525050565b60006020820190506129f960008301846129d5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a34816129ff565b8114612a3f57600080fd5b50565b600081359050612a5181612a2b565b92915050565b600060208284031215612a6d57612a6c6128f7565b5b6000612a7b84828501612a42565b91505092915050565b60008115159050919050565b612a9981612a84565b82525050565b6000602082019050612ab46000830184612a90565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b0d82612ac4565b810181811067ffffffffffffffff82111715612b2c57612b2b612ad5565b5b80604052505050565b6000612b3f6128ed565b9050612b4b8282612b04565b919050565b600067ffffffffffffffff821115612b6b57612b6a612ad5565b5b612b7482612ac4565b9050602081019050919050565b82818337600083830152505050565b6000612ba3612b9e84612b50565b612b35565b905082815260208101848484011115612bbf57612bbe612abf565b5b612bca848285612b81565b509392505050565b600082601f830112612be757612be6612aba565b5b8135612bf7848260208601612b90565b91505092915050565b600060208284031215612c1657612c156128f7565b5b600082013567ffffffffffffffff811115612c3457612c336128fc565b5b612c4084828501612bd2565b91505092915050565b600060208284031215612c5f57612c5e6128f7565b5b6000612c6d84828501612980565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cb0578082015181840152602081019050612c95565b83811115612cbf576000848401525b50505050565b6000612cd082612c76565b612cda8185612c81565b9350612cea818560208601612c92565b612cf381612ac4565b840191505092915050565b60006020820190508181036000830152612d188184612cc5565b905092915050565b600080600060608486031215612d3957612d386128f7565b5b6000612d478682870161294a565b9350506020612d5886828701612980565b9250506040612d6986828701612980565b9150509250925092565b600067ffffffffffffffff821115612d8e57612d8d612ad5565b5b602082029050602081019050919050565b600080fd5b6000612db7612db284612d73565b612b35565b90508083825260208201905060208402830185811115612dda57612dd9612d9f565b5b835b81811015612e035780612def8882612980565b845260208401935050602081019050612ddc565b5050509392505050565b600082601f830112612e2257612e21612aba565b5b8135612e32848260208601612da4565b91505092915050565b600067ffffffffffffffff821115612e5657612e55612ad5565b5b612e5f82612ac4565b9050602081019050919050565b6000612e7f612e7a84612e3b565b612b35565b905082815260208101848484011115612e9b57612e9a612abf565b5b612ea6848285612b81565b509392505050565b600082601f830112612ec357612ec2612aba565b5b8135612ed3848260208601612e6c565b91505092915050565b600080600080600060a08688031215612ef857612ef76128f7565b5b6000612f068882890161294a565b9550506020612f178882890161294a565b945050604086013567ffffffffffffffff811115612f3857612f376128fc565b5b612f4488828901612e0d565b935050606086013567ffffffffffffffff811115612f6557612f646128fc565b5b612f7188828901612e0d565b925050608086013567ffffffffffffffff811115612f9257612f916128fc565b5b612f9e88828901612eae565b9150509295509295909350565b600060208284031215612fc157612fc06128f7565b5b6000612fcf8482850161294a565b91505092915050565b600067ffffffffffffffff821115612ff357612ff2612ad5565b5b602082029050602081019050919050565b600061301761301284612fd8565b612b35565b9050808382526020820190506020840283018581111561303a57613039612d9f565b5b835b81811015613063578061304f888261294a565b84526020840193505060208101905061303c565b5050509392505050565b600082601f83011261308257613081612aba565b5b8135613092848260208601613004565b91505092915050565b600080604083850312156130b2576130b16128f7565b5b600083013567ffffffffffffffff8111156130d0576130cf6128fc565b5b6130dc8582860161306d565b925050602083013567ffffffffffffffff8111156130fd576130fc6128fc565b5b61310985828601612e0d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131488161295f565b82525050565b600061315a838361313f565b60208301905092915050565b6000602082019050919050565b600061317e82613113565b613188818561311e565b93506131938361312f565b8060005b838110156131c45781516131ab888261314e565b97506131b683613166565b925050600181019050613197565b5085935050505092915050565b600060208201905081810360008301526131eb8184613173565b905092915050565b60008060006060848603121561320c5761320b6128f7565b5b600061321a8682870161294a565b935050602084013567ffffffffffffffff81111561323b5761323a6128fc565b5b61324786828701612e0d565b925050604084013567ffffffffffffffff811115613268576132676128fc565b5b61327486828701612e0d565b9150509250925092565b61328781612921565b82525050565b60006020820190506132a2600083018461327e565b92915050565b6132b181612a84565b81146132bc57600080fd5b50565b6000813590506132ce816132a8565b92915050565b600080604083850312156132eb576132ea6128f7565b5b60006132f98582860161294a565b925050602061330a858286016132bf565b9150509250929050565b6000806040838503121561332b5761332a6128f7565b5b60006133398582860161294a565b925050602061334a8582860161294a565b9150509250929050565b600080600080600060a086880312156133705761336f6128f7565b5b600061337e8882890161294a565b955050602061338f8882890161294a565b94505060406133a088828901612980565b93505060606133b188828901612980565b925050608086013567ffffffffffffffff8111156133d2576133d16128fc565b5b6133de88828901612eae565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613447602a83612c81565b9150613452826133eb565b604082019050919050565b600060208201905081810360008301526134768161343a565b9050919050565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b60006134b3601083612c81565b91506134be8261347d565b602082019050919050565b600060208201905081810360008301526134e2816134a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061353057607f821691505b60208210811415613544576135436134e9565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461357781613518565b613581818661354a565b9450600182166000811461359c57600181146135ad576135e0565b60ff198316865281860193506135e0565b6135b685613555565b60005b838110156135d8578154818901526001820191506020810190506135b9565b838801955050505b50505092915050565b60006135f482612c76565b6135fe818561354a565b935061360e818560208601612c92565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061365060058361354a565b915061365b8261361a565b600582019050919050565b6000613672828561356a565b915061367e82846135e9565b915061368982613643565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006136f1602983612c81565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613783602f83612c81565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613815602983612c81565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138b48261295f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138e7576138e661387a565b5b600182019050919050565b60006138fd8261295f565b91506139088361295f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393d5761393c61387a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139a4602683612c81565b91506139af82613948565b604082019050919050565b600060208201905081810360008301526139d381613997565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a10602083612c81565b9150613a1b826139da565b602082019050919050565b60006020820190508181036000830152613a3f81613a03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a808261295f565b9150613a8b8361295f565b925082613a9b57613a9a613a46565b5b828204905092915050565b6000613ab18261295f565b9150613abc8361295f565b925082821015613acf57613ace61387a565b5b828203905092915050565b6000613ae58261295f565b9150613af08361295f565b925082613b0057613aff613a46565b5b828206905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b67602183612c81565b9150613b7282613b0b565b604082019050919050565b60006020820190508181036000830152613b9681613b5a565b9050919050565b6000604082019050613bb260008301856129d5565b613bbf60208301846129d5565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613c22602883612c81565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cb4602583612c81565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613d46602a83612c81565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b60006040820190508181036000830152613d968185613173565b90508181036020830152613daa8184613173565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0f602383612c81565b9150613e1a82613db3565b604082019050919050565b60006020820190508181036000830152613e3e81613e02565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613ea1602483612c81565b9150613eac82613e45565b604082019050919050565b60006020820190508181036000830152613ed081613e94565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613f33602983612c81565b9150613f3e82613ed7565b604082019050919050565b60006020820190508181036000830152613f6281613f26565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613f9082613f69565b613f9a8185613f74565b9350613faa818560208601612c92565b613fb381612ac4565b840191505092915050565b600060a082019050613fd3600083018861327e565b613fe0602083018761327e565b613fed60408301866129d5565b613ffa60608301856129d5565b818103608083015261400c8184613f85565b90509695505050505050565b60008151905061402781612a2b565b92915050565b600060208284031215614043576140426128f7565b5b600061405184828501614018565b91505092915050565b60008160e01c9050919050565b600060033d11156140865760046000803e61408360005161405a565b90505b90565b600060443d10156140995761411c565b6140a16128ed565b60043d036004823e80513d602482011167ffffffffffffffff821117156140c957505061411c565b808201805167ffffffffffffffff8111156140e7575050505061411c565b80602083010160043d03850181111561410457505050505061411c565b61411382602001850186612b04565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061417b603483612c81565b91506141868261411f565b604082019050919050565b600060208201905081810360008301526141aa8161416e565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061420d602883612c81565b9150614218826141b1565b604082019050919050565b6000602082019050818103600083015261423c81614200565b9050919050565b600060a082019050614258600083018861327e565b614265602083018761327e565b81810360408301526142778186613173565b9050818103606083015261428b8185613173565b9050818103608083015261429f8184613f85565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006142e1601483612c81565b91506142ec826142ab565b602082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061434d601083612c81565b915061435882614317565b602082019050919050565b6000602082019050818103600083015261437c81614340565b905091905056fea2646970667358221220c83ec2db7b326cddee6f25fef521d04a0d0b1693de4d4428acd300488a58e0f964736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d5a674739336376543479545669716b324e72745a5363716347686d4e644e6a79695372534a707251353839342f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d5a674739336376543479545669716b324e72745a5363716347686d4e644e6a79695372534a707251353839342f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseUri (string): https://powerplins.mypinata.cloud/ipfs/QmZgG93cvT4yTViqk2NrtZScqcGhmNdNjyiSrSJprQ5894/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 68747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75
Arg [3] : 642f697066732f516d5a674739336376543479545669716b324e72745a536371
Arg [4] : 6347686d4e644e6a79695372534a707251353839342f00000000000000000000
Deployed ByteCode Sourcemap
429:2677:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:227:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1288:87:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2562:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1680:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4065:427:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1521:123:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1219:63;;;:::i;:::-;;2569:508:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:84:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;730:348:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1831:101:0;;;:::i;:::-;;1154:59:13;;;:::i;:::-;;2287:269;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3145:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;526:28:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1381:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1966:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3365:166:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2081:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;408:316:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:227:3;2271:7;2317:1;2298:21;;:7;:21;;;;2290:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2383:9;:13;2393:2;2383:13;;;;;;;;;;;:22;2397:7;2383:22;;;;;;;;;;;;;;;;2376:29;;2185:227;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;1288:87:13:-;1094:13:0;:11;:13::i;:::-;1362:6:13::1;1355:4;:13;;;;;;;;;;;;:::i;:::-;;1288:87:::0;:::o;2562:252::-;2641:13;2622:8;901:11;;889:8;:23;;881:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;2727:4:::1;2749:26;2766:8;2749:16;:26::i;:::-;2693:104;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2666:141;;2562:252:::0;;;;:::o;1680:280::-;1750:7;901:11;;889:8;:23;;881:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1789:32:::1;1810:10;1789:20;:32::i;:::-;:57;;;;1836:10;1825:21;;:7;:5;:7::i;:::-;:21;;;1789:57;1768:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:30;1929:2;1933:7;1942:6;1923:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;1680:280:::0;;;;:::o;4065:427:3:-;4298:12;:10;:12::i;:::-;4290:20;;:4;:20;;;:60;;;;4314:36;4331:4;4337:12;:10;:12::i;:::-;4314:16;:36::i;:::-;4290:60;4269:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;4433:52;4456:4;4462:2;4466:3;4471:7;4480:4;4433:22;:52::i;:::-;4065:427;;;;;:::o;1521:123:13:-;1590:4;1613:14;:24;1628:8;1613:24;;;;;;;;;;;;;;;;;;;;;;;;;1606:31;;1521:123;;;:::o;1219:63::-;1094:13:0;:11;:13::i;:::-;1265:10:13::1;:8;:10::i;:::-;1219:63::o:0;2569:508:3:-;2720:16;2779:3;:10;2760:8;:15;:29;2752:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:30;2893:8;:15;2879:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:63;;2925:9;2920:120;2944:8;:15;2940:1;:19;2920:120;;;2999:30;3009:8;3018:1;3009:11;;;;;;;;:::i;:::-;;;;;;;;3022:3;3026:1;3022:6;;;;;;;;:::i;:::-;;;;;;;;2999:9;:30::i;:::-;2980:13;2994:1;2980:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2961:3;;;;:::i;:::-;;;2920:120;;;;3057:13;3050:20;;;2569:508;;;;:::o;1615:84:1:-;1662:4;1685:7;;;;;;;;;;;1678:14;;1615:84;:::o;730:348:6:-;900:12;:10;:12::i;:::-;889:23;;:7;:23;;;:66;;;;916:39;933:7;942:12;:10;:12::i;:::-;916:16;:39::i;:::-;889:66;868:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;1039:32;1050:7;1059:3;1064:6;1039:10;:32::i;:::-;730:348;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1154:59:13:-;1094:13:0;:11;:13::i;:::-;1198:8:13::1;:6;:8::i;:::-;1154:59::o:0;2287:269::-;2335:13;2359:23;2399:11;;2385:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2359:52;;2425:9;2421:105;2444:11;;2440:1;:15;2421:105;;;2489:26;2499:10;2513:1;2511;:3;;;;:::i;:::-;2489:9;:26::i;:::-;2476:6;2483:1;2476:9;;;;;;;;:::i;:::-;;;;;;;:39;;;;;2457:3;;;;;:::i;:::-;;;;2421:105;;;;2542:6;2535:14;;;2287:269;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;3145:153:3:-;3239:52;3258:12;:10;:12::i;:::-;3272:8;3282;3239:18;:52::i;:::-;3145:153;;:::o;526:28:13:-;;;;:::o;1381:134::-;1094:13:0;:11;:13::i;:::-;1500:8:13::1;1473:14;:24;1488:8;1473:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;1381:134:::0;;:::o;1966:315::-;2062:8;1014:6;1010:121;1028:9;:16;1024:1;:20;1010:121;;;1088:11;;1072:9;1082:1;1072:12;;;;;;;;:::i;:::-;;;;;;;;:27;;1064:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1046:3;;;;;:::i;:::-;;;;1010:121;;;;2103:32:::1;2124:10;2103:20;:32::i;:::-;:57;;;;2150:10;2139:21;;:7;:5;:7::i;:::-;:21;;;2103:57;2082:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:37;2248:2;2252:8;2262:7;2237:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;1966:315:::0;;;;:::o;3365:166:3:-;3464:4;3487:18;:27;3506:7;3487:27;;;;;;;;;;;;;;;:37;3515:8;3487:37;;;;;;;;;;;;;;;;;;;;;;;;;3480:44;;3365:166;;;;:::o;3598:395::-;3806:12;:10;:12::i;:::-;3798:20;;:4;:20;;;:60;;;;3822:36;3839:4;3845:12;:10;:12::i;:::-;3822:16;:36::i;:::-;3798:60;3777:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;3941:45;3959:4;3965:2;3969;3973:6;3981:4;3941:17;:45::i;:::-;3598:395;;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;408:316:6:-;553:12;:10;:12::i;:::-;542:23;;:7;:23;;;:66;;;;569:39;586:7;595:12;:10;:12::i;:::-;569:16;:39::i;:::-;542:66;521:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;692:25;698:7;707:2;711:5;692;:25::i;:::-;408:316;;;:::o;829:155:11:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;392:703:10:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;8632:709:3:-;8793:1;8779:16;;:2;:16;;;;8771:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8844:16;8863:12;:10;:12::i;:::-;8844:31;;8885:20;8908:21;8926:2;8908:17;:21::i;:::-;8885:44;;8939:24;8966:25;8984:6;8966:17;:25::i;:::-;8939:52;;9002:66;9023:8;9041:1;9045:2;9049:3;9054:7;9063:4;9002:20;:66::i;:::-;9100:6;9079:9;:13;9089:2;9079:13;;;;;;;;;;;:17;9093:2;9079:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9158:2;9121:52;;9154:1;9121:52;;9136:8;9121:52;;;9162:2;9166:6;9121:52;;;;;;;:::i;:::-;;;;;;;;9184:65;9204:8;9222:1;9226:2;9230:3;9235:7;9244:4;9184:19;:65::i;:::-;9260:74;9291:8;9309:1;9313:2;9317;9321:6;9329:4;9260:30;:74::i;:::-;8761:580;;;8632:709;;;;:::o;640:96:9:-;693:7;719:10;712:17;;640:96;:::o;6235:1115:3:-;6455:7;:14;6441:3;:10;:28;6433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6546:1;6532:16;;:2;:16;;;;6524:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:16;6620:12;:10;:12::i;:::-;6601:31;;6643:60;6664:8;6674:4;6680:2;6684:3;6689:7;6698:4;6643:20;:60::i;:::-;6719:9;6714:411;6738:3;:10;6734:1;:14;6714:411;;;6769:10;6782:3;6786:1;6782:6;;;;;;;;:::i;:::-;;;;;;;;6769:19;;6802:14;6819:7;6827:1;6819:10;;;;;;;;:::i;:::-;;;;;;;;6802:27;;6844:19;6866:9;:13;6876:2;6866:13;;;;;;;;;;;:19;6880:4;6866:19;;;;;;;;;;;;;;;;6844:41;;6922:6;6907:11;:21;;6899:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7053:6;7039:11;:20;7017:9;:13;7027:2;7017:13;;;;;;;;;;;:19;7031:4;7017:19;;;;;;;;;;;;;;;:42;;;;7108:6;7087:9;:13;7097:2;7087:13;;;;;;;;;;;:17;7101:2;7087:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6755:370;;;6750:3;;;;:::i;:::-;;;6714:411;;;;7170:2;7140:47;;7164:4;7140:47;;7154:8;7140:47;;;7174:3;7179:7;7140:47;;;;;;;:::i;:::-;;;;;;;;7198:59;7218:8;7228:4;7234:2;7238:3;7243:7;7252:4;7198:19;:59::i;:::-;7268:75;7304:8;7314:4;7320:2;7324:3;7329:7;7338:4;7268:35;:75::i;:::-;6423:927;6235:1115;;;;;:::o;2433:117:1:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:7;;:15;;;;;;;;;;;;;;;;;;2521:22;2530:12;:10;:12::i;:::-;2521:22;;;;;;:::i;:::-;;;;;;;;2433:117::o:0;11833:943:3:-;11996:1;11980:18;;:4;:18;;;;11972:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12070:7;:14;12056:3;:10;:28;12048:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12140:16;12159:12;:10;:12::i;:::-;12140:31;;12182:66;12203:8;12213:4;12227:1;12231:3;12236:7;12182:66;;;;;;;;;;;;:20;:66::i;:::-;12264:9;12259:364;12283:3;:10;12279:1;:14;12259:364;;;12314:10;12327:3;12331:1;12327:6;;;;;;;;:::i;:::-;;;;;;;;12314:19;;12347:14;12364:7;12372:1;12364:10;;;;;;;;:::i;:::-;;;;;;;;12347:27;;12389:19;12411:9;:13;12421:2;12411:13;;;;;;;;;;;:19;12425:4;12411:19;;;;;;;;;;;;;;;;12389:41;;12467:6;12452:11;:21;;12444:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12592:6;12578:11;:20;12556:9;:13;12566:2;12556:13;;;;;;;;;;;:19;12570:4;12556:19;;;;;;;;;;;;;;;:42;;;;12300:323;;;12295:3;;;;;:::i;:::-;;;;12259:364;;;;12676:1;12638:55;;12662:4;12638:55;;12652:8;12638:55;;;12680:3;12685:7;12638:55;;;;;;;:::i;:::-;;;;;;;;12704:65;12724:8;12734:4;12748:1;12752:3;12757:7;12704:65;;;;;;;;;;;;:19;:65::i;:::-;11962:814;11833:943;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;2186:115:1:-;1239:19;:17;:19::i;:::-;2255:4:::1;2245:7;;:14;;;;;;;;;;;;;;;;;;2274:20;2281:12;:10;:12::i;:::-;2274:20;;;;;;:::i;:::-;;;;;;;;2186:115::o:0;12912:323:3:-;13062:8;13053:17;;:5;:17;;;;13045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13164:8;13126:18;:25;13145:5;13126:25;;;;;;;;;;;;;;;:35;13152:8;13126:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13209:8;13187:41;;13202:5;13187:41;;;13219:8;13187:41;;;;;;:::i;:::-;;;;;;;;12912:323;;;:::o;9731:791::-;9917:1;9903:16;;:2;:16;;;;9895:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:7;:14;9975:3;:10;:28;9967:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10059:16;10078:12;:10;:12::i;:::-;10059:31;;10101:66;10122:8;10140:1;10144:2;10148:3;10153:7;10162:4;10101:20;:66::i;:::-;10183:9;10178:101;10202:3;:10;10198:1;:14;10178:101;;;10258:7;10266:1;10258:10;;;;;;;;:::i;:::-;;;;;;;;10233:9;:17;10243:3;10247:1;10243:6;;;;;;;;:::i;:::-;;;;;;;;10233:17;;;;;;;;;;;:21;10251:2;10233:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;10214:3;;;;;:::i;:::-;;;;10178:101;;;;10330:2;10294:53;;10326:1;10294:53;;10308:8;10294:53;;;10334:3;10339:7;10294:53;;;;;;;:::i;:::-;;;;;;;;10358:65;10378:8;10396:1;10400:2;10404:3;10409:7;10418:4;10358:19;:65::i;:::-;10434:81;10470:8;10488:1;10492:2;10496:3;10501:7;10510:4;10434:35;:81::i;:::-;9885:637;9731:791;;;;:::o;4942:947::-;5137:1;5123:16;;:2;:16;;;;5115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5192:16;5211:12;:10;:12::i;:::-;5192:31;;5233:20;5256:21;5274:2;5256:17;:21::i;:::-;5233:44;;5287:24;5314:25;5332:6;5314:17;:25::i;:::-;5287:52;;5350:60;5371:8;5381:4;5387:2;5391:3;5396:7;5405:4;5350:20;:60::i;:::-;5421:19;5443:9;:13;5453:2;5443:13;;;;;;;;;;;:19;5457:4;5443:19;;;;;;;;;;;;;;;;5421:41;;5495:6;5480:11;:21;;5472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5618:6;5604:11;:20;5582:9;:13;5592:2;5582:13;;;;;;;;;;;:19;5596:4;5582:19;;;;;;;;;;;;;;;:42;;;;5665:6;5644:9;:13;5654:2;5644:13;;;;;;;;;;;:17;5658:2;5644:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5718:2;5687:46;;5712:4;5687:46;;5702:8;5687:46;;;5722:2;5726:6;5687:46;;;;;;;:::i;:::-;;;;;;;;5744:59;5764:8;5774:4;5780:2;5784:3;5789:7;5798:4;5744:19;:59::i;:::-;5814:68;5845:8;5855:4;5861:2;5865;5869:6;5877:4;5814:30;:68::i;:::-;5105:784;;;;4942:947;;;;;:::o;10808:786::-;10946:1;10930:18;;:4;:18;;;;10922:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10999:16;11018:12;:10;:12::i;:::-;10999:31;;11040:20;11063:21;11081:2;11063:17;:21::i;:::-;11040:44;;11094:24;11121:25;11139:6;11121:17;:25::i;:::-;11094:52;;11157:66;11178:8;11188:4;11202:1;11206:3;11211:7;11157:66;;;;;;;;;;;;:20;:66::i;:::-;11234:19;11256:9;:13;11266:2;11256:13;;;;;;;;;;;:19;11270:4;11256:19;;;;;;;;;;;;;;;;11234:41;;11308:6;11293:11;:21;;11285:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11425:6;11411:11;:20;11389:9;:13;11399:2;11389:13;;;;;;;;;;;:19;11403:4;11389:19;;;;;;;;;;;;;;;:42;;;;11496:1;11457:54;;11482:4;11457:54;;11472:8;11457:54;;;11500:2;11504:6;11457:54;;;;;;;:::i;:::-;;;;;;;;11522:65;11542:8;11552:4;11566:1;11570:3;11575:7;11522:65;;;;;;;;;;;;:19;:65::i;:::-;10912:682;;;;10808:786;;;:::o;17066:193::-;17132:16;17160:22;17199:1;17185:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17160:41;;17222:7;17211:5;17217:1;17211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17247:5;17240:12;;;17066:193;;;:::o;2820:284:13:-;1239:19:1;:17;:19::i;:::-;3031:66:13::1;3058:8;3068:4;3074:2;3078:3;3083:7;3092:4;3031:26;:66::i;:::-;2820:284:::0;;;;;;:::o;15318:213:3:-;;;;;;;:::o;15537:725::-;15744:15;:2;:13;;;:15::i;:::-;15740:516;;;15796:2;15779:38;;;15818:8;15828:4;15834:2;15838:6;15846:4;15779:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15775:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16122:6;16115:14;;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;;;16169:62;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;15912:43;;;15900:55;;;:8;:55;;;;15896:152;;15979:50;;;;;;;;;;:::i;:::-;;;;;;;;15896:152;15852:210;15740:516;15537:725;;;;;;:::o;16268:792::-;16500:15;:2;:13;;;:15::i;:::-;16496:558;;;16552:2;16535:43;;;16579:8;16589:4;16595:3;16600:7;16609:4;16535:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16531:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16920:6;16913:14;;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;;;16967:62;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;16705:48;;;16693:60;;;:8;:60;;;;16689:157;;16777:50;;;;;;;;;;:::i;:::-;;;;;;;;16689:157;16615:245;16496:558;16268:792;;;;;;:::o;1945:106:1:-;2011:8;:6;:8::i;:::-;2003:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:106::o;1767:::-;1837:8;:6;:8::i;:::-;1836:9;1828:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1767:106::o;14171:214:3:-;;;;;;;:::o;1175:320:8:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;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:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:619::-;7636:6;7644;7652;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7954:2;7980:53;8025:7;8016:6;8005:9;8001:22;7980:53;:::i;:::-;7970:63;;7925:118;8082:2;8108:53;8153:7;8144:6;8133:9;8129:22;8108:53;:::i;:::-;8098:63;;8053:118;7559:619;;;;;:::o;8184:311::-;8261:4;8351:18;8343:6;8340:30;8337:56;;;8373:18;;:::i;:::-;8337:56;8423:4;8415:6;8411:17;8403:25;;8483:4;8477;8473:15;8465:23;;8184:311;;;:::o;8501:117::-;8610:1;8607;8600:12;8641:710;8737:5;8762:81;8778:64;8835:6;8778:64;:::i;:::-;8762:81;:::i;:::-;8753:90;;8863:5;8892:6;8885:5;8878:21;8926:4;8919:5;8915:16;8908:23;;8979:4;8971:6;8967:17;8959:6;8955:30;9008:3;9000:6;8997:15;8994:122;;;9027:79;;:::i;:::-;8994:122;9142:6;9125:220;9159:6;9154:3;9151:15;9125:220;;;9234:3;9263:37;9296:3;9284:10;9263:37;:::i;:::-;9258:3;9251:50;9330:4;9325:3;9321:14;9314:21;;9201:144;9185:4;9180:3;9176:14;9169:21;;9125:220;;;9129:21;8743:608;;8641:710;;;;;:::o;9374:370::-;9445:5;9494:3;9487:4;9479:6;9475:17;9471:27;9461:122;;9502:79;;:::i;:::-;9461:122;9619:6;9606:20;9644:94;9734:3;9726:6;9719:4;9711:6;9707:17;9644:94;:::i;:::-;9635:103;;9451:293;9374:370;;;;:::o;9750:307::-;9811:4;9901:18;9893:6;9890:30;9887:56;;;9923:18;;:::i;:::-;9887:56;9961:29;9983:6;9961:29;:::i;:::-;9953:37;;10045:4;10039;10035:15;10027:23;;9750:307;;;:::o;10063:410::-;10140:5;10165:65;10181:48;10222:6;10181:48;:::i;:::-;10165:65;:::i;:::-;10156:74;;10253:6;10246:5;10239:21;10291:4;10284:5;10280:16;10329:3;10320:6;10315:3;10311:16;10308:25;10305:112;;;10336:79;;:::i;:::-;10305:112;10426:41;10460:6;10455:3;10450;10426:41;:::i;:::-;10146:327;10063:410;;;;;:::o;10492:338::-;10547:5;10596:3;10589:4;10581:6;10577:17;10573:27;10563:122;;10604:79;;:::i;:::-;10563:122;10721:6;10708:20;10746:78;10820:3;10812:6;10805:4;10797:6;10793:17;10746:78;:::i;:::-;10737:87;;10553:277;10492:338;;;;:::o;10836:1509::-;10990:6;10998;11006;11014;11022;11071:3;11059:9;11050:7;11046:23;11042:33;11039:120;;;11078:79;;:::i;:::-;11039:120;11198:1;11223:53;11268:7;11259:6;11248:9;11244:22;11223:53;:::i;:::-;11213:63;;11169:117;11325:2;11351:53;11396:7;11387:6;11376:9;11372:22;11351:53;:::i;:::-;11341:63;;11296:118;11481:2;11470:9;11466:18;11453:32;11512:18;11504:6;11501:30;11498:117;;;11534:79;;:::i;:::-;11498:117;11639:78;11709:7;11700:6;11689:9;11685:22;11639:78;:::i;:::-;11629:88;;11424:303;11794:2;11783:9;11779:18;11766:32;11825:18;11817:6;11814:30;11811:117;;;11847:79;;:::i;:::-;11811:117;11952:78;12022:7;12013:6;12002:9;11998:22;11952:78;:::i;:::-;11942:88;;11737:303;12107:3;12096:9;12092:19;12079:33;12139:18;12131:6;12128:30;12125:117;;;12161:79;;:::i;:::-;12125:117;12266:62;12320:7;12311:6;12300:9;12296:22;12266:62;:::i;:::-;12256:72;;12050:288;10836:1509;;;;;;;;:::o;12351:329::-;12410:6;12459:2;12447:9;12438:7;12434:23;12430:32;12427:119;;;12465:79;;:::i;:::-;12427:119;12585:1;12610:53;12655:7;12646:6;12635:9;12631:22;12610:53;:::i;:::-;12600:63;;12556:117;12351:329;;;;:::o;12686:311::-;12763:4;12853:18;12845:6;12842:30;12839:56;;;12875:18;;:::i;:::-;12839:56;12925:4;12917:6;12913:17;12905:25;;12985:4;12979;12975:15;12967:23;;12686:311;;;:::o;13020:710::-;13116:5;13141:81;13157:64;13214:6;13157:64;:::i;:::-;13141:81;:::i;:::-;13132:90;;13242:5;13271:6;13264:5;13257:21;13305:4;13298:5;13294:16;13287:23;;13358:4;13350:6;13346:17;13338:6;13334:30;13387:3;13379:6;13376:15;13373:122;;;13406:79;;:::i;:::-;13373:122;13521:6;13504:220;13538:6;13533:3;13530:15;13504:220;;;13613:3;13642:37;13675:3;13663:10;13642:37;:::i;:::-;13637:3;13630:50;13709:4;13704:3;13700:14;13693:21;;13580:144;13564:4;13559:3;13555:14;13548:21;;13504:220;;;13508:21;13122:608;;13020:710;;;;;:::o;13753:370::-;13824:5;13873:3;13866:4;13858:6;13854:17;13850:27;13840:122;;13881:79;;:::i;:::-;13840:122;13998:6;13985:20;14023:94;14113:3;14105:6;14098:4;14090:6;14086:17;14023:94;:::i;:::-;14014:103;;13830:293;13753:370;;;;:::o;14129:894::-;14247:6;14255;14304:2;14292:9;14283:7;14279:23;14275:32;14272:119;;;14310:79;;:::i;:::-;14272:119;14458:1;14447:9;14443:17;14430:31;14488:18;14480:6;14477:30;14474:117;;;14510:79;;:::i;:::-;14474:117;14615:78;14685:7;14676:6;14665:9;14661:22;14615:78;:::i;:::-;14605:88;;14401:302;14770:2;14759:9;14755:18;14742:32;14801:18;14793:6;14790:30;14787:117;;;14823:79;;:::i;:::-;14787:117;14928:78;14998:7;14989:6;14978:9;14974:22;14928:78;:::i;:::-;14918:88;;14713:303;14129:894;;;;;:::o;15029:114::-;15096:6;15130:5;15124:12;15114:22;;15029:114;;;:::o;15149:184::-;15248:11;15282:6;15277:3;15270:19;15322:4;15317:3;15313:14;15298:29;;15149:184;;;;:::o;15339:132::-;15406:4;15429:3;15421:11;;15459:4;15454:3;15450:14;15442:22;;15339:132;;;:::o;15477:108::-;15554:24;15572:5;15554:24;:::i;:::-;15549:3;15542:37;15477:108;;:::o;15591:179::-;15660:10;15681:46;15723:3;15715:6;15681:46;:::i;:::-;15759:4;15754:3;15750:14;15736:28;;15591:179;;;;:::o;15776:113::-;15846:4;15878;15873:3;15869:14;15861:22;;15776:113;;;:::o;15925:732::-;16044:3;16073:54;16121:5;16073:54;:::i;:::-;16143:86;16222:6;16217:3;16143:86;:::i;:::-;16136:93;;16253:56;16303:5;16253:56;:::i;:::-;16332:7;16363:1;16348:284;16373:6;16370:1;16367:13;16348:284;;;16449:6;16443:13;16476:63;16535:3;16520:13;16476:63;:::i;:::-;16469:70;;16562:60;16615:6;16562:60;:::i;:::-;16552:70;;16408:224;16395:1;16392;16388:9;16383:14;;16348:284;;;16352:14;16648:3;16641:10;;16049:608;;;15925:732;;;;:::o;16663:373::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:108;17024:4;17015:6;16921:108;:::i;:::-;16913:116;;16663:373;;;;:::o;17042:1039::-;17169:6;17177;17185;17234:2;17222:9;17213:7;17209:23;17205:32;17202:119;;;17240:79;;:::i;:::-;17202:119;17360:1;17385:53;17430:7;17421:6;17410:9;17406:22;17385:53;:::i;:::-;17375:63;;17331:117;17515:2;17504:9;17500:18;17487:32;17546:18;17538:6;17535:30;17532:117;;;17568:79;;:::i;:::-;17532:117;17673:78;17743:7;17734:6;17723:9;17719:22;17673:78;:::i;:::-;17663:88;;17458:303;17828:2;17817:9;17813:18;17800:32;17859:18;17851:6;17848:30;17845:117;;;17881:79;;:::i;:::-;17845:117;17986:78;18056:7;18047:6;18036:9;18032:22;17986:78;:::i;:::-;17976:88;;17771:303;17042:1039;;;;;:::o;18087:118::-;18174:24;18192:5;18174:24;:::i;:::-;18169:3;18162:37;18087:118;;:::o;18211:222::-;18304:4;18342:2;18331:9;18327:18;18319:26;;18355:71;18423:1;18412:9;18408:17;18399:6;18355:71;:::i;:::-;18211:222;;;;:::o;18439:116::-;18509:21;18524:5;18509:21;:::i;:::-;18502:5;18499:32;18489:60;;18545:1;18542;18535:12;18489:60;18439:116;:::o;18561:133::-;18604:5;18642:6;18629:20;18620:29;;18658:30;18682:5;18658:30;:::i;:::-;18561:133;;;;:::o;18700:468::-;18765:6;18773;18822:2;18810:9;18801:7;18797:23;18793:32;18790:119;;;18828:79;;:::i;:::-;18790:119;18948:1;18973:53;19018:7;19009:6;18998:9;18994:22;18973:53;:::i;:::-;18963:63;;18919:117;19075:2;19101:50;19143:7;19134:6;19123:9;19119:22;19101:50;:::i;:::-;19091:60;;19046:115;18700:468;;;;;:::o;19174:474::-;19242:6;19250;19299:2;19287:9;19278:7;19274:23;19270:32;19267:119;;;19305:79;;:::i;:::-;19267:119;19425:1;19450:53;19495:7;19486:6;19475:9;19471:22;19450:53;:::i;:::-;19440:63;;19396:117;19552:2;19578:53;19623:7;19614:6;19603:9;19599:22;19578:53;:::i;:::-;19568:63;;19523:118;19174:474;;;;;:::o;19654:1089::-;19758:6;19766;19774;19782;19790;19839:3;19827:9;19818:7;19814:23;19810:33;19807:120;;;19846:79;;:::i;:::-;19807:120;19966:1;19991:53;20036:7;20027:6;20016:9;20012:22;19991:53;:::i;:::-;19981:63;;19937:117;20093:2;20119:53;20164:7;20155:6;20144:9;20140:22;20119:53;:::i;:::-;20109:63;;20064:118;20221:2;20247:53;20292:7;20283:6;20272:9;20268:22;20247:53;:::i;:::-;20237:63;;20192:118;20349:2;20375:53;20420:7;20411:6;20400:9;20396:22;20375:53;:::i;:::-;20365:63;;20320:118;20505:3;20494:9;20490:19;20477:33;20537:18;20529:6;20526:30;20523:117;;;20559:79;;:::i;:::-;20523:117;20664:62;20718:7;20709:6;20698:9;20694:22;20664:62;:::i;:::-;20654:72;;20448:288;19654:1089;;;;;;;;:::o;20749:229::-;20889:34;20885:1;20877:6;20873:14;20866:58;20958:12;20953:2;20945:6;20941:15;20934:37;20749:229;:::o;20984:366::-;21126:3;21147:67;21211:2;21206:3;21147:67;:::i;:::-;21140:74;;21223:93;21312:3;21223:93;:::i;:::-;21341:2;21336:3;21332:12;21325:19;;20984:366;;;:::o;21356:419::-;21522:4;21560:2;21549:9;21545:18;21537:26;;21609:9;21603:4;21599:20;21595:1;21584:9;21580:17;21573:47;21637:131;21763:4;21637:131;:::i;:::-;21629:139;;21356:419;;;:::o;21781:166::-;21921:18;21917:1;21909:6;21905:14;21898:42;21781:166;:::o;21953:366::-;22095:3;22116:67;22180:2;22175:3;22116:67;:::i;:::-;22109:74;;22192:93;22281:3;22192:93;:::i;:::-;22310:2;22305:3;22301:12;22294:19;;21953:366;;;:::o;22325:419::-;22491:4;22529:2;22518:9;22514:18;22506:26;;22578:9;22572:4;22568:20;22564:1;22553:9;22549:17;22542:47;22606:131;22732:4;22606:131;:::i;:::-;22598:139;;22325:419;;;:::o;22750:180::-;22798:77;22795:1;22788:88;22895:4;22892:1;22885:15;22919:4;22916:1;22909:15;22936:320;22980:6;23017:1;23011:4;23007:12;22997:22;;23064:1;23058:4;23054:12;23085:18;23075:81;;23141:4;23133:6;23129:17;23119:27;;23075:81;23203:2;23195:6;23192:14;23172:18;23169:38;23166:84;;;23222:18;;:::i;:::-;23166:84;22987:269;22936:320;;;:::o;23262:148::-;23364:11;23401:3;23386:18;;23262:148;;;;:::o;23416:141::-;23465:4;23488:3;23480:11;;23511:3;23508:1;23501:14;23545:4;23542:1;23532:18;23524:26;;23416:141;;;:::o;23587:845::-;23690:3;23727:5;23721:12;23756:36;23782:9;23756:36;:::i;:::-;23808:89;23890:6;23885:3;23808:89;:::i;:::-;23801:96;;23928:1;23917:9;23913:17;23944:1;23939:137;;;;24090:1;24085:341;;;;23906:520;;23939:137;24023:4;24019:9;24008;24004:25;23999:3;23992:38;24059:6;24054:3;24050:16;24043:23;;23939:137;;24085:341;24152:38;24184:5;24152:38;:::i;:::-;24212:1;24226:154;24240:6;24237:1;24234:13;24226:154;;;24314:7;24308:14;24304:1;24299:3;24295:11;24288:35;24364:1;24355:7;24351:15;24340:26;;24262:4;24259:1;24255:12;24250:17;;24226:154;;;24409:6;24404:3;24400:16;24393:23;;24092:334;;23906:520;;23694:738;;23587:845;;;;:::o;24438:377::-;24544:3;24572:39;24605:5;24572:39;:::i;:::-;24627:89;24709:6;24704:3;24627:89;:::i;:::-;24620:96;;24725:52;24770:6;24765:3;24758:4;24751:5;24747:16;24725:52;:::i;:::-;24802:6;24797:3;24793:16;24786:23;;24548:267;24438:377;;;;:::o;24821:155::-;24961:7;24957:1;24949:6;24945:14;24938:31;24821:155;:::o;24982:400::-;25142:3;25163:84;25245:1;25240:3;25163:84;:::i;:::-;25156:91;;25256:93;25345:3;25256:93;:::i;:::-;25374:1;25369:3;25365:11;25358:18;;24982:400;;;:::o;25388:695::-;25666:3;25688:92;25776:3;25767:6;25688:92;:::i;:::-;25681:99;;25797:95;25888:3;25879:6;25797:95;:::i;:::-;25790:102;;25909:148;26053:3;25909:148;:::i;:::-;25902:155;;26074:3;26067:10;;25388:695;;;;;:::o;26089:228::-;26229:34;26225:1;26217:6;26213:14;26206:58;26298:11;26293:2;26285:6;26281:15;26274:36;26089:228;:::o;26323:366::-;26465:3;26486:67;26550:2;26545:3;26486:67;:::i;:::-;26479:74;;26562:93;26651:3;26562:93;:::i;:::-;26680:2;26675:3;26671:12;26664:19;;26323:366;;;:::o;26695:419::-;26861:4;26899:2;26888:9;26884:18;26876:26;;26948:9;26942:4;26938:20;26934:1;26923:9;26919:17;26912:47;26976:131;27102:4;26976:131;:::i;:::-;26968:139;;26695:419;;;:::o;27120:234::-;27260:34;27256:1;27248:6;27244:14;27237:58;27329:17;27324:2;27316:6;27312:15;27305:42;27120:234;:::o;27360:366::-;27502:3;27523:67;27587:2;27582:3;27523:67;:::i;:::-;27516:74;;27599:93;27688:3;27599:93;:::i;:::-;27717:2;27712:3;27708:12;27701:19;;27360:366;;;:::o;27732:419::-;27898:4;27936:2;27925:9;27921:18;27913:26;;27985:9;27979:4;27975:20;27971:1;27960:9;27956:17;27949:47;28013:131;28139:4;28013:131;:::i;:::-;28005:139;;27732:419;;;:::o;28157:228::-;28297:34;28293:1;28285:6;28281:14;28274:58;28366:11;28361:2;28353:6;28349:15;28342:36;28157:228;:::o;28391:366::-;28533:3;28554:67;28618:2;28613:3;28554:67;:::i;:::-;28547:74;;28630:93;28719:3;28630:93;:::i;:::-;28748:2;28743:3;28739:12;28732:19;;28391:366;;;:::o;28763:419::-;28929:4;28967:2;28956:9;28952:18;28944:26;;29016:9;29010:4;29006:20;29002:1;28991:9;28987:17;28980:47;29044:131;29170:4;29044:131;:::i;:::-;29036:139;;28763:419;;;:::o;29188:180::-;29236:77;29233:1;29226:88;29333:4;29330:1;29323:15;29357:4;29354:1;29347:15;29374:180;29422:77;29419:1;29412:88;29519:4;29516:1;29509:15;29543:4;29540:1;29533:15;29560:233;29599:3;29622:24;29640:5;29622:24;:::i;:::-;29613:33;;29668:66;29661:5;29658:77;29655:103;;;29738:18;;:::i;:::-;29655:103;29785:1;29778:5;29774:13;29767:20;;29560:233;;;:::o;29799:305::-;29839:3;29858:20;29876:1;29858:20;:::i;:::-;29853:25;;29892:20;29910:1;29892:20;:::i;:::-;29887:25;;30046:1;29978:66;29974:74;29971:1;29968:81;29965:107;;;30052:18;;:::i;:::-;29965:107;30096:1;30093;30089:9;30082:16;;29799:305;;;;:::o;30110:225::-;30250:34;30246:1;30238:6;30234:14;30227:58;30319:8;30314:2;30306:6;30302:15;30295:33;30110:225;:::o;30341:366::-;30483:3;30504:67;30568:2;30563:3;30504:67;:::i;:::-;30497:74;;30580:93;30669:3;30580:93;:::i;:::-;30698:2;30693:3;30689:12;30682:19;;30341:366;;;:::o;30713:419::-;30879:4;30917:2;30906:9;30902:18;30894:26;;30966:9;30960:4;30956:20;30952:1;30941:9;30937:17;30930:47;30994:131;31120:4;30994:131;:::i;:::-;30986:139;;30713:419;;;:::o;31138:182::-;31278:34;31274:1;31266:6;31262:14;31255:58;31138:182;:::o;31326:366::-;31468:3;31489:67;31553:2;31548:3;31489:67;:::i;:::-;31482:74;;31565:93;31654:3;31565:93;:::i;:::-;31683:2;31678:3;31674:12;31667:19;;31326:366;;;:::o;31698:419::-;31864:4;31902:2;31891:9;31887:18;31879:26;;31951:9;31945:4;31941:20;31937:1;31926:9;31922:17;31915:47;31979:131;32105:4;31979:131;:::i;:::-;31971:139;;31698:419;;;:::o;32123:180::-;32171:77;32168:1;32161:88;32268:4;32265:1;32258:15;32292:4;32289:1;32282:15;32309:185;32349:1;32366:20;32384:1;32366:20;:::i;:::-;32361:25;;32400:20;32418:1;32400:20;:::i;:::-;32395:25;;32439:1;32429:35;;32444:18;;:::i;:::-;32429:35;32486:1;32483;32479:9;32474:14;;32309:185;;;;:::o;32500:191::-;32540:4;32560:20;32578:1;32560:20;:::i;:::-;32555:25;;32594:20;32612:1;32594:20;:::i;:::-;32589:25;;32633:1;32630;32627:8;32624:34;;;32638:18;;:::i;:::-;32624:34;32683:1;32680;32676:9;32668:17;;32500:191;;;;:::o;32697:176::-;32729:1;32746:20;32764:1;32746:20;:::i;:::-;32741:25;;32780:20;32798:1;32780:20;:::i;:::-;32775:25;;32819:1;32809:35;;32824:18;;:::i;:::-;32809:35;32865:1;32862;32858:9;32853:14;;32697:176;;;;:::o;32879:220::-;33019:34;33015:1;33007:6;33003:14;32996:58;33088:3;33083:2;33075:6;33071:15;33064:28;32879:220;:::o;33105:366::-;33247:3;33268:67;33332:2;33327:3;33268:67;:::i;:::-;33261:74;;33344:93;33433:3;33344:93;:::i;:::-;33462:2;33457:3;33453:12;33446:19;;33105:366;;;:::o;33477:419::-;33643:4;33681:2;33670:9;33666:18;33658:26;;33730:9;33724:4;33720:20;33716:1;33705:9;33701:17;33694:47;33758:131;33884:4;33758:131;:::i;:::-;33750:139;;33477:419;;;:::o;33902:332::-;34023:4;34061:2;34050:9;34046:18;34038:26;;34074:71;34142:1;34131:9;34127:17;34118:6;34074:71;:::i;:::-;34155:72;34223:2;34212:9;34208:18;34199:6;34155:72;:::i;:::-;33902:332;;;;;:::o;34240:227::-;34380:34;34376:1;34368:6;34364:14;34357:58;34449:10;34444:2;34436:6;34432:15;34425:35;34240:227;:::o;34473:366::-;34615:3;34636:67;34700:2;34695:3;34636:67;:::i;:::-;34629:74;;34712:93;34801:3;34712:93;:::i;:::-;34830:2;34825:3;34821:12;34814:19;;34473:366;;;:::o;34845:419::-;35011:4;35049:2;35038:9;35034:18;35026:26;;35098:9;35092:4;35088:20;35084:1;35073:9;35069:17;35062:47;35126:131;35252:4;35126:131;:::i;:::-;35118:139;;34845:419;;;:::o;35270:224::-;35410:34;35406:1;35398:6;35394:14;35387:58;35479:7;35474:2;35466:6;35462:15;35455:32;35270:224;:::o;35500:366::-;35642:3;35663:67;35727:2;35722:3;35663:67;:::i;:::-;35656:74;;35739:93;35828:3;35739:93;:::i;:::-;35857:2;35852:3;35848:12;35841:19;;35500:366;;;:::o;35872:419::-;36038:4;36076:2;36065:9;36061:18;36053:26;;36125:9;36119:4;36115:20;36111:1;36100:9;36096:17;36089:47;36153:131;36279:4;36153:131;:::i;:::-;36145:139;;35872:419;;;:::o;36297:229::-;36437:34;36433:1;36425:6;36421:14;36414:58;36506:12;36501:2;36493:6;36489:15;36482:37;36297:229;:::o;36532:366::-;36674:3;36695:67;36759:2;36754:3;36695:67;:::i;:::-;36688:74;;36771:93;36860:3;36771:93;:::i;:::-;36889:2;36884:3;36880:12;36873:19;;36532:366;;;:::o;36904:419::-;37070:4;37108:2;37097:9;37093:18;37085:26;;37157:9;37151:4;37147:20;37143:1;37132:9;37128:17;37121:47;37185:131;37311:4;37185:131;:::i;:::-;37177:139;;36904:419;;;:::o;37329:634::-;37550:4;37588:2;37577:9;37573:18;37565:26;;37637:9;37631:4;37627:20;37623:1;37612:9;37608:17;37601:47;37665:108;37768:4;37759:6;37665:108;:::i;:::-;37657:116;;37820:9;37814:4;37810:20;37805:2;37794:9;37790:18;37783:48;37848:108;37951:4;37942:6;37848:108;:::i;:::-;37840:116;;37329:634;;;;;:::o;37969:222::-;38109:34;38105:1;38097:6;38093:14;38086:58;38178:5;38173:2;38165:6;38161:15;38154:30;37969:222;:::o;38197:366::-;38339:3;38360:67;38424:2;38419:3;38360:67;:::i;:::-;38353:74;;38436:93;38525:3;38436:93;:::i;:::-;38554:2;38549:3;38545:12;38538:19;;38197:366;;;:::o;38569:419::-;38735:4;38773:2;38762:9;38758:18;38750:26;;38822:9;38816:4;38812:20;38808:1;38797:9;38793:17;38786:47;38850:131;38976:4;38850:131;:::i;:::-;38842:139;;38569:419;;;:::o;38994:223::-;39134:34;39130:1;39122:6;39118:14;39111:58;39203:6;39198:2;39190:6;39186:15;39179:31;38994:223;:::o;39223:366::-;39365:3;39386:67;39450:2;39445:3;39386:67;:::i;:::-;39379:74;;39462:93;39551:3;39462:93;:::i;:::-;39580:2;39575:3;39571:12;39564:19;;39223:366;;;:::o;39595:419::-;39761:4;39799:2;39788:9;39784:18;39776:26;;39848:9;39842:4;39838:20;39834:1;39823:9;39819:17;39812:47;39876:131;40002:4;39876:131;:::i;:::-;39868:139;;39595:419;;;:::o;40020:228::-;40160:34;40156:1;40148:6;40144:14;40137:58;40229:11;40224:2;40216:6;40212:15;40205:36;40020:228;:::o;40254:366::-;40396:3;40417:67;40481:2;40476:3;40417:67;:::i;:::-;40410:74;;40493:93;40582:3;40493:93;:::i;:::-;40611:2;40606:3;40602:12;40595:19;;40254:366;;;:::o;40626:419::-;40792:4;40830:2;40819:9;40815:18;40807:26;;40879:9;40873:4;40869:20;40865:1;40854:9;40850:17;40843:47;40907:131;41033:4;40907:131;:::i;:::-;40899:139;;40626:419;;;:::o;41051:98::-;41102:6;41136:5;41130:12;41120:22;;41051:98;;;:::o;41155:168::-;41238:11;41272:6;41267:3;41260:19;41312:4;41307:3;41303:14;41288:29;;41155:168;;;;:::o;41329:360::-;41415:3;41443:38;41475:5;41443:38;:::i;:::-;41497:70;41560:6;41555:3;41497:70;:::i;:::-;41490:77;;41576:52;41621:6;41616:3;41609:4;41602:5;41598:16;41576:52;:::i;:::-;41653:29;41675:6;41653:29;:::i;:::-;41648:3;41644:39;41637:46;;41419:270;41329:360;;;;:::o;41695:751::-;41918:4;41956:3;41945:9;41941:19;41933:27;;41970:71;42038:1;42027:9;42023:17;42014:6;41970:71;:::i;:::-;42051:72;42119:2;42108:9;42104:18;42095:6;42051:72;:::i;:::-;42133;42201:2;42190:9;42186:18;42177:6;42133:72;:::i;:::-;42215;42283:2;42272:9;42268:18;42259:6;42215:72;:::i;:::-;42335:9;42329:4;42325:20;42319:3;42308:9;42304:19;42297:49;42363:76;42434:4;42425:6;42363:76;:::i;:::-;42355:84;;41695:751;;;;;;;;:::o;42452:141::-;42508:5;42539:6;42533:13;42524:22;;42555:32;42581:5;42555:32;:::i;:::-;42452:141;;;;:::o;42599:349::-;42668:6;42717:2;42705:9;42696:7;42692:23;42688:32;42685:119;;;42723:79;;:::i;:::-;42685:119;42843:1;42868:63;42923:7;42914:6;42903:9;42899:22;42868:63;:::i;:::-;42858:73;;42814:127;42599:349;;;;:::o;42954:106::-;42998:8;43047:5;43042:3;43038:15;43017:36;;42954:106;;;:::o;43066:183::-;43101:3;43139:1;43121:16;43118:23;43115:128;;;43177:1;43174;43171;43156:23;43199:34;43230:1;43224:8;43199:34;:::i;:::-;43192:41;;43115:128;43066:183;:::o;43255:711::-;43294:3;43332:4;43314:16;43311:26;43308:39;;;43340:5;;43308:39;43369:20;;:::i;:::-;43444:1;43426:16;43422:24;43419:1;43413:4;43398:49;43477:4;43471:11;43576:16;43569:4;43561:6;43557:17;43554:39;43521:18;43513:6;43510:30;43494:113;43491:146;;;43622:5;;;;43491:146;43668:6;43662:4;43658:17;43704:3;43698:10;43731:18;43723:6;43720:30;43717:43;;;43753:5;;;;;;43717:43;43801:6;43794:4;43789:3;43785:14;43781:27;43860:1;43842:16;43838:24;43832:4;43828:35;43823:3;43820:44;43817:57;;;43867:5;;;;;;;43817:57;43884;43932:6;43926:4;43922:17;43914:6;43910:30;43904:4;43884:57;:::i;:::-;43957:3;43950:10;;43298:668;;;;;43255:711;;:::o;43972:239::-;44112:34;44108:1;44100:6;44096:14;44089:58;44181:22;44176:2;44168:6;44164:15;44157:47;43972:239;:::o;44217:366::-;44359:3;44380:67;44444:2;44439:3;44380:67;:::i;:::-;44373:74;;44456:93;44545:3;44456:93;:::i;:::-;44574:2;44569:3;44565:12;44558:19;;44217:366;;;:::o;44589:419::-;44755:4;44793:2;44782:9;44778:18;44770:26;;44842:9;44836:4;44832:20;44828:1;44817:9;44813:17;44806:47;44870:131;44996:4;44870:131;:::i;:::-;44862:139;;44589:419;;;:::o;45014:227::-;45154:34;45150:1;45142:6;45138:14;45131:58;45223:10;45218:2;45210:6;45206:15;45199:35;45014:227;:::o;45247:366::-;45389:3;45410:67;45474:2;45469:3;45410:67;:::i;:::-;45403:74;;45486:93;45575:3;45486:93;:::i;:::-;45604:2;45599:3;45595:12;45588:19;;45247:366;;;:::o;45619:419::-;45785:4;45823:2;45812:9;45808:18;45800:26;;45872:9;45866:4;45862:20;45858:1;45847:9;45843:17;45836:47;45900:131;46026:4;45900:131;:::i;:::-;45892:139;;45619:419;;;:::o;46044:1053::-;46367:4;46405:3;46394:9;46390:19;46382:27;;46419:71;46487:1;46476:9;46472:17;46463:6;46419:71;:::i;:::-;46500:72;46568:2;46557:9;46553:18;46544:6;46500:72;:::i;:::-;46619:9;46613:4;46609:20;46604:2;46593:9;46589:18;46582:48;46647:108;46750:4;46741:6;46647:108;:::i;:::-;46639:116;;46802:9;46796:4;46792:20;46787:2;46776:9;46772:18;46765:48;46830:108;46933:4;46924:6;46830:108;:::i;:::-;46822:116;;46986:9;46980:4;46976:20;46970:3;46959:9;46955:19;46948:49;47014:76;47085:4;47076:6;47014:76;:::i;:::-;47006:84;;46044:1053;;;;;;;;:::o;47103:170::-;47243:22;47239:1;47231:6;47227:14;47220:46;47103:170;:::o;47279:366::-;47421:3;47442:67;47506:2;47501:3;47442:67;:::i;:::-;47435:74;;47518:93;47607:3;47518:93;:::i;:::-;47636:2;47631:3;47627:12;47620:19;;47279:366;;;:::o;47651:419::-;47817:4;47855:2;47844:9;47840:18;47832:26;;47904:9;47898:4;47894:20;47890:1;47879:9;47875:17;47868:47;47932:131;48058:4;47932:131;:::i;:::-;47924:139;;47651:419;;;:::o;48076:166::-;48216:18;48212:1;48204:6;48200:14;48193:42;48076:166;:::o;48248:366::-;48390:3;48411:67;48475:2;48470:3;48411:67;:::i;:::-;48404:74;;48487:93;48576:3;48487:93;:::i;:::-;48605:2;48600:3;48596:12;48589:19;;48248:366;;;:::o;48620:419::-;48786:4;48824:2;48813:9;48809:18;48801:26;;48873:9;48867:4;48863:20;48859:1;48848:9;48844:17;48837:47;48901:131;49027:4;48901:131;:::i;:::-;48893:139;;48620:419;;;:::o
Metadata Hash
ipfs://c83ec2db7b326cddee6f25fef521d04a0d0b1693de4d4428acd300488a58e0f9