Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 21,147 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 36064152 | 2 days ago | IN | 0 ETH | 0.00000694 | ||||
| Set Approval For... | 35975673 | 3 days ago | IN | 0 ETH | 0.00000662 | ||||
| Set Approval For... | 35894831 | 3 days ago | IN | 0 ETH | 0.00000573 | ||||
| Set Approval For... | 35773936 | 4 days ago | IN | 0 ETH | 0.00000573 | ||||
| Set Approval For... | 35733200 | 4 days ago | IN | 0 ETH | 0.00000452 | ||||
| Set Approval For... | 35654799 | 5 days ago | IN | 0 ETH | 0.00000467 | ||||
| Set Approval For... | 35525981 | 6 days ago | IN | 0 ETH | 0.00000452 | ||||
| Set Approval For... | 34861048 | 10 days ago | IN | 0 ETH | 0.00000428 | ||||
| Set Approval For... | 34860768 | 10 days ago | IN | 0 ETH | 0.00000428 | ||||
| Set Approval For... | 34860499 | 10 days ago | IN | 0 ETH | 0.0000046 | ||||
| Safe Transfer Fr... | 34785156 | 11 days ago | IN | 0 ETH | 0.00000435 | ||||
| Safe Transfer Fr... | 34784917 | 11 days ago | IN | 0 ETH | 0.00000478 | ||||
| Set Approval For... | 34159212 | 16 days ago | IN | 0 ETH | 0.00000573 | ||||
| Set Approval For... | 34092680 | 16 days ago | IN | 0 ETH | 0.00000501 | ||||
| Safe Transfer Fr... | 33812041 | 18 days ago | IN | 0 ETH | 0.00000578 | ||||
| Set Approval For... | 32794190 | 25 days ago | IN | 0 ETH | 0.00000442 | ||||
| Set Approval For... | 32706371 | 26 days ago | IN | 0 ETH | 0.00000452 | ||||
| Set Approval For... | 32373985 | 28 days ago | IN | 0 ETH | 0.0000046 | ||||
| Set Approval For... | 32356681 | 28 days ago | IN | 0 ETH | 0.00000444 | ||||
| Safe Transfer Fr... | 32178062 | 30 days ago | IN | 0 ETH | 0.00000849 | ||||
| Set Approval For... | 31250579 | 37 days ago | IN | 0 ETH | 0.00000573 | ||||
| Set Approval For... | 31028461 | 39 days ago | IN | 0 ETH | 0.00000573 | ||||
| Safe Transfer Fr... | 31014706 | 39 days ago | IN | 0 ETH | 0.00000667 | ||||
| Safe Transfer Fr... | 31014584 | 39 days ago | IN | 0 ETH | 0.00000616 | ||||
| Set Approval For... | 30921496 | 39 days ago | IN | 0 ETH | 0.000005 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 13871542 | 199 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
ConsumablesToken
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.4.0
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./ICreatorToken.sol";
contract ConsumablesToken is ERC1155, AccessControl, ERC2981, Pausable, ICreatorToken, Ownable {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
bool public autoApproveTransfersFromValidator = false;
address public validator;
string private contractUri;
bytes4 private constant _INTERFACE_ID_ICREATOR_TOKEN_LEGACY = 0xa07d229a;
bytes4 private constant _INTERFACE_ID_ICREATOR_TOKEN = 0xad0d7f6c;
event AutomaticApprovalOfTransferValidatorSet(bool autoApproved);
event ContractURIUpdated();
error InvalidValidator();
error ValidatorCalledFailed();
constructor(string memory uri, address royaltyReceiver, uint96 royaltyFeeNumerator, address _validator)
ERC1155(uri)
Ownable()
{
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, msg.sender);
_setDefaultRoyalty(royaltyReceiver, royaltyFeeNumerator);
autoApproveTransfersFromValidator = true;
_setValidator(_validator);
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC1155, AccessControl, ERC2981)
returns (bool)
{
return(
interfaceId == _INTERFACE_ID_ICREATOR_TOKEN_LEGACY ||
interfaceId == _INTERFACE_ID_ICREATOR_TOKEN ||
interfaceId == type(ICreatorToken).interfaceId ||
super.supportsInterface(interfaceId)
);
}
// ================================================================================
// MINTING
// ================================================================================
function mint(address to, uint256 id, uint256 amount, bytes memory data) public onlyRole(MINTER_ROLE) whenNotPaused {
_mint(to, id, amount, data);
}
function batchMint(address to, uint256[] memory ids, uint256[] memory amounts) external onlyRole(MINTER_ROLE) whenNotPaused {
require(ids.length == amounts.length, "IDs and Amounts must be equal length");
_mintBatch(to, ids, amounts, "");
}
function airdrop(address[] memory recipients, uint256 id, uint256 amount) external onlyRole(MINTER_ROLE) whenNotPaused {
require(amount > 0, "Amount must be greater than zero");
for (uint256 i = 0; i < recipients.length; i++) {
_mint(recipients[i], id, amount, "");
}
}
function burn(address account, uint256 id, uint256 amount) external onlyRole(MINTER_ROLE) virtual {
_burn(account, id, amount);
}
function batchBurn(address account, uint256[] memory ids, uint256[] memory amounts) external onlyRole(MINTER_ROLE) virtual {
require(ids.length == amounts.length, "IDs and Amounts must be equal length");
_burnBatch(account, ids, amounts);
}
// ================================================================================
// ERC-1155C
// ================================================================================
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool isApproved) {
isApproved = super.isApprovedForAll(owner, operator);
if (!isApproved) {
if (autoApproveTransfersFromValidator) {
isApproved = operator == address(validator);
}
}
}
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual override {
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
if (from != address(0) && to != address(0)) {
if (msg.sender != validator) {
for (uint256 i = 0; i < ids.length; i++) {
(bool success,) = address(validator).call(
abi.encodeWithSignature(
"validateTransfer(address,address,address,uint256,uint256)",
msg.sender,
from,
to,
ids[i],
amounts[i]
)
);
if (!success) revert ValidatorCalledFailed();
}
}
}
}
function getTransferValidator() external view virtual returns (address) {
return validator;
}
function getTransferValidationFunction()
external
view
returns (bytes4 functionSignature, bool isViewFunction)
{
functionSignature = bytes4(keccak256("validateTransfer(address,address,address,uint256,uint256)"));
isViewFunction = true;
}
function setTransferValidator(address _validator) external onlyRole(ADMIN_ROLE) {
_setValidator(_validator);
}
function _setValidator(address _validator) internal {
/// Emits `TransferValidatorUpdated` event.
emit TransferValidatorUpdated(validator, _validator);
validator = _validator;
/// Register the token type of the collection on `validator`.
(bool success,) = address(_validator).call(
abi.encodeWithSignature("setTokenTypeOfCollection(address,uint16)", address(this), 1155)
);
/// Reverts if the call fails.
if (!success) revert InvalidValidator();
}
function setAutomaticApprovalOfTransfersFromValidator(bool autoApprove) external onlyRole(ADMIN_ROLE) {
autoApproveTransfersFromValidator = autoApprove;
emit AutomaticApprovalOfTransferValidatorSet(autoApprove);
}
function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyRole(ADMIN_ROLE) {
_setDefaultRoyalty(receiver, feeNumerator);
}
// ================================================================================
// METADATA
// ================================================================================
function contractURI() public view returns (string memory) {
return contractUri;
}
function uri(uint256 id) public view override returns (string memory) {
string memory baseUri = super.uri(id);
return bytes(baseUri).length > 0 ? string(abi.encodePacked(baseUri, Strings.toString(id))) : "";
}
function setBaseURI(string memory uri_) public onlyRole(ADMIN_ROLE) {
_setURI(uri_);
}
function setContractURI(string memory uri_) public onlyRole(ADMIN_ROLE) {
contractUri = uri_;
emit ContractURIUpdated();
}
// ================================================================================
// PAUSE
// ================================================================================
function pause() external onlyRole(ADMIN_ROLE) {
_pause();
}
function unpause() external onlyRole(ADMIN_ROLE) {
_unpause();
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface ICreatorToken {
event TransferValidatorUpdated(address oldValidator, address newValidator);
function getTransferValidator() external view returns (address validator);
function setTransferValidator(address validator) external;
function getTransferValidationFunction() external view returns (bytes4 functionSignature, bool isViewFunction);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with a standardized message including the required role.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*
* _Available since v4.1._
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
return _roles[role].members[account];
}
/**
* @dev Revert with a standard message if `_msgSender()` is missing `role`.
* Overriding this function changes the behavior of the {onlyRole} modifier.
*
* Format of the revert message is described in {_checkRole}.
*
* _Available since v4.6._
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Revert with a standard message if `account` is missing `role`.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(account),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* May emit a {RoleGranted} event.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*
* NOTE: This function is deprecated in favor of {_grantRole}.
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Grants `role` to `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
/**
* @dev Revokes `role` from `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/Math.sol";
import "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _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) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toString(int256 value) internal pure returns (string memory) {
return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @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] = _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);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return keccak256(bytes(a)) == keccak256(bytes(b));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/common/ERC2981.sol)
pragma solidity ^0.8.0;
import "../../interfaces/IERC2981.sol";
import "../../utils/introspection/ERC165.sol";
/**
* @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
*
* Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
* specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
*
* Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
* fee is specified in basis points by default.
*
* IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
* https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
* voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
*
* _Available since v4.5._
*/
abstract contract ERC2981 is IERC2981, ERC165 {
struct RoyaltyInfo {
address receiver;
uint96 royaltyFraction;
}
RoyaltyInfo private _defaultRoyaltyInfo;
mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @inheritdoc IERC2981
*/
function royaltyInfo(uint256 tokenId, uint256 salePrice) public view virtual override returns (address, uint256) {
RoyaltyInfo memory royalty = _tokenRoyaltyInfo[tokenId];
if (royalty.receiver == address(0)) {
royalty = _defaultRoyaltyInfo;
}
uint256 royaltyAmount = (salePrice * royalty.royaltyFraction) / _feeDenominator();
return (royalty.receiver, royaltyAmount);
}
/**
* @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
* fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
* override.
*/
function _feeDenominator() internal pure virtual returns (uint96) {
return 10000;
}
/**
* @dev Sets the royalty information that all ids in this contract will default to.
*
* Requirements:
*
* - `receiver` cannot be the zero address.
* - `feeNumerator` cannot be greater than the fee denominator.
*/
function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
require(receiver != address(0), "ERC2981: invalid receiver");
_defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
}
/**
* @dev Removes default royalty information.
*/
function _deleteDefaultRoyalty() internal virtual {
delete _defaultRoyaltyInfo;
}
/**
* @dev Sets the royalty information for a specific token id, overriding the global default.
*
* Requirements:
*
* - `receiver` cannot be the zero address.
* - `feeNumerator` cannot be greater than the fee denominator.
*/
function _setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) internal virtual {
require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
require(receiver != address(0), "ERC2981: Invalid parameters");
_tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
}
/**
* @dev Resets royalty information for the token id back to the global default.
*/
function _resetTokenRoyalty(uint256 tokenId) internal virtual {
delete _tokenRoyaltyInfo[tokenId];
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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 or 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 or 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) (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.9.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. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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.9.4) (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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// 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 (last updated v4.9.0) (interfaces/IERC2981.sol)
pragma solidity ^0.8.0;
import "../utils/introspection/IERC165.sol";
/**
* @dev Interface for the NFT Royalty Standard.
*
* A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
* support for royalty payments across all NFT marketplaces and ecosystem participants.
*
* _Available since v4.5._
*/
interface IERC2981 is IERC165 {
/**
* @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
*/
function royaltyInfo(
uint256 tokenId,
uint256 salePrice
) external view returns (address receiver, uint256 royaltyAmount);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1, "Math: mulDiv overflow");
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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 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);
}{
"evmVersion": "paris",
"optimizer": {
"enabled": true,
"mode": "3"
},
"outputSelection": {
"*": {
"*": [
"abi"
]
}
},
"libraries": {},
"isSystem": false,
"forceEvmla": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"address","name":"royaltyReceiver","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator","type":"uint96"},{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidValidator","type":"error"},{"inputs":[],"name":"ValidatorCalledFailed","type":"error"},{"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":false,"internalType":"bool","name":"autoApproved","type":"bool"}],"name":"AutomaticApprovalOfTransferValidatorSet","type":"event"},{"anonymous":false,"inputs":[],"name":"ContractURIUpdated","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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"address","name":"oldValidator","type":"address"},{"indexed":false,"internalType":"address","name":"newValidator","type":"address"}],"name":"TransferValidatorUpdated","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":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoApproveTransfersFromValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferValidationFunction","outputs":[{"internalType":"bytes4","name":"functionSignature","type":"bytes4"},{"internalType":"bool","name":"isViewFunction","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferValidator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isApproved","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","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":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"bool","name":"autoApprove","type":"bool"}],"name":"setAutomaticApprovalOfTransfersFromValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"name":"setTransferValidator","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":[{"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":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"validator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000707a4a236362cfaa412de5a3ef0df2b1d838966fb10da44f0913901277d0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000008074ed2676c248033366b29f0225789002e362bc00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000003203c3f64312af9344e42ef8aa45b97c9dfe4594000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f6672616e6b796d657461646174617365727665722d70726f64756374696f6e2e75702e7261696c7761792e6170702f6672616e6b79476f2f636f6e7472616374000000000000000000000000000000000000000000000000
Deployed Bytecode
0x00040000000000020014000000000002000000000302001900000000020100190000006002200270000006510020019d0000065102200197000300000021035500020000000103550000008005000039000000400050043f00000001033001900000002f0000c13d000000040320008c000013370000413d000000000301043b000000e0043002700000066c0340009c0000003b0000213d000000000321034f000006870540009c0000011b0000a13d000006880540009c000001930000213d0000068f0340009c0000033f0000a13d000006900340009c000008a40000613d000006910140009c000002940000613d000006920140009c000013370000c13d0000000001000416000000000101004b000013370000c13d193f149e0000040f000000400100043d0000000602000039000000000302041a000000ff04300190000009110000c13d0000004402100039000006cc03000041000000000032043500000024021000390000001403000039000008f20000013d0000000003000416000000000303004b000013370000c13d0000065203200041000006530330009c000000600000213d000006e10100004100000000001004350000004101000039000000040010043f000006e20100004100001941000104300000066d0340009c000001690000a13d0000066e0340009c000001b20000213d000006750340009c000003b10000a13d000006760340009c000008b60000613d000006770340009c0000081b0000613d000006780140009c000013370000c13d0000000001000416000000000101004b000013370000c13d0000000803000039000000000203041a000000010420019000000001052002700000007f0150018f000000000105c0190000001f0510008c00000000050000190000000105002039000000000552013f0000000105500190000008790000c13d000000800010043f000000000404004b000009380000c13d000001000300008a000000000232016f000000a00020043f000000000101004b000000c002000039000000a002006039000009470000013d0000009f032000390000065403300197000000400030043f0000001f0320018f00000005042002720000006f0000613d00000000050000190000000506500210000000000761034f000000000707043b000000800660003900000000007604350000000105500039000000000645004b000000670000413d000000000503004b0000007e0000613d0000000504400210000000000141034f00000003033002100000008004400039000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000000800120008c000013370000413d000000800300043d000006550130009c000013370000213d00000080042000390000009f01300039000000000141004b000013370000813d00000080023000390000000001020433000006550510009c000000350000213d0000003f05100039000d0020000000920000000d0550017f000000400600043d0000000005560019000e00000006001d000000000665004b00000000060000190000000106004039000006550750009c000000350000213d0000000106600190000000350000c13d000000400050043f0000000e050000290000000005150436000c00000005001d0000000003130019000000a003300039000000000343004b000013370000213d000000000301004b0000000c06000029000000ab0000613d000000000300001900000000046300190000002003300039000000000523001900000000050504330000000000540435000000000413004b000000a40000413d00000000011600190000000000010435000000a00100043d000b00000001001d000006560110009c000013370000213d000000c00100043d000a06570010019b000900000001001d000006570110009c000013370000213d000000e00100043d000800000001001d000006560110009c000013370000213d0000000e010000290000000001010433000700000001001d000006550110009c000000350000213d0000000201000039000600000001001d000000000101041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000010110018f000000000112004b000008790000c13d000500000003001d000000200130008c000000ec0000413d0000000601000029000000000010043500000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000658011001c70000801002000039193f193a0000040f0000000102200190000013370000613d00000007030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000005010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000000ec0000813d000000000002041b0000000102200039000000000312004b000000e80000413d00000007010000290000001f0110008c00000b490000a13d0000000601000029000000000010043500000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000658011001c70000801002000039193f193a0000040f0000000102200190000013370000613d00000007030000290000000d033001800000002002000039000000000101043b0000000e060000290000010b0000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000001030000413d000000070330006c000001170000813d00000007030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f0000000e022000290000000002020433000000000232016f000000000021041b0000000701000029000000010110021000000001011001bf00000b560000013d000006950540009c0000026a0000a13d000006960540009c000002a60000a13d000006970540009c000008650000613d000006980340009c000005fb0000613d000006990340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000002402100370000000000202043b000e00000002001d0000000401100370000000000101043b00000000001004350000000501000039000000200010043f00000651010000410000000002000414000006510320009c0000000002018019000000c0012002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000400200043d000006610320009c000000350000213d000000000101043b0000004003200039000000400030043f000000000301041a0000002004200039000000a001300270000000000014043500000656033001980000000000320435000001550000c13d000000400200043d000006610120009c000000350000213d0000004001200039000000400010043f0000000401000039000000000101041a00000656031001970000000003320436000000a00110027000000000001304350000000e0500002900000000435100a9000000000405004b0000015c0000613d00000000545300d9000000000141004b00000f7c0000c13d0000000001020433000027103230011a000000400300043d00000020043000390000000000240435000006560110019700000000001304350000065101000041000006510230009c00000000030180190000004001300210000006d7011001c7000019400001042e0000067b0340009c000002850000a13d0000067c0340009c000002b30000a13d0000067d0340009c0000087d0000613d0000067e0340009c0000060c0000613d0000067f0340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000000402100370000000000202043b000e00000002001d000006560220009c000013370000213d0000002401100370000000000201043b000000000102004b0000000001000019000000010100c039000d00000002001d000000000112004b000013370000c13d00000000020004110000000e0120006c0000099a0000c13d0000066a01000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f000006bf01000041000000c40010043f000006c001000041000009810000013d000006890540009c000003f90000a13d0000068a0140009c000008bb0000613d0000068b0140009c000008350000613d0000068c0140009c000013370000c13d0000000001000416000000000101004b000013370000c13d0000000601000039000000000201041a000000080320027000000656033001970000000005000411000000000353004b000008e30000c13d000006ac02200197000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000003030000390000065a040000410000000006000019000009230000013d0000066f0340009c000004850000a13d000006700340009c000008c60000613d000006710340009c0000083c0000613d000006720340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040320008a000000600330008c000013370000413d0000000403100370000000000303043b000e00000003001d000006560330009c000013370000213d0000002403100370000000000403043b000006550340009c000013370000213d0000002303400039000006a106000041000000000723004b00000000070000190000000007068019000006a103300197000000000803004b0000000006008019000006a10330009c000000000607c019000000000306004b000013370000c13d0000000403400039000000000331034f000000000703043b000006550370009c000000350000213d0000000506700210000000bf08600039000000200300008a000000000838016f000006a209800041000006a30990009c000000350000413d000000400080043f000000800070043f00000024044000390000000006460019000000000826004b000013370000213d000000000707004b000001f00000613d000000000741034f000000000707043b000000200550003900000000007504350000002004400039000000000764004b000001e90000413d0000004404100370000000000404043b000006550540009c000013370000213d0000002305400039000006a106000041000000000725004b00000000070000190000000007068019000006a105500197000000000805004b0000000006008019000006a10550009c000000000607c019000000000506004b000013370000c13d0000000405400039000000000551034f000000000505043b000006550650009c000000350000213d00000005065002100000003f07600039000000000337016f000000400700043d0000000003370019000800000007001d000000000773004b00000000070000190000000107004039000006550830009c000000350000213d0000000107700190000000350000c13d000000400030043f00000008030000290000000003530436000700000003001d00000024034000390000000004360019000000000224004b000013370000213d000000000205004b000002240000613d0000000802000029000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b0000021d0000413d193f156e0000040f00000008010000290000000001010433000000800200043d000000000112004b00000d080000c13d0000000e01000029000d06560010019c000008500000613d000000400100043d000006a40210009c000000350000213d0000002002100039000000400020043f0000000000010435000000800100043d000000000101004b00000dc80000c13d000000400100043d000000400200003900000000022104360000004003100039000000800400043d000000000043043500000000050004110000006003100039000000000604004b000002480000613d000000800600003900000000070000190000002006600039000000000806043300000000038304360000000107700039000000000847004b000002420000413d00000000041300490000000000420435000000080700002900000000040704330000000002430436000000000304004b000002560000613d00000000030000190000002007700039000000000607043300000000026204360000000103300039000000000643004b000002500000413d00000000021200490000065103000041000006510410009c00000000010380190000004001100210000006510420009c00000000020380190000006002200210000000000112019f0000000002000414000006510420009c0000000002038019000000c002200210000000000121019f00000659011001c70000800d020000390000000403000039000006a5040000410000000d0600002900000d860000013d0000069c0340009c000002900000213d0000069f0340009c000004ef0000613d000006a00340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000401100370000000000201043b000006b701200197000000000112004b000013370000c13d0000000101000039000006ed0320009c000009840000a13d000006ee0320009c0000098b0000213d000006f10320009c000008c30000613d000006f20220009c000008c30000613d0000098f0000013d000006820340009c0000029a0000213d000006850340009c000004fe0000613d000006860140009c000013370000c13d0000000001000416000000000101004b000013370000c13d0000065f01000041000008c30000013d0000069d0340009c0000051c0000613d0000069e0140009c000013370000c13d0000000001000416000000000101004b000013370000c13d0000000701000039000000000101041a000002a40000013d000006830140009c0000053a0000613d000006840140009c000013370000c13d0000000001000416000000000101004b000013370000c13d0000000601000039000000000101041a00000008011002700000065601100197000008c30000013d0000069a0340009c000005570000613d0000069b0140009c000013370000c13d0000000001000416000000000101004b000013370000c13d000006b101000041000000800010043f0000000101000039000000a00010043f000006e301000041000019400001042e000006800340009c000005e00000613d000006810340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040320008a000000200330008c000013370000413d0000000403100370000000000403043b000006550340009c000013370000213d0000002303400039000006a105000041000000000623004b00000000060000190000000006058019000006a103300197000000000703004b0000000005008019000006a10330009c000000000506c019000000000305004b000013370000c13d0000000405400039000000000351034f000000000303043b000006550630009c000000350000213d000000bf06300039000e0020000000920000000e0660017f000006550760009c000000350000213d0000002404400039000000400060043f000000800030043f0000000004430019000000000224004b000013370000213d0000002002500039000000000121034f0000001f0230018f0000000504300272000002eb0000613d00000000050000190000000506500210000000000761034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000002e30000413d000000000502004b000002fa0000613d0000000504400210000000000141034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f0000000000140435000000a0013000390000000000010435193f149e0000040f000000800200043d000006550120009c000000350000213d0000000801000039000000000401041a000000010340019000000001054002700000007f0350018f000000000305c0190000001f0530008c00000000050000190000000105002039000000000454013f0000000104400190000008790000c13d000000200430008c0000031e0000413d0000001f042000390000000504400270000006b905400041000006b904000041000000200620008c000000000405801900000000001004350000001f033000390000000503300270000006b903300041000000000534004b0000031e0000813d000000000004041b0000000104400039000000000534004b0000031a0000413d0000001f0320008c00000af10000a13d00000000001004350000000e04200180000000a005000039000006b903000041000003320000613d000006b90300004100000020070000390000000005000019000000000607001900000080076000390000000007070433000000000073041b000000200760003900000001033000390000002005500039000000000845004b000003280000413d000000a005600039000000000424004b0000033c0000813d0000000304200210000000f80440018f000000010600008a000000000446022f000000000464013f0000000005050433000000000445016f000000000043041b000000010220021000000001022001bf00000afc0000013d000006930340009c000006120000613d000006940340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000000402100370000000000202043b000e00000002001d0000002401100370000000000101043b000d00000001001d000006560110009c000013370000213d0000000e0100002900000000001004350000000301000039000c00000001001d000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000101100039000000000101041a193f163e0000040f0000000e0100002900000000001004350000000c01000029000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f00000651010000410000000002000414000006510320009c0000000002018019000000c0012002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff01100190000009260000c13d0000000e0100002900000000001004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d02000039000000040300003900000000070004110000065e040000410000000e050000290000000d06000029000009230000013d000006790340009c000007500000613d0000067a0340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000401100370000000000101043b000e00000001001d000006560110009c000013370000213d193f149e0000040f0000000701000039000d00000001001d000000000401041a000000400100043d00000020021000390000000e030000290000000000320435000c00000004001d0000065602400197000000000021043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f0000065d011001c70000800d020000390000000103000039000b00000003001d0000066404000041193f19350000040f0000000101200190000013370000613d0000000c0100002900000665011001970000000e011001af0000000d02000029000000000012041b000000400200043d00000044012000390000048303000039000000000031043500000020012000390000066603000041000000000031043500000024032000390000000004000410000000000043043500000044030000390000000000320435000006670320009c000000350000213d0000008003200039000000400030043f000000000302043300000000020004140000000e04000029000000040440008c00000a250000c13d00000001010000310000000b0800002900000a380000013d0000068d0540009c0000079c0000613d0000068e0340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040320008a000000200330008c000013370000413d0000000403100370000000000403043b000006550340009c000013370000213d0000002303400039000006a105000041000000000623004b00000000060000190000000006058019000006a103300197000000000703004b0000000005008019000006a10330009c000000000506c019000000000305004b000013370000c13d0000000405400039000000000351034f000000000303043b000006550630009c000000350000213d000000bf06300039000e0020000000920000000e0660017f000006550760009c000000350000213d0000002404400039000000400060043f000000800030043f0000000004430019000000000224004b000013370000213d0000002002500039000000000121034f0000001f0230018f0000000504300272000004310000613d00000000050000190000000506500210000000000761034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000004290000413d000000000502004b000004400000613d0000000504400210000000000141034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f0000000000140435000000a0013000390000000000010435193f149e0000040f000000800200043d000006550120009c000000350000213d0000000201000039000000000401041a000000010340019000000001054002700000007f0350018f000000000305c0190000001f0530008c00000000050000190000000105002039000000000454013f0000000104400190000008790000c13d000000200430008c000004640000413d0000001f042000390000000504400270000006c605400041000006c604000041000000200620008c000000000405801900000000001004350000001f033000390000000503300270000006c603300041000000000534004b000004640000813d000000000004041b0000000104400039000000000534004b000004600000413d0000001f0320008c00000b070000a13d00000000001004350000000e04200180000000a005000039000006c603000041000004780000613d000006c60300004100000020070000390000000005000019000000000607001900000080076000390000000007070433000000000073041b000000200760003900000001033000390000002005500039000000000845004b0000046e0000413d000000a005600039000000000424004b000004820000813d0000000304200210000000f80440018f000000010600008a000000000446022f000000000464013f0000000005050433000000000445016f000000000043041b0000000103000039000000010420021000000b110000013d000006730340009c000008000000613d000006740340009c000013370000c13d0000000003000416000000000303004b000013370000c13d000000040320008a000000a00330008c000013370000413d0000000403100370000000000303043b000d00000003001d000006560330009c000013370000213d0000002403100370000000000303043b000c00000003001d000006560330009c000013370000213d0000006403100370000000000303043b000100000003001d0000004403100370000000000303043b000200000003001d0000008403100370000000000403043b000006550340009c000013370000213d0000002303400039000006a105000041000000000623004b00000000060000190000000006058019000006a103300197000000000703004b0000000005008019000006a10330009c000000000506c019000000000305004b000013370000c13d0000000405400039000000000351034f000000000303043b000006550630009c000000350000213d000000bf063000390005002000000092000000050660017f000006a207600041000006a30770009c000000350000413d0000002404400039000000400060043f000000800030043f0000000004430019000000000224004b000013370000213d0000002002500039000000000121034f0000001f0230018f0000000504300272000004ce0000613d00000000050000190000000506500210000000000761034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000004c60000413d000000000502004b000004dd0000613d0000000504400210000000000141034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f0000000000140435000000a00130003900000000000104350000000002000411000b00000002001d0000000d0120006b00000b150000c13d0000000c0100006b00000cb20000c13d000000400100043d0000006402100039000006d50300004100000000003204350000004402100039000006d603000041000000000032043500000024021000390000002503000039000008590000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000000402100370000000000302043b000006560230009c000013370000213d0000002401100370000000000201043b0000000001030019193f14370000040f000008130000013d0000000003000416000000000303004b000013370000c13d000000040320008a000000800330008c000013370000413d0000000403100370000000000303043b000e00000003001d000006560330009c000013370000213d0000006401100370000000000101043b000006550310009c000013370000213d0000000401100039193f13dd0000040f000d00000001001d193f156e0000040f193f171b0000040f00000002010003670000002402100370000000000202043b0000004401100370000000000301043b0000000e010000290000000d04000029193f17880000040f0000000001000019000019400001042e0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000000402100370000000000202043b000e00000002001d000006560220009c000013370000213d0000002401100370000000000101043b000d00000001001d000006570110009c000013370000213d193f149e0000040f0000000d01000029000027100110008c000009910000a13d000000400100043d0000006402100039000006eb0300004100000000003204350000004402100039000006ec03000041000000000032043500000024021000390000002a03000039000008590000013d0000000001000416000000000101004b000013370000c13d193f149e0000040f0000000601000039000000000201041a000000ff03200190000008ec0000c13d000001000300008a000000000232016f00000001022001bf000000000021041b0000000001000411000000400200043d000000000012043500000651010000410000000003000414000006510430009c0000000003018019000006510420009c00000000020180190000004001200210000000c002300210000000000112019f00000658011001c70000800d020000390000000103000039000006c304000041000009230000013d0000000003000416000000000303004b000013370000c13d000000040320008a000000600330008c000013370000413d0000000403100370000000000303043b000800000003001d000006560330009c000013370000213d0000002403100370000000000303043b000006550430009c000013370000213d0000002304300039000006a105000041000000000624004b00000000060000190000000006058019000006a104400197000000000704004b0000000005008019000006a10440009c000000000506c019000000000405004b000013370000c13d0000000404300039000000000441034f000000000504043b000006550450009c000000350000213d0000000504500210000000bf064000390007002000000092000000070660017f000006550760009c000000350000213d000000400060043f000000800050043f00000024033000390000000004340019000000000624004b000013370000213d000000000505004b0000058d0000613d0000008005000039000000000631034f000000000606043b000000200550003900000000006504350000002003300039000000000643004b000005860000413d0000004403100370000000000303043b000006550430009c000013370000213d0000002304300039000006a105000041000000000624004b00000000060000190000000006058019000006a104400197000000000704004b0000000005008019000006a10440009c000000000506c019000000000405004b000013370000c13d0000000404300039000000000441034f000000000404043b000006550540009c000000350000213d00000005054002100000003f06500039000000070660017f000000400700043d0000000006670019000b00000007001d000000000776004b00000000070000190000000107004039000006550860009c000000350000213d0000000107700190000000350000c13d000000400060043f0000000b060000290000000006460436000a00000006001d00000024033000390000000005350019000000000225004b000013370000213d000000000204004b000005c10000613d0000000b02000029000000000431034f000000000404043b000000200220003900000000004204350000002003300039000000000453004b000005ba0000413d193f156e0000040f0000000601000039000000000101041a000000ff01100190000008ec0000c13d0000000b010000290000000001010433000000800200043d000000000112004b00000d080000c13d000000400100043d000600000001001d000006a40110009c000000350000213d00000006020000290000002001200039000000400010043f00000000000204350000000801000029000906560010019c00000e170000c13d000000400100043d0000006402100039000006e90300004100000000003204350000004402100039000006ea03000041000000000032043500000024021000390000002103000039000008590000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000002402100370000000000202043b000e00000002001d000006560220009c000013370000213d0000000401100370000000000101043b00000000001004350000000301000039000000200010043f0000004002000039000d00000002001d0000000001000019193f191f0000040f0000000e020000290000000000200435000000200010043f00000000010000190000000d02000029193f191f0000040f000008bf0000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000401100370000000000101043b00000000001004350000000301000039000000200010043f00000040020000390000000001000019193f191f0000040f0000000101100039000000000101041a000008c30000013d0000000001000416000000000101004b000013370000c13d000000800000043f000006ba01000041000019400001042e0000000003000416000000000303004b000013370000c13d000000040320008a000000a00330008c000013370000413d0000000403100370000000000303043b000006560430009c000013370000213d0000002404100370000000000404043b000500000004001d000006560440009c000013370000213d0000004404100370000000000404043b000006550540009c000013370000213d0000002305400039000006a106000041000000000725004b00000000070000190000000007068019000006a105500197000000000805004b0000000006008019000006a10550009c000000000607c019000000000506004b000013370000c13d0000000405400039000000000551034f000000000605043b000006550560009c000000350000213d0000000505600210000000bf075000390003002000000092000000030770017f000006550870009c000000350000213d000000400070043f000000800060043f00000024044000390000000005450019000000000725004b000013370000213d000000000606004b0000064c0000613d0000008006000039000000000741034f000000000707043b000000200660003900000000007604350000002004400039000000000754004b000006450000413d0000006404100370000000000404043b000006550540009c000013370000213d0000002305400039000006a106000041000000000725004b00000000070000190000000007068019000006a105500197000000000805004b0000000006008019000006a10550009c000000000607c019000000000506004b000013370000c13d0000000405400039000000000551034f000000000505043b000006550650009c000000350000213d00000005065002100000003f07600039000000030770017f000000400800043d0000000007780019000800000008001d000000000887004b00000000080000190000000108004039000006550970009c000000350000213d0000000108800190000000350000c13d000000400070043f00000008070000290000000007570436000700000007001d00000024044000390000000006460019000000000726004b000013370000213d000000000505004b000006800000613d0000000805000029000000000741034f000000000707043b000000200550003900000000007504350000002004400039000000000764004b000006790000413d0000008404100370000000000504043b000006550450009c000013370000213d0000002304500039000006a106000041000000000724004b00000000070000190000000007068019000006a104400197000000000804004b0000000006008019000006a10440009c000000000607c019000000000406004b000013370000c13d0000000406500039000000000461034f000000000404043b000006550740009c000000350000213d0000003f07400039000000030770017f000000400800043d0000000007780019000200000008001d000000000887004b00000000080000190000000108004039000006550970009c000000350000213d0000000108800190000000350000c13d0000002408500039000000400070043f000000020500002900000000054504360000000007840019000000000227004b000013370000213d0000002002600039000000000221034f0000001f0140018f0000000506400272000006b60000613d000000000700001900000005087002100000000009850019000000000882034f000000000808043b00000000008904350000000107700039000000000867004b000006ae0000413d000000000701004b000006c50000613d0000000506600210000000000262034f00000000066500190000000301100210000000000706043300000000071701cf000000000717022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000171019f00000000001604350000000001450019000000000001043500000656023001970000000001000411000400000001001d000c00000002001d000000000112004b00000f800000c13d00000008010000290000000001010433000000800200043d000000000112004b00000eb50000c13d0000000501000029000606560010019c000004e50000613d0000000c0100006b0000000804000029000006de0000613d0000000701000039000b00000001001d000000000101041a0000065603100197000000040330006b0000103a0000c13d000000000102004b0000103c0000613d000b80100000003d00000000020000190000000001040433000000000121004b000009340000a13d000900000002001d0000000501200210000000a002100039000000000302043300000007011000290000000001010433000e00000001001d000d00000003001d0000000000300435000000200000043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000b02000029193f193a0000040f0000000102200190000013370000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000b02000029193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000a00000002001d0000000e0120006c00000d010000413d0000000d010000290000000000100435000000200000043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d0000000a030000290000000e0230006a000000000101043b000000000021041b0000000d010000290000000000100435000000200000043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000301041a0000000e02300029000000000332004b00000000030000190000000103004039000000010330019000000f7c0000c13d000000000021041b00000009020000290000000102200039000000800100043d000000000112004b0000000804000029000006e20000413d0000103c0000013d0000000003000416000000000303004b000013370000c13d000000040320008a000000600330008c000013370000413d0000000403100370000000000303043b000006550430009c000013370000213d0000002304300039000006a105000041000000000624004b00000000060000190000000006058019000006a104400197000000000704004b0000000005008019000006a10440009c000000000506c019000000000405004b000013370000c13d0000000404300039000000000441034f000000000504043b000006550450009c000000350000213d0000000504500210000000bf06400039000000200700008a000000000676016f000006a207600041000006a30770009c000000350000413d000000400060043f000000800050043f00000024033000390000000004340019000000000224004b000013370000213d000000000205004b000007840000613d0000008002000039000000000531034f000000000505043b000006560650009c000013370000213d000000200220003900000000005204350000002003300039000000000543004b0000077b0000413d0000004402100370000000000202043b000d00000002001d0000002401100370000000000101043b000c00000001001d193f156e0000040f0000000601000039000000000101041a000000ff01100190000008ec0000c13d0000000d0100006b00000ad90000c13d000000400100043d0000004402100039000006bd0300004100000000003204350000066a0200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000008f70000013d0000000004000416000000000404004b000013370000c13d000000040420008a000000400440008c000013370000413d0000000404100370000000000504043b000006550450009c000013370000213d0000002304500039000006a106000041000000000724004b00000000070000190000000007068019000006a104400197000000000804004b0000000006008019000006a10440009c000000000607c019000000000406004b000013370000c13d0000000404500039000000000441034f000000000704043b000006550470009c000000350000213d0000000506700210000000bf08600039000000200400008a000000000848016f000006550980009c000000350000213d000000400080043f000000800070043f00000024055000390000000006560019000000000826004b000013370000213d000000000707004b000007cf0000613d0000008007000039000000000851034f000000000808043b000006560980009c000013370000213d000000200770003900000000008704350000002005500039000000000865004b000007c60000413d0000002405100370000000000505043b000006550650009c000013370000213d0000002306500039000006a107000041000000000826004b00000000080000190000000008078019000006a106600197000000000906004b0000000007008019000006a10660009c000000000708c019000000000607004b000013370000c13d0000000406500039000000000661034f000000000606043b000006550760009c000000350000213d00000005076002100000003f08700039000000000848016f000000400900043d0000000008890019000a00000009001d000000000998004b00000000090000190000000109004039000006550a80009c000000350000213d0000000109900190000000350000c13d000000400080043f0000000a080000290000000008680436000900000008001d00000024055000390000000007570019000000000227004b000013370000213d000000000206004b00000d120000c13d000000800100043d000000000101004b000000000100001900000d210000613d00000d4a0000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000000402100370000000000302043b000006560230009c000013370000213d0000002401100370000000000201043b000006560120009c000013370000213d0000000001030019193f146d0000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000065101000041000006510320009c00000000020180190000004001200210000006b8011001c7000019400001042e0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000002402100370000000000202043b000e00000002001d000006560220009c000013370000213d0000000401100370000000000101043b000d00000001001d00000000001004350000000301000039000000200010043f00000040020000390000000001000019193f191f0000040f0000000101100039000000000101041a193f163e0000040f0000000d010000290000000e02000029000008b30000013d0000000001000416000000000101004b000013370000c13d0000000601000039000000000101041a000006b001100198000008c10000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000600220008c000013370000413d0000000402100370000000000202043b000e00000002001d000006560220009c000013370000213d0000004402100370000000000202043b000c00000002001d0000002401100370000000000101043b000d00000001001d193f156e0000040f0000000e0100006b000009280000c13d000000400100043d0000006402100039000006aa0300004100000000003204350000004402100039000006ab0300004100000000003204350000002402100039000000230300003900000000003204350000066a0200004100000000002104350000000402100039000000200300003900000000003204350000065102000041000006510310009c00000000010280190000004001100210000006a9011001c700001941000104300000000004000416000000000404004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000206000039000000000506041a000000010750019000000001025002700000007f0420018f000000000402c0190000001f0240008c00000000020000190000000102002039000000000825013f0000000401100370000000000201043b0000000101800190000008fe0000613d000006e10100004100000000001004350000002201000039000000380000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000401100370000000000201043b000000000102004b0000000001000019000000010100c039000e00000002001d000000000112004b000013370000c13d193f149e0000040f0000000e04000029000000a801400210000006b0011001970000000602000039000000000302041a0000066203300197000000000113019f000000000012041b000000400100043d000000000041043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f00000658011001c70000800d020000390000000103000039000006c104000041000009230000013d0000000003000416000000000303004b000013370000c13d000000040220008a000000400220008c000013370000413d0000002402100370000000000302043b000006560230009c000013370000213d0000000002000411000000000323004b000009780000c13d0000000401100370000000000101043b193f17320000040f0000000001000019000019400001042e0000000001000416000000000101004b000013370000c13d0000066001000041000008c30000013d0000000001000416000000000101004b000013370000c13d0000000601000039000000000101041a000000ff011001900000000001000019000000010100c039000000800010043f000006ba01000041000019400001042e0000000003000416000000000303004b000013370000c13d000000040220008a000000200220008c000013370000413d0000000401100370000000000601043b000006560160009c000013370000213d0000000601000039000000000201041a000000080320027000000656033001970000000005000411000000000353004b000008e30000c13d000000000306004b000009cf0000c13d0000066a01000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f000006ad01000041000000c40010043f000006ae01000041000009810000013d0000066a01000041000000800010043f0000002001000039000000840010043f000000a40010043f000006c401000041000000c40010043f000006c5010000410000194100010430000000400100043d0000004402100039000006e40300004100000000003204350000002402100039000000100300003900000000003204350000066a0200004100000000002104350000000402100039000000200300003900000000003204350000065102000041000006510310009c000000000102801900000040011002100000066b011001c70000194100010430000000800040043f000000000107004b000009530000613d0000000000600435000000a001000039000000000504004b000009650000613d000006c60100004100000000060000190000000005060019000000000601041a000000a007500039000000000067043500000001011000390000002006500039000000000746004b000009070000413d000000c001500039000009590000013d000001000400008a000000000343016f000000000032041b0000000002000411000000000021043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f00000658011001c70000800d020000390000000103000039000006cb04000041193f19350000040f0000000101200190000013370000613d0000000001000019000019400001042e000000400200043d000006610120009c000000350000213d0000004001200039000000400010043f000000010100003a000000000312043600000000020000310000000202200367000000000202043b0000000000230435000009eb0000c13d000006e10100004100000000001004350000003201000039000000380000013d0000000000300435000000a002000039000000000301004b000009470000613d000006b90200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000514004b0000093e0000413d000000c002300039000000800220008a0000008001000039000e00000001001d193f13aa0000040f0000002001000039000000400200043d000d00000002001d00000000021204360000000e01000029193f13ca0000040f0000000d040000290000096e0000013d000001000100008a000000000115016f000000a00010043f000000000104004b000000c001000039000000a0010060390000001f01100039000000200400008a000000000141016f000006a205100041000006a30550009c000000350000413d000000800500043d000000400010043f000000000505004b000009de0000c13d000006a40210009c000000350000213d0000002002100039000000400020043f0000000000010435000000400400043d000e00000004001d00000020020000390000000002240436193f13ca0000040f0000000e0400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f000019400001042e0000066a01000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f000006cd01000041000000c40010043f000006ce01000041000000e40010043f000006af010000410000194100010430000006f30320009c000008c30000613d000006f40320009c000008c30000613d000006f50220009c000008c30000613d0000098f0000013d000006ef0320009c000008c30000613d000006f00220009c000008c30000613d0000000001000019000008c30000013d000000400100043d0000000e0200006b000009e30000c13d00000044021000390000066903000041000000000032043500000024021000390000001903000039000008f20000013d000c00000002001d00000000002004350000000101000039000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000d04000029000000ff0340018f000000000232019f000000000021041b000000400100043d000000000041043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f00000658011001c70000800d020000390000000303000039000006be040000410000000c050000290000000e06000029000009230000013d000006ac0220019700000008036002100000065c03300197000000000232019f000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000003030000390000065a04000041000009230000013d000006d80520009c00000a720000413d0000004005000039000006d87620012a00000a7c0000013d193f13940000040f0000000d01000029000000a0011002100000000e011001af0000000402000039000000000012041b0000000001000019000019400001042e0000000d040000290000000000430435000000400300043d000006610430009c000000350000213d0000004004300039000000400040043f000000200430003900000000002404350000000000130435000000000101004b000009340000613d0000000c010000290000000000140435000000400100043d000006a40210009c000000350000213d0000002002100039000000400020043f00000000000104350000000d010000290000000000100435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000b00000002001d0000000c0120006c00000d540000813d000000400100043d0000006402100039000006a70300004100000000003204350000004402100039000006a80300004100000d0e0000013d0000065104000041000006510510009c00000000010480190000004001100210000006510530009c00000000030480190000006003300210000000000113019f000006510320009c0000000002048019000000c002200210000000000112019f0000000e02000029193f19350000040f000000010820018f00030000000103550000006001100270000106510010019d0000065101100197000000000201004b00000a450000c13d000000000108004b000009260000c13d000000400100043d000006bb0200004100000000002104350000065102000041000006510310009c00000000010280190000004001100210000006bc011001c70000194100010430000006550210009c000000350000213d0000003f02100039000000200300008a000000000232016f000000400300043d0000000002230019000000000432004b00000000040000190000000104004039000006550520009c000000350000213d0000000104400190000000350000c13d000000400020043f0000001f0210018f00000000031304360000000304000367000000050110027200000a620000613d000000000500001900000005065002100000000007630019000000000664034f000000000606043b00000000006704350000000105500039000000000615004b00000a5a0000413d000000000502004b00000a3a0000613d0000000501100210000000000414034f00000000011300190000000302200210000000000301043300000000032301cf000000000323022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000232019f000000000021043500000a3a0000013d000006d95620012a000006da0520009c000000000602a019000006da0520009c00000000050000190000002005002039000006db0760009c00000010055081bf000006dc06608197000006db7660812a000006dd0760009c00000008055080390000065506608197000006dd7660812a000027100760008c00000004055080390000065106608197000027107660811a000000640760008c00000002055080390000ffff0660818f000000647660811a000000090660008c00000001055020390000004006500039000000000646016f0000000006160019000006550760009c000000350000213d000000400060043f000000010650003900000000066104360000002007500039000000050770027200000a9e0000613d00000000080000190000000509800210000000000a960019000000000993034f000000000909043b00000000009a04350000000108800039000000000978004b00000a960000413d000000000300004b00000aa00000613d00000000035100190000002103300039000000090720008c0000000a7220011a0000000307700210000006de0770021f000006df07700197000000010330008a0000000008030433000006e008800197000000000787019f000000000073043500000aa20000213d000000400200043d0000002005200039000000800300043d000000000703004b00000aba0000613d00000000070000190000000008570019000000a009700039000000000909043300000000009804350000002007700039000000000837004b00000ab30000413d000000000553001900000000000504350000000001010433000000000701004b00000ac70000613d000000000700001900000000085700190000000009670019000000000909043300000000009804350000002007700039000000000817004b00000ac00000413d00000000055100190000000000050435000000000131001900000000001204350000003f01100039000000000141016f0000000003210019000000000113004b000000000100001900000001010040390000000004030019000006550330009c000000350000213d0000000101100190000000350000c13d000000400040043f0000000001020019000009690000013d000000800100043d000000000101004b000009260000613d0000000002000019000000400400043d000006a40140009c000000350000213d0000000501200210000000a0011000390000000001010433000e00000002001d0000002002400039000000400020043f000000000004043500000656011001970000000c020000290000000d03000029193f17880000040f0000000e020000290000000102200039000000800100043d000000000112004b00000add0000413d000009260000013d000000000302004b000000000300001900000af50000613d000000a00300043d0000000304200210000000010500008a000000000445022f000000000454013f000000000343016f0000000102200210000000000223019f000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d020000390000000103000039000006c204000041000009230000013d000000000302004b000000000300001900000b0b0000613d000000a00300043d0000000304200210000000010500008a000000000445022f000000000454013f000000000443016f0000000103200210000000000234019f000000000021041b0000000001000019000019400001042e0000000d0100002900000000001004350000000101000039000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000b020000290000065602200197000e00000002001d0000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff01100190000004e30000c13d0000000601000039000000000101041a000006b00110019800000b3f0000613d0000000701000039000000000101041a00000656011001970000000e0110006b000004e30000613d000000400100043d0000006402100039000006cf0300004100000000003204350000004402100039000006d003000041000000000032043500000024021000390000002e03000039000008590000013d000000070100006b000000000100001900000b4e0000613d0000000c01000029000000000101043300000007040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000000602000029000000000012041b0000000601000039000700000001001d000000000401041a00000651030000410000000001000414000006510210009c0000000001038019000000c00110021000000659011001c7000600000004001d000000080240027000000656052001970000800d0200003900000003030000390000000006000411000c00000003001d0000065a04000041000e00000006001d193f19350000040f0000000101200190000013370000613d00000006010000290000065b011001970000000e0200002900000008022002100000065c02200197000000000112019f0000000702000029000000000012041b00000000000004350000000c01000029000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f00000651010000410000000002000414000006510320009c0000000002018019000000c0012002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff0110019000000bc20000c13d00000000000004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000004030000390000065e0400004100000000050000190000000e060000290000000007060019193f19350000040f0000000101200190000013370000613d0000065f0100004100000000001004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff0110019000000c110000c13d0000065f0100004100000000001004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000004030000390000065e040000410000065f050000410000000e060000290000000007060019193f19350000040f0000000101200190000013370000613d000006600100004100000000001004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff0110019000000c600000c13d000006600100004100000000001004350000000c01000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000001000300008a000000000232016f00000001022001bf000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000004030000390000065e0400004100000660050000410000000e060000290000000007060019193f19350000040f0000000101200190000013370000613d0000000a01000029000027110110008c000005300000813d000000400100043d0000000b020000290000065602200198000009940000613d000006610310009c000000350000213d0000004003100039000000400030043f00000020031000390000000a04000029000000000043043500000000002104350000000901000029000000a001100210000000000121019f0000000402000039000000000012041b0000000702000029000000000102041a000006620110019700000663011001c7000000000012041b000000080100002900000656031001970000000701000039000c00000001001d000000000401041a000000400100043d0000002002100039000e00000003001d0000000000320435000b00000004001d0000065602400197000000000021043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f0000065d011001c70000800d020000390000000103000039000a00000003001d0000066404000041193f19350000040f0000000101200190000013370000613d0000000b0100002900000665011001970000000e011001af0000000c02000029000000000012041b000000400200043d00000044012000390000048303000039000000000031043500000020012000390000066603000041000000000031043500000024032000390000000004000410000000000043043500000044030000390000000000320435000006670320009c000000350000213d0000008003200039000000400030043f000000000302043300000000020004140000000804000029000000040440008c000012500000c13d0000000101000031000012630000013d000000400100043d000a00000001001d000006610110009c000000350000213d0000000a020000290000004001200039000000400010043f000000010100003a000400000001001d000000000212043600000000010000310000000201100367000000000101043b000900000002001d0000000000120435000009340000613d000000020200002900000009030000290000000000230435000000400200043d000800000002001d000006610220009c000000350000213d00000008030000290000004002300039000000400020043f0000002002300039000700000002001d000000000012043500000004010000290000000000130435000000000101004b000009340000613d0000000101000029000000070200002900000000001204350000000d0100006b00000ce20000613d0000000701000039000300000001001d000000000101041a00000656021001970000000b0220006b00000ce20000613d0000000a020000290000000003020433000000000203004b00000ec60000c13d00000002010000290000000000100435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000e00000002001d000000010120006c00000f3c0000813d000000400100043d0000006402100039000006d20300004100000000003204350000004402100039000006d303000041000005360000013d000000400100043d0000006402100039000006e50300004100000000003204350000004402100039000006e603000041000000000032043500000024021000390000002403000039000008590000013d0000000a02000029000000000651034f000000000606043b000000200220003900000000006204350000002005500039000000000675004b00000d130000413d0000000a010000290000000001010433000000800200043d000000000212004b00000d4a0000c13d000006550210009c000000350000213d00000005021002100000003f05200039000000000545016f000000400400043d000800000004001d0000000004450019000000000554004b00000000050000190000000105004039000006550640009c000000350000213d0000000105500190000000350000c13d000000400040043f000000080400002900000000071404360000001f0120018f000000050220027200000d3d0000613d000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000524004b00000d350000413d000700000007001d000000000101004b00000d400000613d000000800100043d000000000101004b00000d8e0000c13d000000400200043d000e00000002001d000000200100003900000000021204360000000801000029193f142a0000040f0000096d0000013d000000400100043d0000006402100039000006c70300004100000000003204350000004402100039000006c803000041000000000032043500000024021000390000002903000039000008590000013d0000000d010000290000000000100435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000e020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d0000000c030000290000000b02300069000000000101043b000000000021041b000000400100043d000000200210003900000000003204350000000d02000029000000000021043500000651020000410000000003000414000006510430009c0000000003028019000006510410009c00000000010280190000004001100210000000c002300210000000000112019f0000065d011001c70000800d0200003900000004030000390000000005000411000006a6040000410000000e060000290000000007000019193f19350000040f0000000101200190000013370000613d000000400100043d193f139f0000040f0000000001000019000019400001042e000e80100000003d00000000030000190000000504300210000000a001400039000000000101043300000656021001970000000a010000290000000001010433000000000131004b000009340000a13d000c00000003001d000d00000002001d000000000102004b00000651030000410000000e0200002900000ebf0000613d000b00000004001d000000090140002900000000010104330000000000100435000000200000043f0000000001000414000006510410009c0000000001038019000000c0011002100000065d011001c7193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000e02000029193f193a0000040f0000000102200190000013370000613d000000080200002900000000020204330000000c03000029000000000232004b00000007020000290000000b04000029000009340000a13d0000000002240019000000000101043b000000000101041a00000000001204350000000103300039000000800100043d000000000113004b00000d900000413d00000d430000013d000c80100000003d000000000200001900000008010000290000000001010433000000000121004b0000065103000041000009340000a13d000a00000002001d0000000501200210000000a002100039000000000402043300000007011000290000000001010433000e00000001001d000b00000004001d0000000000400435000000200000043f0000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000000c02000029193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000c02000029193f193a0000040f0000000102200190000013370000613d000000000101043b000000000201041a000900000002001d0000000e0120006c00000a1e0000413d0000000b010000290000000000100435000000200000043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d00000009030000290000000e0230006a000000000101043b000000000021041b0000000a020000290000000102200039000000800100043d000000000112004b00000dca0000413d000002360000013d0000000b010000290000000002010433000000800100043d000000000221004b00000eb50000c13d000000000101004b0000000b0100002900000fab0000c13d000000400100043d000000400200003900000000022104360000004003100039000000800400043d00000000004304350000000003000411000e00000003001d0000006003100039000000000504004b00000e320000613d000000800500003900000000060000190000002005500039000000000705043300000000037304360000000106600039000000000746004b00000e2c0000413d000000000413004900000000004204350000000b0200002900000000040204330000000002430436000000000304004b00000e410000613d00000000030000190000000b050000290000002005500039000000000605043300000000026204360000000103300039000000000643004b00000e3b0000413d00000000021200490000065104000041000006510310009c00000000010480190000004001100210000006510320009c00000000020480190000006002200210000000000112019f0000000002000414000006510320009c0000000002048019000000c002200210000000000121019f00000659011001c70000800d020000390000000403000039000006a5040000410000000e0500002900000000060000190000000907000029193f19350000040f0000000101200190000013370000613d000006b3010000410000000000100439000000080100002900000004001004430000000001000414000006510210009c0000065101008041000000c001100210000006b4011001c70000800202000039193f193a0000040f0000000102200190000011f30000613d000000000101043b000000000101004b000009260000613d000000400300043d0000004401300039000000a0020000390000000000210435000006d401000041000000000013043500000004013000390000000e02000029000000000021043500000024013000390000000000010435000000a401300039000000800200043d0000000000210435000d00000003001d000000c401300039000000000302004b00000e830000613d000000800300003900000000040000190000002003300039000000000503043300000000015104360000000104400039000000000524004b00000e7d0000413d0000000d030000290000000002310049000000040220008a000000640330003900000000002304350000000b0500002900000000020504330000000001210436000000000302004b00000e940000613d00000000030000190000002005500039000000000405043300000000014104360000000103300039000000000423004b00000e8e0000413d0000000d030000290000000002310049000000040220008a00000084033000390000000000230435000000060600002900000000020604330000000001210436000000000302004b00000ea60000613d000000000300001900000000041300190000002003300039000000000563001900000000050504330000000000540435000000000423004b00000e9f0000413d0000000003120019000000000003043500000000030004140000000904000029000000040440008c00000fdf0000c13d0000000005000415000000140550008a00000005055002100000000103000031000000200130008c00000000040300190000002004008039001400000000001d0000101d0000013d000000400100043d0000006402100039000006e70300004100000000003204350000004402100039000006e803000041000000000032043500000024021000390000002803000039000008590000013d000000400100043d0000006402100039000006c90300004100000000003204350000004402100039000006ca03000041000005360000013d000600a40000003d00000000040000190000065602100197000000000343004b000009340000a13d00000008030000290000000003030433000000000343004b000009340000a13d000e00000004001d00000005034002100000000704300029000000090330002900000000050304330000000004040433000000400300043d000000a40630003900000000004604350000008404300039000000000054043500000064043000390000000c05000029000000000054043500000044043000390000000d0500002900000000005404350000002004300039000006b105000041000000000054043500000024053000390000000b06000029000000000065043500000006050000290000000000530435000006b20530009c000000350000213d000000e005300039000000400050043f00000000050304330000000003000414000000040620008c00000ef30000c13d0000000103000031000000040200002900000f070000013d000006510140009c000006510600004100000000040680190000004001400210000006510450009c00000000050680190000006004500210000000000114019f000006510430009c0000000003068019000000c003300210000000000113019f193f19350000040f000000010220018f00030000000103550000006001100270000106510010019d00000651031001970000000301000029000000000101041a000000000403004b00000f330000613d000006550430009c000000350000213d0000003f04300039000000050540017f000000400400043d0000000005540019000000000645004b00000000060000190000000106004039000006550750009c000000350000213d0000000106600190000000350000c13d000000400050043f00000000043404360000000305000367000000050630027200000f240000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b00000f1c0000413d0000001f0330019000000f330000613d0000000506600210000000000565034f00000000046400190000000303300210000000000604043300000000063601cf000000000636022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000363019f0000000000340435000000000202004b000011960000613d0000000a0200002900000000030204330000000e040000290000000104400039000000000234004b00000ec80000413d00000ce20000013d00000002010000290000000000100435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000d020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d0000000e03000029000000010230006a000000000101043b000000000021041b00000002010000290000000000100435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b0000000c020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000301041a0000000102300029000000000332004b000000000300001900000001030040390000000103300190000011990000613d000006e10100004100000000001004350000001101000039000000380000013d0000000c0100002900000000001004350000000101000039000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b00000004020000290000065602200197000e00000002001d0000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000013370000613d000000000101043b000000000101041a000000ff01100190000006cd0000c13d0000000601000039000000000101041a000006b00110019800000b3f0000613d0000000701000039000000000101041a00000656011001970000000e0110006b000006cd0000613d00000b3f0000013d000e80100000003d00000000020000190000000001010433000000000121004b000009340000a13d000c00000002001d00000005012002100000000a021000290000000002020433000d00000002001d000000a00110003900000000010104330000000000100435000000200000043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000e02000029193f193a0000040f0000000102200190000013370000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000000e02000029193f193a0000040f0000000102200190000013370000613d000000000101043b000000000301041a0000000d02300029000000000332004b00000000030000190000000103004039000000010330019000000f7c0000c13d000000000021041b0000000c020000290000000102200039000000800100043d000000000112004b0000000b0100002900000fad0000413d00000e1f0000013d0000001f02200039000000070220017f0000000d05000029000000000151004900000000012100190000065102000041000006510410009c00000000010280190000006001100210000006510450009c000000000402001900000000040540190000004004400210000000000141019f000006510430009c0000000003028019000000c002300210000000000112019f0000000902000029193f19350000040f0000000d0a000029000000000301001900000060033002700000065103300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000010060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ffe0000413d000000000705004b000010150000613d0000000506600210000000000761034f0000000d066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000005000415000000130550008a0000000505500210001300000000001d0000000102200190000010d10000613d0000001f01400039000000600110018f0000000d02100029000000000112004b000000000100001900000001010040390000000004020019000006550220009c000000350000213d0000000101100190000000350000c13d000000400040043f000000200130008c000013370000413d0000000d010000290000000001010433000006b702100197000000000221004b000013370000c13d0000000502500270000000000201001f000006d40110009c000009260000613d0000066a01000041000e00000004001d00000000001404350000000401400039193f19040000040f000013880000013d000000000202004b000011230000c13d000000400100043d000000400200003900000000022104360000004003100039000000800400043d00000000004304350000006003100039000000000504004b0000104d0000613d000000800500003900000000060000190000002005500039000000000705043300000000037304360000000106600039000000000746004b000010470000413d00000000041300490000000000420435000000080200002900000000040204330000000002430436000000000304004b0000105c0000613d000000000300001900000008050000290000002005500039000000000605043300000000026204360000000103300039000000000643004b000010560000413d00000000021200490000065104000041000006510310009c00000000010480190000004001100210000006510320009c00000000020480190000006002200210000000000112019f0000000002000414000006510320009c0000000002048019000000c002200210000000000121019f00000659011001c70000800d020000390000000403000039000006a50400004100000004050000290000000c060000290000000607000029193f19350000040f0000000101200190000013370000613d000006b3010000410000000000100439000000050100002900000004001004430000000001000414000006510210009c0000065101008041000000c001100210000006b4011001c70000800202000039193f193a0000040f0000000102200190000011f30000613d000000000101043b000000000101004b000009260000613d000000400300043d0000004401300039000000a002000039000000000021043500000024013000390000000c020000290000000000210435000006d4010000410000000000130435000000040130003900000004020000290000000000210435000000a401300039000000800200043d0000000000210435000e00000003001d000000c401300039000000000302004b0000109f0000613d000000800300003900000000040000190000002003300039000000000503043300000000015104360000000104400039000000000524004b000010990000413d0000000e030000290000000002310049000000040220008a00000064033000390000000000230435000000080500002900000000020504330000000001210436000000000302004b000010b00000613d00000000030000190000002005500039000000000405043300000000014104360000000103300039000000000423004b000010aa0000413d0000000e030000290000000002310049000000040220008a00000084033000390000000000230435000000020600002900000000020604330000000001210436000000000302004b000010c20000613d000000000300001900000000041300190000002003300039000000000563001900000000050504330000000000540435000000000423004b000010bb0000413d0000000003120019000000000003043500000000030004140000000604000029000000040440008c000011f40000c13d0000000005000415000000120550008a00000005055002100000000103000031000000200130008c00000000040300190000002004008039001200000000001d000012320000013d000000040230008c000013820000413d0000000002000433000006b602200197000000000401043b000006b704400197000000000224019f0000000000200435000006b7022001970000066a0220009c000013820000c13d000000440230008c000013820000413d000000400200043d0000000401100370000000040430008a0000001f0540018f0000000506400272000010ed0000613d000000000700001900000005087002100000000009820019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010e50000413d000000000705004b000010fc0000613d0000000506600210000000000161034f00000000066200190000000305500210000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000005020433000006550150009c000013820000213d0000002401500039000000000131004b000013820000213d00000000012500190000000003010433000006550630009c000013820000213d000000000442001900000000063100190000002006600039000000000446004b000013820000213d00000000033500190000003f03300039000000070330017f0000000005230019000000000235004b000000000200001900000001020040390000000004050019000006550350009c000000350000213d0000000102200190000000350000c13d000000400040043f000000000201004b000013820000613d0000066a02000041000e00000004001d00000000002404350000000402400039000000200300003900000000003204350000002402400039193f13ca0000040f000013880000013d000d00a40000003d000a00010000003d000000000500001900000656021001970000000003040433000000000353004b000009340000a13d000e00000005001d000000050350021000000007043000290000000004040433000000a0033000390000000005030433000000400300043d000000a40630003900000000004604350000008404300039000000000054043500000064043000390000000605000029000000000054043500000044043000390000000c0500002900000000005404350000002004300039000006b10500004100000000005404350000002405300039000000040600002900000000006504350000000d050000290000000000530435000006b20530009c000000350000213d000000e005300039000000400050043f00000000050304330000000003000414000000040620008c0000114e0000c13d00000001030000310000000a02000029000011610000013d000006510140009c000006510600004100000000040680190000004001400210000006510450009c00000000050680190000006004500210000000000114019f000006510430009c0000000003068019000000c003300210000000000131019f193f19350000040f00030000000103550000006001100270000106510010019d00000651031001970000000b01000029000000000101041a000000000403004b0000118d0000613d000006550430009c000000350000213d0000003f04300039000000030540017f000000400400043d0000000005540019000000000645004b00000000060000190000000106004039000006550750009c000000350000213d0000000106600190000000350000c13d000000400050043f0000000004340436000000030500036700000005063002720000117e0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000011760000413d0000001f033001900000118d0000613d0000000506600210000000000565034f00000000046400190000000303300210000000000604043300000000063601cf000000000636022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000363019f00000000003404350000000102200190000011960000613d0000000e050000290000000105500039000000800200043d000000000325004b0000000804000029000011260000413d000006de0000013d000000400100043d000006d10200004100000a3e0000013d000000000021041b000000400100043d0000002002100039000000010300002900000000003204350000000202000029000000000021043500000651040000410000000002000414000006510320009c0000000002048019000006510310009c00000000010480190000004001100210000000c002200210000000000112019f0000065d011001c70000800d020000390000000403000039000006a6040000410000000b050000290000000d060000290000000c07000029193f19350000040f0000000101200190000013370000613d000006b30100004100000000001004390000000c0100002900000004001004430000000001000414000006510210009c0000065101008041000000c001100210000006b4011001c70000800202000039193f193a0000040f0000000102200190000011f30000613d000000000101043b000000000101004b000009260000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000102000029000000000021043500000044013000390000000202000029000000000021043500000024013000390000000d020000290000000000210435000006b501000041000000000013043500000004013000390000000b020000290000000000210435000000a402300039000000800100043d0000000000120435000e00000003001d000000c402300039000000000301004b000011e40000613d00000000030000190000000004230019000000a005300039000000000505043300000000005404350000002003300039000000000413004b000011dd0000413d0000000002210019000000000002043500000000020004140000000c03000029000000040330008c000012e20000c13d0000000005000415000000100550008a00000005055002100000000103000031000000200130008c00000000040300190000002004008039001000000000001d0000131f0000013d000000000001042f0000001f02200039000000030220017f0000000e05000029000000000151004900000000012100190000065102000041000006510410009c00000000010280190000006001100210000006510450009c000000000402001900000000040540190000004004400210000000000141019f000006510430009c0000000003028019000000c002300210000000000112019f0000000602000029193f19350000040f0000000e0a000029000000000301001900000060033002700000065103300197000000200430008c000000000403001900000020040080390000001f0540018f00000005064002720000121b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000012130000413d000000000705004b0000122a0000613d0000000506600210000000000761034f0000000e066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000005000415000000110550008a0000000505500210001100000000001d0000000102200190000012980000613d0000001f01400039000000600110018f0000000e02100029000000000112004b000000000100001900000001010040390000000004020019000006550220009c000000350000213d0000000101100190000000350000c13d000000400040043f000000200130008c000013370000413d0000000e010000290000000001010433000006b702100197000000000221004b000013370000c13d0000000502500270000000000201001f000006d40110009c000009260000613d0000066a01000041000d00000004001d00000000001404350000000401400039193f19040000040f0000000d04000029000013890000013d0000065104000041000006510510009c00000000010480190000004001100210000006510530009c00000000030480190000006003300210000000000113019f000006510320009c0000000002048019000000c002200210000000000121019f0000000802000029193f19350000040f000a00010020019300030000000103550000006001100270000106510010019d0000065101100197000000000201004b0000126c0000c13d0000000a0100006b00000a3c0000613d0000002001000039000001000010044300000120000004430000066801000041000019400001042e000006550210009c000000350000213d0000003f021000390000000d0220017f000000400300043d0000000002230019000000000432004b00000000040000190000000104004039000006550520009c000000350000213d0000000104400190000000350000c13d000000400020043f0000001f0210018f000000000313043600000003040003670000000501100272000012880000613d000000000500001900000005065002100000000007630019000000000664034f000000000606043b00000000006704350000000105500039000000000615004b000012800000413d000000000502004b000012650000613d0000000501100210000000000414034f00000000011300190000000302200210000000000301043300000000032301cf000000000323022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000232019f0000000000210435000012650000013d000000040230008c000013820000413d0000000002000433000006b602200197000000000401043b000006b704400197000000000224019f0000000000200435000006b7022001970000066a0220009c000013820000c13d000000440230008c000013820000413d000000400200043d0000000401100370000000040430008a0000001f0540018f0000000506400272000012b40000613d000000000700001900000005087002100000000009820019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000012ac0000413d000000000705004b000012c30000613d0000000506600210000000000161034f00000000066200190000000305500210000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000005020433000006550150009c000013820000213d0000002401500039000000000131004b000013820000213d00000000012500190000000003010433000006550630009c000013820000213d000000000442001900000000063100190000002006600039000000000446004b000013820000213d00000000033500190000003f03300039000000030330017f0000000005230019000000000235004b000000000200001900000001020040390000000004050019000006550350009c000000350000213d0000000102200190000000350000c13d000000400040043f000000000201004b000013820000613d0000111a0000013d0000001f01100039000000050110017f00000651030000410000000e05000029000006510450009c000000000403001900000000040540190000004004400210000000c401100039000006510510009c00000000010380190000006001100210000000000141019f000006510420009c0000000002038019000000c002200210000000000112019f0000000c02000029193f19350000040f0000000e0a000029000000000301001900000060033002700000065103300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000013080000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000013000000413d000000000705004b000013170000613d0000000506600210000000000761034f0000000e066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000000050004150000000f0550008a0000000505500210000f00000000001d0000000102200190000013390000613d0000001f01400039000000600110018f0000000e02100029000000000112004b000000000100001900000001010040390000000004020019000006550220009c000000350000213d0000000101100190000000350000c13d000000400040043f000000200130008c000013370000413d0000000e010000290000000001010433000006b702100197000000000221004b000013370000c13d0000000502500270000000000201001f000006b50110009c000009260000613d000012490000013d00000000010000190000194100010430000000040230008c000013820000413d0000000002000433000006b602200197000000000401043b000006b704400197000000000224019f0000000000200435000006b7022001970000066a0220009c000013820000c13d000000440230008c000013820000413d000000400200043d0000000401100370000000040430008a0000001f0540018f0000000506400272000013550000613d000000000700001900000005087002100000000009820019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000134d0000413d000000000705004b000013640000613d0000000506600210000000000161034f00000000066200190000000305500210000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000005020433000006550150009c000013820000213d0000002401500039000000000131004b000013820000213d00000000012500190000000003010433000006550630009c000013820000213d000000000442001900000000063100190000002006600039000000000446004b000013820000213d00000000033500190000003f03300039000000050330017f0000000005230019000000000235004b000000000200001900000001020040390000000004050019000006550350009c000000350000213d0000000102200190000000350000c13d000000400040043f000000000201004b000013930000c13d000000400200043d000e00000002001d0000066a0100004100000000001204350000000401200039193f19110000040f0000000e0400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f00001941000104300000111a0000013d000006f60210009c000013990000813d0000004001100039000000400010043f000000000001042d000006e10100004100000000001004350000004101000039000000040010043f000006e2010000410000194100010430000006f70210009c000013a40000813d0000002001100039000000400010043f000000000001042d000006e10100004100000000001004350000004101000039000000040010043f000006e20100004100001941000104300000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000006550310009c000013b70000213d0000000102200190000013b70000c13d000000400010043f000000000001042d000006e10100004100000000001004350000004101000039000000040010043f000006e2010000410000194100010430000000000403004b000013c70000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000013c00000413d00000000012300190000000000010435000000000001042d00000000030104330000000002320436000000000403004b000013d60000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000013cf0000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d00000000030100190000001f01300039000006a104000041000000000521004b00000000050000190000000005044019000006a106200197000006a101100197000000000761004b000000000400a019000000000161013f000006a10110009c000000000405c019000000000104004b000014280000613d0000000205000367000000000135034f000000000401043b000006f80140009c000014220000813d0000003f01400039000000200600008a000000000661016f000000400100043d0000000006610019000000000716004b00000000070000190000000107004039000006550860009c000014220000213d0000000107700190000014220000c13d0000002007300039000000400060043f00000000034104360000000006740019000000000226004b000014280000213d000000000575034f0000001f0240018f0000000506400272000014100000613d000000000700001900000005087002100000000009830019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000014080000413d000000000702004b0000141f0000613d0000000506600210000000000565034f00000000066300190000000302200210000000000706043300000000072701cf000000000727022f000000000505043b0000010002200089000000000525022f00000000022501cf000000000272019f000000000026043500000000024300190000000000020435000000000001042d000006e10100004100000000001004350000004101000039000000040010043f000006e201000041000019410001043000000000010000190000194100010430000000000301001900000000040304330000000001420436000000000204004b000014360000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000542004b000014300000413d000000000001042d0001000000000002000106560010019c000014580000613d0000000000200435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000014560000613d000000000101043b00000001020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000014560000613d000000000101043b000000000101041a000000000001042d00000000010000190000194100010430000000400100043d0000006402100039000006c90300004100000000003204350000004402100039000006ca03000041000000000032043500000024021000390000002a0300003900000000003204350000066a0200004100000000002104350000000402100039000000200300003900000000003204350000065102000041000006510310009c00000000010280190000004001100210000006a9011001c700001941000104300001000000000002000100000002001d000006560110019700000000001004350000000101000039000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f00000001022001900000149c0000613d000000000101043b00000001020000290000065602200197000100000002001d0000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f00000001022001900000149c0000613d000000000101043b000000000101041a000000ff011001900000149b0000c13d0000000601000039000000000101041a000006b00110019800000000010000190000149b0000613d0000000701000039000000000101041a0000065601100197000000010110006b00000000010000190000000101006039000000000001042d0000000001000019000019410001043000040000000000020000000001000411000400000001001d0000000000100435000006f901000041000000200010043f00000651010000410000000002000414000006510320009c0000000002018019000000c0012002100000065d011001c70000801002000039193f193a0000040f0000000102200190000014b30000613d000000000101043b000000000101041a000000ff01100190000014b50000613d000000000001042d00000000010000190000194100010430000000400200043d000006fa0120009c000014bc0000413d000006e10100004100000000001004350000004101000039000014d80000013d0000006001200039000000400010043f0000002a01000039000000000112043600000000030000310000000203300367000000000400001900000000050100190000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000020640008c000014c40000413d0000000004020433000000000404004b000014d50000613d0000000004010433000006e004400197000006fb044001c700000000004104350000000004020433000000020440008c000014db0000813d000006e10100004100000000001004350000003201000039000000040010043f000006e201000041000019410001043000000021042000390000000005040433000006e005500197000006fc055001c700000000005404350000002904000039000000040800002900000000060800190000000007020433000000000747004b000014d50000a13d0000000307600210000000780770018f000006de0770021f00000000081400190000000009080433000006e009900197000006df07700197000000000779019f00000000007804350000000408600270000000010440008a000000010740008c000014e20000213d000000100460008c0000155d0000813d000000400400043d000400000004001d000006670440009c000014b80000213d00000004050000290000008004500039000000400040043f000000420400003900000000054504360000000004000019000300000005001d0000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000030640008c000015000000413d00000004090000290000000003090433000000000303004b000000030a000029000014d50000613d00000000030a0433000006e003300197000006fb033001c700000000003a04350000000003090433000000020330008c000014d50000413d00000021039000390000000004030433000006e004400197000006fc044001c700000000004304350000065f06000041000000410300003900000000050600190000000006090433000000000636004b000014d50000a13d0000000306500210000000780660018f000006de0660021f0000000007a300190000000008070433000006e008800197000006df06600197000000000686019f00000000006704350000000406500270000000010330008a000000010730008c0000151a0000213d000000100350008c0000155d0000813d000000400500043d000200000005001d0000002003500039000006fe0400004100000000004304350000000003020433000100000003001d0000003702500039193f13bd0000040f000000010200002900000002012000290000003702100039000006ff030000410000000000320435000000480210003900000004010000290000000003010433000400000003001d0000000301000029193f13bd0000040f000000040200002900000001032000290000002802300039000000020100002900000000002104350000004802300039193f13aa0000040f0000066a01000041000000400300043d000400000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000201000029193f13ca0000040f000000040400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f0000194100010430000000400100043d0000004402100039000006fd0300004100000000003204350000066a020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000065102000041000006510310009c000000000102801900000040011002100000066b011001c7000019410001043000040000000000020000000001000411000400000001001d00000000001004350000070001000041000000200010043f00000651010000410000000002000414000006510320009c0000000002018019000000c0012002100000065d011001c70000801002000039193f193a0000040f0000000102200190000015830000613d000000000101043b000000000101041a000000ff01100190000015850000613d000000000001042d00000000010000190000194100010430000000400200043d000006fa0120009c0000158c0000413d000006e10100004100000000001004350000004101000039000015a80000013d0000006001200039000000400010043f0000002a01000039000000000112043600000000030000310000000203300367000000000400001900000000050100190000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000020640008c000015940000413d0000000004020433000000000404004b000015a50000613d0000000004010433000006e004400197000006fb044001c700000000004104350000000004020433000000020440008c000015ab0000813d000006e10100004100000000001004350000003201000039000000040010043f000006e201000041000019410001043000000021042000390000000005040433000006e005500197000006fc055001c700000000005404350000002904000039000000040800002900000000060800190000000007020433000000000747004b000015a50000a13d0000000307600210000000780770018f000006de0770021f00000000081400190000000009080433000006e009900197000006df07700197000000000779019f00000000007804350000000408600270000000010440008a000000010740008c000015b20000213d000000100460008c0000162d0000813d000000400400043d000400000004001d000006670440009c000015880000213d00000004050000290000008004500039000000400040043f000000420400003900000000054504360000000004000019000300000005001d0000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000030640008c000015d00000413d00000004090000290000000003090433000000000303004b000000030a000029000015a50000613d00000000030a0433000006e003300197000006fb033001c700000000003a04350000000003090433000000020330008c000015a50000413d00000021039000390000000004030433000006e004400197000006fc044001c700000000004304350000066006000041000000410300003900000000050600190000000006090433000000000636004b000015a50000a13d0000000306500210000000780660018f000006de0660021f0000000007a300190000000008070433000006e008800197000006df06600197000000000686019f00000000006704350000000406500270000000010330008a000000010730008c000015ea0000213d000000100350008c0000162d0000813d000000400500043d000200000005001d0000002003500039000006fe0400004100000000004304350000000003020433000100000003001d0000003702500039193f13bd0000040f000000010200002900000002012000290000003702100039000006ff030000410000000000320435000000480210003900000004010000290000000003010433000400000003001d0000000301000029193f13bd0000040f000000040200002900000001032000290000002802300039000000020100002900000000002104350000004802300039193f13aa0000040f0000066a01000041000000400300043d000400000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000201000029193f13ca0000040f000000040400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f0000194100010430000000400100043d0000004402100039000006fd0300004100000000003204350000066a020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000065102000041000006510310009c000000000102801900000040011002100000066b011001c700001941000104300004000000000002000400000001001d00000000001004350000000301000039000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000016600000613d000000000101043b0000000002000411000300000002001d0000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000016600000613d000000000101043b000000000101041a000000ff01100190000016620000613d000000000001042d00000000010000190000194100010430000000400200043d000006fa0120009c000016690000413d000006e10100004100000000001004350000004101000039000016850000013d0000006001200039000000400010043f0000002a01000039000000000112043600000000030000310000000203300367000000000400001900000000050100190000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000020640008c000016710000413d0000000004020433000000000404004b000016820000613d0000000004010433000006e004400197000006fb044001c700000000004104350000000004020433000000020440008c000016880000813d000006e10100004100000000001004350000003201000039000000040010043f000006e201000041000019410001043000000021042000390000000005040433000006e005500197000006fc055001c700000000005404350000002904000039000000030800002900000000060800190000000007020433000000000747004b000016820000a13d0000000307600210000000780770018f000006de0770021f00000000081400190000000009080433000006e009900197000006df07700197000000000779019f00000000007804350000000408600270000000010440008a000000010740008c0000168f0000213d000000100460008c0000170a0000813d000000400400043d000300000004001d000006670440009c000016650000213d00000003050000290000008004500039000000400040043f000000420400003900000000054504360000000004000019000200000005001d0000000506400210000000000663034f000000000606043b00000000056504360000000104400039000000030640008c000016ad0000413d00000003090000290000000003090433000000000303004b000000020a000029000016820000613d00000000030a0433000006e003300197000006fb033001c700000000003a04350000000003090433000000020330008c000016820000413d00000021039000390000000004030433000006e004400197000006fc044001c700000000004304350000004103000039000000040700002900000000050700190000000006090433000000000636004b000016820000a13d0000000306500210000000780660018f000006de0660021f0000000007a300190000000008070433000006e008800197000006df06600197000000000686019f00000000006704350000000407500270000000010330008a000000010630008c000016c70000213d000000100350008c0000170a0000813d000000400500043d000400000005001d0000002003500039000006fe0400004100000000004304350000000003020433000100000003001d0000003702500039193f13bd0000040f000000010200002900000004012000290000003702100039000006ff030000410000000000320435000000480210003900000003010000290000000003010433000300000003001d0000000201000029193f13bd0000040f000000030200002900000001032000290000002802300039000000040100002900000000002104350000004802300039193f13aa0000040f0000066a01000041000000400300043d000300000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000401000029193f13ca0000040f000000030400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f0000194100010430000000400100043d0000004402100039000006fd0300004100000000003204350000066a020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000065102000041000006510310009c000000000102801900000040011002100000066b011001c700001941000104300000000601000039000000000101041a000000ff01100190000017200000c13d000000000001042d000000400100043d0000004402100039000006e40300004100000000003204350000002402100039000000100300003900000000003204350000066a0200004100000000002104350000000402100039000000200300003900000000003204350000065102000041000006510310009c000000000102801900000040011002100000066b011001c700001941000104300003000000000002000200000002001d000300000001001d00000000001004350000000301000039000100000001001d000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000017860000613d000000000101043b00000002020000290000065602200197000200000002001d0000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000017860000613d000000000101043b000000000101041a000000ff01100190000017850000613d000000030100002900000000001004350000000101000029000000200010043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000017860000613d000000000101043b00000002020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000017860000613d000000000101043b000000000201041a000001000300008a000000000232016f000000000021041b00000651010000410000000002000414000006510320009c0000000002018019000000c00120021000000659011001c70000800d0200003900000004030000390000000007000411000007010400004100000003050000290000000206000029193f19350000040f0000000101200190000017860000613d000000000001042d000000000100001900001941000104300008000000000002000000400800043d00000656051001980000187c0000613d000006f60680009c000018f50000813d0000004006800039000000400060043f000000010700003a000000000678043600000000080000310000000208800367000000000908043b0000000000960435000018780000613d0000000000260435000000400800043d000006610680009c000018f50000213d0000004006800039000000400060043f000000200680003900000000009604350000000000780435000000000707004b000018780000613d000300000001001d000200000004001d000600000005001d000500000003001d0000000000360435000400000002001d0000000000200435000000200000043f00000651030000410000000001000414000006510210009c0000000001038019000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000018760000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000006510210009c0000065101008041000000c0011002100000065d011001c70000801002000039193f193a0000040f0000000102200190000018760000613d000000000101043b000000000301041a00000005040000290000000002430019000000000332004b000000000300001900000001030040390000000103300190000018900000c13d000000000021041b000000400100043d000000200210003900000000004204350000000402000029000000000021043500000651040000410000000002000414000006510320009c0000000002048019000006510310009c00000000010480190000004001100210000000c002200210000000000112019f0000065d011001c70000800d0200003900000004030000390000000005000411000006a604000041000100000005001d00000000060000190000000607000029193f19350000040f0000000101200190000018760000613d000006b3010000410000000000100439000000030100002900000004001004430000000001000414000006510210009c0000065101008041000000c001100210000006b4011001c70000800202000039193f193a0000040f0000000102200190000018940000613d000000000101043b000000000101004b000000060200002900000002070000290000000504000029000018750000613d000000400a00043d0000008401a00039000000a00300003900000000003104350000006401a0003900000000004104350000004401a0003900000004030000290000000000310435000006b50100004100000000001a04350000000401a00039000000010300002900000000003104350000002401a0003900000000000104350000000001070433000000a403a000390000000000130435000000c406a00039000000000301004b000018150000613d000000000300001900000000046300190000002003300039000000000573001900000000050504330000000000540435000000000413004b0000180e0000413d000000000361001900000000000304350000000006000414000000040320008c000018230000c13d0000000005000415000000080550008a00000005055002100000000103000031000000200130008c00000000040300190000002004008039000800000000001d000018600000013d0000001f011000390005002000000092000000050110017f00000651030000410000065104a0009c000000000403001900000000040a40190000004004400210000000c401100039000006510510009c00000000010380190000006001100210000000000141019f000006510460009c0000000006038019000000c003600210000000000113019f00060000000a001d193f19350000040f000000060a000029000000000301001900000060033002700000065103300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000018490000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018410000413d000000000705004b000018580000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000005000415000000070550008a0000000505500210000700000000001d00000001022001900000189b0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000006550240009c000018f50000213d0000000101100190000018f50000c13d000000400040043f000000200130008c000018760000413d00000000010a0433000006b702100197000000000221004b000018760000c13d0000000502500270000000000201001f000006b50110009c000018950000c13d000000000001042d00000000010000190000194100010430000006e10100004100000000001004350000003201000039000018f80000013d0000006402800039000006e90300004100000000003204350000004402800039000006ea0300004100000000003204350000002402800039000000210300003900000000003204350000066a0200004100000000002804350000000402800039000000200300003900000000003204350000065102000041000006510380009c00000000080280190000004001800210000006a9011001c70000194100010430000006e10100004100000000001004350000001101000039000018f80000013d000000000001042f0000066a0100004100000000001404350000000401400039000600000004001d193f19040000040f000018ea0000013d000000040230008c000018e40000413d0000000002000433000006b602200197000000000401043b000006b704400197000000000224019f0000000000200435000006b7022001970000066a0220009c000018e40000c13d000000440230008c000018e40000413d000000400200043d0000000401100370000000040430008a0000001f0540018f0000000506400272000018b70000613d000000000700001900000005087002100000000009820019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000018af0000413d000000000705004b000018c60000613d0000000506600210000000000161034f00000000066200190000000305500210000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000005020433000006550150009c000018e40000213d0000002401500039000000000131004b000018e40000213d00000000012500190000000003010433000006550630009c000018e40000213d000000000442001900000000063100190000002006600039000000000446004b000018e40000213d00000000033500190000003f03300039000000050330017f0000000005230019000000000235004b000000000200001900000001020040390000000004050019000006550350009c000018f50000213d0000000102200190000018f50000c13d000000400040043f000000000201004b000018fb0000c13d000000400200043d000600000002001d0000066a0100004100000000001204350000000401200039193f19110000040f000000060400002900000000014100490000065102000041000006510310009c0000000001028019000006510340009c000000000402801900000040024002100000006001100210000000000121019f0000194100010430000006e10100004100000000001004350000004101000039000000040010043f000006e20100004100001941000104300000066a02000041000600000004001d00000000002404350000000402400039000000200300003900000000003204350000002402400039193f13ca0000040f000018ea0000013d000000600210003900000702030000410000000000320435000000400210003900000703030000410000000000320435000000200210003900000028030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d000000600210003900000704030000410000000000320435000000400210003900000705030000410000000000320435000000200210003900000034030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d000000000001042f0000065103000041000006510410009c00000000010380190000004001100210000006510420009c00000000020380190000006002200210000000000112019f0000000002000414000006510420009c0000000002038019000000c002200210000000000112019f00000659011001c70000801002000039193f193a0000040f0000000102200190000019330000613d000000000101043b000000000001042d0000000001000019000019410001043000001938002104210000000102000039000000000001042d0000000002000019000000000001042d0000193d002104230000000102000039000000000001042d0000000002000019000000000001042d0000193f00000432000019400001042e00001941000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffff020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0002000000000000000000000000000000000000400000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0da49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6000000000000000000000000000000000000000000000000ffffffffffffffbfffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff0000000000000000000001000000000000000000000000000000000000000000cc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aacffffffffffffffffffffffff0000000000000000000000000000000000000000fb2de5d700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f0000000200000000000000000000000000000040000001000000000000000000455243323938313a20696e76616c69642072656365697665720000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000000000000000000000731133e800000000000000000000000000000000000000000000000000000000a496dede00000000000000000000000000000000000000000000000000000000e985e9c400000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f5298aca00000000000000000000000000000000000000000000000000000000f6eb127a00000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000d539139200000000000000000000000000000000000000000000000000000000d539139300000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000e8a3d48500000000000000000000000000000000000000000000000000000000a496dedf00000000000000000000000000000000000000000000000000000000a9fc664e0000000000000000000000000000000000000000000000000000000091d14853000000000000000000000000000000000000000000000000000000009e05d23f000000000000000000000000000000000000000000000000000000009e05d24000000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000938e3d7b000000000000000000000000000000000000000000000000000000008456cb58000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000731133e90000000000000000000000000000000000000000000000000000000075b238fc000000000000000000000000000000000000000000000000000000002eb2c2d5000000000000000000000000000000000000000000000000000000004e1273f3000000000000000000000000000000000000000000000000000000005c975aba000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000006221d13c00000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000004e1273f40000000000000000000000000000000000000000000000000000000055f804b30000000000000000000000000000000000000000000000000000000036568abd0000000000000000000000000000000000000000000000000000000036568abe000000000000000000000000000000000000000000000000000000003a5381b5000000000000000000000000000000000000000000000000000000003f4ba83a000000000000000000000000000000000000000000000000000000002eb2c2d6000000000000000000000000000000000000000000000000000000002f2ff15d000000000000000000000000000000000000000000000000000000000ca8347f000000000000000000000000000000000000000000000000000000000e89341b000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000248a9ca3000000000000000000000000000000000000000000000000000000002a55205a000000000000000000000000000000000000000000000000000000000ca83480000000000000000000000000000000000000000000000000000000000d705df60000000000000000000000000000000000000000000000000000000004634d8c0000000000000000000000000000000000000000000000000000000004634d8d00000000000000000000000000000000000000000000000000000000098144d40000000000000000000000000000000000000000000000000000000000fdd58e0000000000000000000000000000000000000000000000000000000001ffc9a78000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000080000000000000000000000000000000000000000000000000ffffffffffffffdf4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fbc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62616e636500000000000000000000000000000000000000000000000000000000455243313135353a206275726e20616d6f756e7420657863656564732062616c00000000000000000000000000000000000000840000000000000000000000006573730000000000000000000000000000000000000000000000000000000000455243313135353a206275726e2066726f6d20746865207a65726f2061646472ffffffffffffffffffffff0000000000000000000000000000000000000000ff4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000000000000000000000000ff0000000000000000000000000000000000000000001854b24100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f23a6e610000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30000000000000000000000000000000000000020000000800000000000000000682a6e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000416d6f756e74206d7573742062652067726561746572207468616e207a65726f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c6600000000000000000000000000000000000000000000006787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbca5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96262e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2584f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65720000000000000000000000000000000000000064000000800000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace206d69736d617463680000000000000000000000000000000000000000000000455243313135353a206163636f756e747320616e6420696473206c656e677468616c6964206f776e657200000000000000000000000000000000000000000000455243313135353a2061646472657373207a65726f206973206e6f74206120765db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa5061757361626c653a206e6f7420706175736564000000000000000000000000416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c6600000000000000000000000000000000006572206f7220617070726f766564000000000000000000000000000000000000455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e4a54f5ba0000000000000000000000000000000000000000000000000000000072207472616e7366657200000000000000000000000000000000000000000000455243313135353a20696e73756666696369656e742062616c616e636520666fbc197c81000000000000000000000000000000000000000000000000000000006472657373000000000000000000000000000000000000000000000000000000455243313135353a207472616e7366657220746f20746865207a65726f20616400000000000000000000000000000000000000400000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000400000008000000000000000005061757361626c653a20706175736564000000000000000000000000000000006e6774680000000000000000000000000000000000000000000000000000000049447320616e6420416d6f756e7473206d75737420626520657175616c206c656d69736d61746368000000000000000000000000000000000000000000000000455243313135353a2069647320616e6420616d6f756e7473206c656e677468207300000000000000000000000000000000000000000000000000000000000000455243313135353a206d696e7420746f20746865207a65726f206164647265732073616c65507269636500000000000000000000000000000000000000000000455243323938313a20726f79616c7479206665652077696c6c206578636565647965db0affffffffffffffffffffffffffffffffffffffffffffffffffffffffad0d7f6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9b67a2600000000000000000000000000000000000000000000000000000000ad0d7f6c000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000a07d229a0000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000e89341c000000000000000000000000000000000000000000000000000000002a55205a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffffe00000000000000000000000000000000000000000000000010000000000000000a665d3385c074a5fa4bcec2a570c94dbdb08d6b09bca4e08f8c3951c94a3d998000000000000000000000000000000000000000000000000ffffffffffffffa030000000000000000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000000000000000537472696e67733a20686578206c656e67746820696e73756666696369656e74416363657373436f6e74726f6c3a206163636f756e7420000000000000000000206973206d697373696e6720726f6c65200000000000000000000000000000005562e70da342db81569f3094d36be279beaca7ad8e08f434ea188e79d2bfe10cf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b6420746f6b656e73000000000000000000000000000000000000000000000000455243313135353a204552433131353552656365697665722072656a65637465526563656976657220696d706c656d656e746572000000000000000000000000455243313135353a207472616e7366657220746f206e6f6e2d455243313135354f618982d46a70732466a2e5802f844503729f43d68131863c67c64c2797735c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000800000000000000000000000008074ed2676c248033366b29f0225789002e362bc00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000003203c3f64312af9344e42ef8aa45b97c9dfe4594000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f6672616e6b796d657461646174617365727665722d70726f64756374696f6e2e75702e7261696c7761792e6170702f6672616e6b79476f2f636f6e7472616374000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri (string): https://frankymetadataserver-production.up.railway.app/frankyGo/contract
Arg [1] : royaltyReceiver (address): 0x8074Ed2676C248033366b29F0225789002E362bc
Arg [2] : royaltyFeeNumerator (uint96): 500
Arg [3] : _validator (address): 0x3203c3f64312AF9344e42EF8Aa45B97C9DFE4594
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000008074ed2676c248033366b29f0225789002e362bc
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [3] : 0000000000000000000000003203c3f64312af9344e42ef8aa45b97c9dfe4594
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000048
Arg [5] : 68747470733a2f2f6672616e6b796d657461646174617365727665722d70726f
Arg [6] : 64756374696f6e2e75702e7261696c7761792e6170702f6672616e6b79476f2f
Arg [7] : 636f6e7472616374000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.