Abstract Testnet

Token

test ()
ERC-1155

Overview

Max Total Supply

34

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
0x79e56ac0f1edf966f1bfed97bc5b13c2137b7272
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
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 Source Code Verified (Exact Match)

Contract Name:
ERC1155Items

Compiler Version
v0.8.19+commit.7dd6d404

ZkSolc Version
v1.5.11

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 28 : ERC1155Items.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

import {
    IERC1155Items,
    IERC1155ItemsFunctions
} from "@0xsequence/contracts-library/tokens/ERC1155/presets/items/IERC1155Items.sol";
import {ERC1155BaseToken} from "@0xsequence/contracts-library/tokens/ERC1155/ERC1155BaseToken.sol";
import {ERC2981Controlled} from "@0xsequence/contracts-library/tokens/common/ERC2981Controlled.sol";

/**
 * An implementation of ERC-1155 capable of minting when role provided.
 */
contract ERC1155Items is ERC1155BaseToken, IERC1155Items {
    bytes32 internal constant MINTER_ROLE = keccak256("MINTER_ROLE");

    address private immutable initializer;
    bool private initialized;

    constructor() {
        initializer = msg.sender;
    }

    /**
     * Initialize the contract.
     * @param owner Owner address
     * @param tokenName Token name
     * @param tokenBaseURI Base URI for token metadata
     * @param tokenContractURI Contract URI for token metadata
     * @param royaltyReceiver Address of who should be sent the royalty payment
     * @param royaltyFeeNumerator The royalty fee numerator in basis points (e.g. 15% would be 1500)
     * @dev This should be called immediately after deployment.
     */
    function initialize(
        address owner,
        string memory tokenName,
        string memory tokenBaseURI,
        string memory tokenContractURI,
        address royaltyReceiver,
        uint96 royaltyFeeNumerator
    )
        public
        virtual
    {
        if (msg.sender != initializer || initialized) {
            revert InvalidInitialization();
        }

        ERC1155BaseToken._initialize(owner, tokenName, tokenBaseURI, tokenContractURI);
        _setDefaultRoyalty(royaltyReceiver, royaltyFeeNumerator);

        _grantRole(MINTER_ROLE, owner);

        initialized = true;
    }

    //
    // Minting
    //

    /**
     * Mint tokens.
     * @param to Address to mint tokens to.
     * @param tokenId Token ID to mint.
     * @param amount Amount of tokens to mint.
     * @param data Data to pass if receiver is contract.
     */
    function mint(address to, uint256 tokenId, uint256 amount, bytes memory data) external onlyRole(MINTER_ROLE) {
        _mint(to, tokenId, amount, data);
    }

    /**
     * Mint tokens.
     * @param to Address to mint tokens to.
     * @param tokenIds Token IDs to mint.
     * @param amounts Amounts of tokens to mint.
     * @param data Data to pass if receiver is contract.
     */
    function batchMint(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data)
        external
        onlyRole(MINTER_ROLE)
    {
        _batchMint(to, tokenIds, amounts, data);
    }

    //
    // Views
    //

    /**
     * Check interface support.
     * @param interfaceId Interface id
     * @return True if supported
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override (ERC1155BaseToken) returns (bool) {
        return type(IERC1155ItemsFunctions).interfaceId == interfaceId || ERC1155BaseToken.supportsInterface(interfaceId)
            || super.supportsInterface(interfaceId);
    }
}

File 2 of 28 : IERC1155Items.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

interface IERC1155ItemsFunctions {
    /**
     * Mint tokens.
     * @param to Address to mint tokens to.
     * @param tokenId Token ID to mint.
     * @param amount Amount of tokens to mint.
     * @param data Data to pass if receiver is contract.
     */
    function mint(address to, uint256 tokenId, uint256 amount, bytes memory data) external;

    /**
     * Mint tokens.
     * @param to Address to mint tokens to.
     * @param tokenIds Token IDs to mint.
     * @param amounts Amounts of tokens to mint.
     * @param data Data to pass if receiver is contract.
     */
    function batchMint(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) external;
}

interface IERC1155ItemsSignals {
    /**
     * Invalid initialization error.
     */
    error InvalidInitialization();
}

interface IERC1155Items is IERC1155ItemsFunctions, IERC1155ItemsSignals {}

File 3 of 28 : ERC1155BaseToken.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

import {
    ERC1155Supply, ERC1155
} from "@0xsequence/contracts-library/tokens/ERC1155/extensions/supply/ERC1155Supply.sol";
import {ERC1155Metadata} from "@0xsequence/erc-1155/contracts/tokens/ERC1155/ERC1155Metadata.sol";
import {ERC2981Controlled} from "@0xsequence/contracts-library/tokens/common/ERC2981Controlled.sol";

error InvalidInitialization();

/**
 * A standard base implementation of ERC-1155 for use in Sequence library contracts.
 */
abstract contract ERC1155BaseToken is ERC1155Supply, ERC1155Metadata, ERC2981Controlled {
    bytes32 internal constant METADATA_ADMIN_ROLE = keccak256("METADATA_ADMIN_ROLE");

    string private _contractURI;

    /**
     * Deploy contract.
     */
    constructor() ERC1155Metadata("", "") {}

    /**
     * Initialize the contract.
     * @param owner Owner address.
     * @param tokenName Token name.
     * @param tokenBaseURI Base URI for token metadata.
     * @param tokenContractURI Contract URI for token metadata.
     * @dev This should be called immediately after deployment.
     */
    function _initialize(
        address owner,
        string memory tokenName,
        string memory tokenBaseURI,
        string memory tokenContractURI
    )
        internal
    {
        name = tokenName;
        baseURI = tokenBaseURI;
        _contractURI = tokenContractURI;

        _grantRole(DEFAULT_ADMIN_ROLE, owner);
        _grantRole(ROYALTY_ADMIN_ROLE, owner);
        _grantRole(METADATA_ADMIN_ROLE, owner);
    }

    //
    // Metadata
    //

    /**
     * Update the base URI of token's URI.
     * @param tokenBaseURI New base URI of token's URI
     */
    function setBaseMetadataURI(string memory tokenBaseURI) external onlyRole(METADATA_ADMIN_ROLE) {
        _setBaseMetadataURI(tokenBaseURI);
    }

    /**
     * Update the name of the contract.
     * @param tokenName New contract name
     */
    function setContractName(string memory tokenName) external onlyRole(METADATA_ADMIN_ROLE) {
        _setContractName(tokenName);
    }

    /**
     * Update the contract URI of token's URI.
     * @param tokenContractURI New contract URI of token's URI
     * @notice Refer to https://docs.opensea.io/docs/contract-level-metadata
     */
    function setContractURI(string memory tokenContractURI) external onlyRole(METADATA_ADMIN_ROLE) {
        _contractURI = tokenContractURI;
    }

    //
    // Burn
    //

    /**
     * Allows the owner of the token to burn their tokens.
     * @param tokenId Id of token to burn
     * @param amount Amount of tokens to burn
     */
    function burn(uint256 tokenId, uint256 amount) public virtual {
        _burn(msg.sender, tokenId, amount);
    }

    /**
     * Burn tokens of given token id for each (tokenIds[i], amounts[i]) pair.
     * @param tokenIds Array of token ids to burn
     * @param amounts Array of the amount to be burned
     */
    function batchBurn(uint256[] memory tokenIds, uint256[] memory amounts) public virtual {
        _batchBurn(msg.sender, tokenIds, amounts);
    }

    //
    // Views
    //

    /**
     * Get the contract URI of token's URI.
     * @return Contract URI of token's URI
     * @notice Refer to https://docs.opensea.io/docs/contract-level-metadata
     */
    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    /**
     * Check interface support.
     * @param interfaceId Interface id
     * @return True if supported
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override (ERC1155Supply, ERC1155Metadata, ERC2981Controlled)
        returns (bool)
    {
        return ERC1155Supply.supportsInterface(interfaceId) || ERC1155Metadata.supportsInterface(interfaceId)
            || ERC2981Controlled.supportsInterface(interfaceId) || super.supportsInterface(interfaceId);
    }
}

File 4 of 28 : ERC2981Controlled.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

import {IERC2981Controlled} from "@0xsequence/contracts-library/tokens/common/IERC2981Controlled.sol";
import {ERC2981} from "@openzeppelin/contracts/token/common/ERC2981.sol";
import {AccessControlEnumerable} from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";

/**
 * An implementation of ERC-2981 that allows updates by roles.
 */
abstract contract ERC2981Controlled is ERC2981, AccessControlEnumerable, IERC2981Controlled {
    bytes32 internal constant ROYALTY_ADMIN_ROLE = keccak256("ROYALTY_ADMIN_ROLE");

    //
    // Royalty
    //

    /**
     * Sets the royalty information that all ids in this contract will default to.
     * @param receiver Address of who should be sent the royalty payment
     * @param feeNumerator The royalty fee numerator in basis points (e.g. 15% would be 1500)
     */
    function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyRole(ROYALTY_ADMIN_ROLE) {
        _setDefaultRoyalty(receiver, feeNumerator);
    }

    /**
     * Sets the royalty information that a given token id in this contract will use.
     * @param tokenId The token id to set the royalty information for
     * @param receiver Address of who should be sent the royalty payment
     * @param feeNumerator The royalty fee numerator in basis points (e.g. 15% would be 1500)
     * @notice This overrides the default royalty information for this token id
     */
    function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator)
        external
        onlyRole(ROYALTY_ADMIN_ROLE)
    {
        _setTokenRoyalty(tokenId, receiver, feeNumerator);
    }

    //
    // Views
    //

    /**
     * Check interface support.
     * @param interfaceId Interface id
     * @return True if supported
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override (ERC2981, AccessControlEnumerable)
        returns (bool)
    {
        return ERC2981.supportsInterface(interfaceId) || AccessControlEnumerable.supportsInterface(interfaceId)
            || type(IERC2981Controlled).interfaceId == interfaceId || super.supportsInterface(interfaceId);
    }
}

File 5 of 28 : ERC1155Supply.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

import {ERC1155} from "@0xsequence/erc-1155/contracts/tokens/ERC1155/ERC1155.sol";
import {
    IERC1155Supply,
    IERC1155SupplyFunctions
} from "@0xsequence/contracts-library/tokens/ERC1155/extensions/supply/IERC1155Supply.sol";

/**
 * An ERC-1155 extension that tracks token supply.
 */
abstract contract ERC1155Supply is ERC1155, IERC1155Supply {
    // Current supply
    uint256 public totalSupply;
    mapping(uint256 => uint256) public tokenSupply;

    /**
     * Mint _amount of tokens of a given id
     * @param _to The address to mint tokens to
     * @param _id Token id to mint
     * @param _amount The amount to be minted
     * @param _data Data to pass if receiver is contract
     */
    function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data) internal virtual {
        totalSupply += _amount;
        tokenSupply[_id] += _amount;
        balances[_to][_id] += _amount;

        emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

        _callonERC1155Received(address(0x0), _to, _id, _amount, gasleft(), _data);
    }

    /**
     * Mint tokens for each ids in _ids
     * @param _to The address to mint tokens to
     * @param _ids Array of ids to mint
     * @param _amounts Array of amount of tokens to mint per id
     * @param _data Data to pass if receiver is contract
     */
    function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
        internal
        virtual
    {
        uint256 nMint = _ids.length;
        if (nMint != _amounts.length) {
            revert InvalidArrayLength();
        }

        // Executing all minting
        uint256 totalAmount = 0;
        for (uint256 i = 0; i < nMint; i++) {
            // Update storage balance
            balances[_to][_ids[i]] += _amounts[i];
            tokenSupply[_ids[i]] += _amounts[i];
            totalAmount += _amounts[i];
        }
        totalSupply += totalAmount;

        emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

        // Calling onReceive method if recipient is contract
        _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, gasleft(), _data);
    }

    /**
     * Burn _amount of tokens of a given token id
     * @param _from The address to burn tokens from
     * @param _id Token id to burn
     * @param _amount The amount to be burned
     */
    function _burn(address _from, uint256 _id, uint256 _amount) internal virtual {
        // Supply
        totalSupply -= _amount;
        tokenSupply[_id] -= _amount;

        // Balances
        balances[_from][_id] -= _amount;

        // Emit event
        emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
    }

    /**
     * Burn tokens of given token id for each (_ids[i], _amounts[i]) pair
     * @param _from The address to burn tokens from
     * @param _ids Array of token ids to burn
     * @param _amounts Array of the amount to be burned
     */
    function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) internal virtual {
        uint256 nBurn = _ids.length;
        if (nBurn != _amounts.length) {
            revert InvalidArrayLength();
        }

        uint256 totalAmount = 0;
        for (uint256 i = 0; i < nBurn; i++) {
            // Update balances
            balances[_from][_ids[i]] -= _amounts[i];
            tokenSupply[_ids[i]] -= _amounts[i];
            totalAmount += _amounts[i];
        }
        totalSupply -= totalAmount;

        // Emit batch mint event
        emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
    }

    //
    // Views
    //

    /**
     * Check interface support.
     * @param interfaceId Interface id
     * @return True if supported
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override (ERC1155) returns (bool) {
        return type(IERC1155SupplyFunctions).interfaceId == interfaceId || super.supportsInterface(interfaceId);
    }
}

File 6 of 28 : ERC1155Metadata.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import '../../interfaces/IERC1155Metadata.sol';
import '../../utils/ERC165.sol';

/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata is IERC1155Metadata, ERC165 {
  // URI's default URI prefix
  string public baseURI;
  string public name;

  // set the initial name and base URI
  constructor(string memory _name, string memory _baseURI) {
    name = _name;
    baseURI = _baseURI;
  }

  /***********************************|
  |     Metadata Public Functions     |
  |__________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   * @return URI string
   */
  function uri(uint256 _id) public view virtual override returns (string memory) {
    return string(abi.encodePacked(baseURI, _uint2str(_id), ".json"));
  }


  /***********************************|
  |    Metadata Internal Functions    |
  |__________________________________*/

  /**
   * @notice Will emit default URI log event for corresponding token _id
   * @param _tokenIDs Array of IDs of tokens to log default URI
   */
  function _logURIs(uint256[] memory _tokenIDs) internal virtual {
    string memory baseURL = baseURI;
    string memory tokenURI;

    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json"));
      emit URI(tokenURI, _tokenIDs[i]);
    }
  }

  /**
   * @notice Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
    baseURI = _newBaseMetadataURI;
  }

  /**
   * @notice Will update the name of the contract
   * @param _newName New contract name
   */
  function _setContractName(string memory _newName) internal {
    name = _newName;
  }

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID  The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID` and
   */
  function supportsInterface(bytes4 _interfaceID) public view virtual override returns (bool) {
    if (_interfaceID == type(IERC1155Metadata).interfaceId) {
      return true;
    }
    return super.supportsInterface(_interfaceID);
  }

  /***********************************|
  |    Utility Internal Functions     |
  |__________________________________*/

  function _uint2str(uint _i) internal pure returns (string memory _uintAsString) {
    if (_i == 0) {
      return '0';
    }
    uint j = _i;
    uint len;
    while (j != 0) {
      len++;
      j /= 10;
    }
    bytes memory bstr = new bytes(len);
    uint k = len;
    while (_i != 0) {
      k = k - 1;
      uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
      bytes1 b1 = bytes1(temp);
      bstr[k] = b1;
      _i /= 10;
    }
    return string(bstr);
  }
}

File 7 of 28 : IERC2981Controlled.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

interface IERC2981ControlledFunctions {
    /**
     * Sets the royalty information that all ids in this contract will default to.
     * @param receiver Address of who should be sent the royalty payment
     * @param feeNumerator The royalty fee numerator in basis points (e.g. 15% would be 1500)
     */
    function setDefaultRoyalty(address receiver, uint96 feeNumerator) external;

    /**
     * Sets the royalty information that a given token id in this contract will use.
     * @param tokenId The token id to set the royalty information for
     * @param receiver Address of who should be sent the royalty payment
     * @param feeNumerator The royalty fee numerator in basis points (e.g. 15% would be 1500)
     * @notice This overrides the default royalty information for this token id
     */
    function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) external;
}

interface IERC2981Controlled is IERC2981ControlledFunctions {}

File 8 of 28 : ERC2981.sol
// 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];
    }
}

File 9 of 28 : AccessControlEnumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)

pragma solidity ^0.8.0;

import "./IAccessControlEnumerable.sol";
import "./AccessControl.sol";
import "../utils/structs/EnumerableSet.sol";

/**
 * @dev Extension of {AccessControl} that allows enumerating the members of each role.
 */
abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns one of the accounts that have `role`. `index` must be a
     * value between 0 and {getRoleMemberCount}, non-inclusive.
     *
     * Role bearers are not sorted in any particular way, and their ordering may
     * change at any point.
     *
     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
     * you perform all queries on the same block. See the following
     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
     * for more information.
     */
    function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {
        return _roleMembers[role].at(index);
    }

    /**
     * @dev Returns the number of accounts that have `role`. Can be used
     * together with {getRoleMember} to enumerate all bearers of a role.
     */
    function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {
        return _roleMembers[role].length();
    }

    /**
     * @dev Overload {_grantRole} to track enumerable memberships
     */
    function _grantRole(bytes32 role, address account) internal virtual override {
        super._grantRole(role, account);
        _roleMembers[role].add(account);
    }

    /**
     * @dev Overload {_revokeRole} to track enumerable memberships
     */
    function _revokeRole(bytes32 role, address account) internal virtual override {
        super._revokeRole(role, account);
        _roleMembers[role].remove(account);
    }
}

File 10 of 28 : ERC1155.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "../../interfaces/IERC1155TokenReceiver.sol";
import "../../interfaces/IERC1155.sol";
import "../../utils/Address.sol";
import "../../utils/ERC165.sol";

/**
 * @dev Implementation of Multi-Token Standard contract
 */
contract ERC1155 is IERC1155, ERC165 {
  using Address for address;

  /***********************************|
  |        Variables and Events       |
  |__________________________________*/

  // onReceive function signatures
  bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
  bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

  // Objects balances
  mapping (address => mapping(uint256 => uint256)) internal balances;

  // Operator Functions
  mapping (address => mapping(address => bool)) internal operators;


  /***********************************|
  |     Public Transfer Functions     |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public virtual override
  {
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
    require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");

    _safeTransferFrom(_from, _to, _id, _amount);
    _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data);
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
   */
  function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public virtual override
  {
    // Requirements
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR");
    require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT");

    _safeBatchTransferFrom(_from, _to, _ids, _amounts);
    _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data);
  }


  /***********************************|
  |    Internal Transfer Functions    |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   */
  function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
    internal virtual
  {
    // Update balances
    balances[_from][_id] -= _amount;
    balances[_to][_id] += _amount;

    // Emit event
    emit TransferSingle(msg.sender, _from, _to, _id, _amount);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
   */
  function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, uint256 _gasLimit, bytes memory _data)
    internal virtual
  {
    // Check if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{gas: _gasLimit}(msg.sender, _from, _id, _amount, _data);
      require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE");
    }
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   */
  function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts)
    internal virtual
  {
    require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH");

    // Number of transfer to execute
    uint256 nTransfer = _ids.length;

    // Executing all transfers
    for (uint256 i = 0; i < nTransfer; i++) {
      // Update storage balance of previous bin
      balances[_from][_ids[i]] -= _amounts[i];
      balances[_to][_ids[i]] += _amounts[i];
    }

    // Emit event
    emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
   */
  function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, uint256 _gasLimit, bytes memory _data)
    internal virtual
  {
    // Pass data if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{gas: _gasLimit}(msg.sender, _from, _ids, _amounts, _data);
      require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
    }
  }


  /***********************************|
  |         Operator Functions        |
  |__________________________________*/

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved)
    external virtual override
  {
    // Update operator status
    operators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return isOperator True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator)
    public view virtual override returns (bool isOperator)
  {
    return operators[_owner][_operator];
  }


  /***********************************|
  |         Balance Functions         |
  |__________________________________*/

  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id)
    public view virtual override returns (uint256)
  {
    return balances[_owner][_id];
  }

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view virtual override returns (uint256[] memory)
  {
    require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH");

    // Variables
    uint256[] memory batchBalances = new uint256[](_owners.length);

    // Iterate over each owner and token ID
    for (uint256 i = 0; i < _owners.length; i++) {
      batchBalances[i] = balances[_owners[i]][_ids[i]];
    }

    return batchBalances;
  }


  /***********************************|
  |          ERC165 Functions         |
  |__________________________________*/

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID  The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID` and
   */
  function supportsInterface(bytes4 _interfaceID) public view virtual override(ERC165, IERC165) returns (bool) {
    if (_interfaceID == type(IERC1155).interfaceId) {
      return true;
    }
    return super.supportsInterface(_interfaceID);
  }
}

File 11 of 28 : IERC1155Supply.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.19;

interface IERC1155SupplyFunctions {

    /**
     * Returns the total supply of ERC1155 tokens.
     */
    function totalSupply() external returns (uint256);

    /**
     * Returns the total supply of a given ERC1155 token.
     * @param tokenId The ERC1155 token id.
     */
    function tokenSupply(uint256 tokenId) external returns (uint256);
}

interface IERC1155SupplySignals {

    /**
     * Invalid array input length.
     */
    error InvalidArrayLength();
}

interface IERC1155Supply is IERC1155SupplySignals {}

File 12 of 28 : IERC1155Metadata.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;


interface IERC1155Metadata {

  event URI(string _uri, uint256 indexed _id);

  /****************************************|
  |                Functions               |
  |_______________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   *      Token IDs are assumed to be represented in their hex format in URIs
   * @return URI string
   */
  function uri(uint256 _id) external view returns (string memory);
}

File 13 of 28 : ERC165.sol
pragma solidity ^0.8.0;
import "../interfaces/IERC165.sol";

abstract contract ERC165 is IERC165 {
  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID`
   */
  function supportsInterface(bytes4 _interfaceID) public view virtual override returns (bool) {
    return _interfaceID == this.supportsInterface.selector;
  }
}

File 14 of 28 : IERC2981.sol
// 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);
}

File 15 of 28 : ERC165.sol
// 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;
    }
}

File 16 of 28 : IAccessControlEnumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)

pragma solidity ^0.8.0;

import "./IAccessControl.sol";

/**
 * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.
 */
interface IAccessControlEnumerable is IAccessControl {
    /**
     * @dev Returns one of the accounts that have `role`. `index` must be a
     * value between 0 and {getRoleMemberCount}, non-inclusive.
     *
     * Role bearers are not sorted in any particular way, and their ordering may
     * change at any point.
     *
     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
     * you perform all queries on the same block. See the following
     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
     * for more information.
     */
    function getRoleMember(bytes32 role, uint256 index) external view returns (address);

    /**
     * @dev Returns the number of accounts that have `role`. Can be used
     * together with {getRoleMember} to enumerate all bearers of a role.
     */
    function getRoleMemberCount(bytes32 role) external view returns (uint256);
}

File 17 of 28 : AccessControl.sol
// 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());
        }
    }
}

File 18 of 28 : EnumerableSet.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.

pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```solidity
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 *
 * [WARNING]
 * ====
 * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
 * unusable.
 * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
 *
 * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
 * array of EnumerableSet.
 * ====
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastValue;
                // Update the index for the moved value
                set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        bytes32[] memory store = _values(set._inner);
        bytes32[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

File 19 of 28 : IERC1155TokenReceiver.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/**
 * @dev ERC-1155 interface for accepting safe transfers.
 */
interface IERC1155TokenReceiver {

  /**
   * @notice Handle the receipt of a single ERC1155 token type
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value MUST result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _id        The id of the token being transferred
   * @param _amount    The amount of tokens being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   */
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Handle the receipt of multiple ERC1155 token types
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value WILL result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeBatchTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _ids       An array containing ids of each token being transferred
   * @param _amounts   An array containing amounts of each token being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   */
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);
}

File 20 of 28 : IERC1155.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import './IERC165.sol';


interface IERC1155 is IERC165 {

  /****************************************|
  |                 Events                 |
  |_______________________________________*/

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

  /**
   * @dev MUST emit when an approval is updated
   */
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);


  /****************************************|
  |                Functions               |
  |_______________________________________*/

  /**
    * @notice Transfers amount of an _id from the _from address to the _to address specified
    * @dev MUST emit TransferSingle event on success
    * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
    * MUST throw if `_to` is the zero address
    * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
    * MUST throw on any other error
    * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    * @param _from    Source address
    * @param _to      Target address
    * @param _id      ID of the token type
    * @param _amount  Transfered amount
    * @param _data    Additional data with no specified format, sent in call to `_to`
    */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

  /**
    * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
    * @dev MUST emit TransferBatch event on success
    * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
    * MUST throw if `_to` is the zero address
    * MUST throw if length of `_ids` is not the same as length of `_amounts`
    * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
    * MUST throw on any other error
    * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
    * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
    * @param _from     Source addresses
    * @param _to       Target addresses
    * @param _ids      IDs of each token type
    * @param _amounts  Transfer amounts per token type
    * @param _data     Additional data with no specified format, sent in call to `_to`
  */
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;

  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return        The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @dev MUST emit the ApprovalForAll event on success
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved) external;

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return isOperator True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);
}

File 21 of 28 : Address.sol
pragma solidity ^0.8.0;

/**
 * Utility library of inline functions on addresses
 */
library Address {

  // Default hash for EOA accounts returned by extcodehash
  bytes32 constant internal ACCOUNT_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract.
   * @param _address address of the account to check
   * @return Whether the target address is a contract
   */
  function isContract(address _address) internal view returns (bool) {
    bytes32 codehash;

    // Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address or if it has a non-zero code hash or account hash
    assembly { codehash := extcodehash(_address) }
    return (codehash != 0x0 && codehash != ACCOUNT_HASH);
  }
}

File 22 of 28 : IERC165.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;


/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {

    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

File 23 of 28 : IERC165.sol
// 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);
}

File 24 of 28 : IAccessControl.sol
// 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;
}

File 25 of 28 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 26 of 28 : Strings.sol
// 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));
    }
}

File 27 of 28 : Math.sol
// 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);
        }
    }
}

File 28 of 28 : SignedMath.sol
// 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);
        }
    }
}

Settings
{
  "viaIR": true,
  "codegen": "yul",
  "remappings": [
    "@0xsequence/contracts-library/=src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "murky/=lib/murky/src/",
    "@0xsequence/erc20-meta-token/=lib/0xsequence/erc20-meta-token/src/",
    "@0xsequence/erc-1155/=lib/0xsequence/erc-1155/src/",
    "erc721a/=lib/chiru-labs/erc721a/",
    "erc721a-upgradeable/=lib/chiru-labs/erc721a-upgradeable/",
    "@openzeppelin/=lib/openzeppelin/",
    "@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "solady/=lib/solady/src/",
    "0xsequence/=lib/0xsequence/",
    "chiru-labs/=lib/chiru-labs/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/murky/lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin/"
  ],
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "optimizer": {
    "enabled": true,
    "mode": "3",
    "fallback_to_optimizing_for_size": false,
    "disable_system_request_memoization": true
  },
  "metadata": {},
  "libraries": {},
  "enableEraVMExtensions": false,
  "forceEVMLA": false
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidArrayLength","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"_amounts","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":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","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":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenBaseURI","type":"string"},{"internalType":"string","name":"tokenContractURI","type":"string"},{"internalType":"address","name":"royaltyReceiver","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator","type":"uint96"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"string","name":"tokenBaseURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenName","type":"string"}],"name":"setContractName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenContractURI","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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setTokenRoyalty","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":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

9c4d535b0000000000000000000000000000000000000000000000000000000000000000010006a128ec6a3b3bee5d51e824f145b1cbdc867b49d6892e007859426a4b8300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x0002000000000002000c000000000002000000000501034f00000060011002700001000000050355000006050010019d00000001002001900000002f0000c13d00000605011001970000008002000039000000400020043f000000040010008c0000132f0000413d000000000305043b000000e003300270000006090030009c000000480000213d000000000215034f000006210030009c000001900000213d0000062d0030009c000003970000213d000006330030009c0000045e0000213d000006360030009c0000076a0000613d000006370030009c0000132f0000c13d000000240010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000201043b0000065f002001980000132f0000c13d0000000101000039000006840020009c00000ae70000a13d000006850020009c000009910000613d000006860020009c000009910000613d000006870020009c000009910000613d00000aeb0000013d000000a001000039000000400010043f0000000001000416000000000001004b0000132f0000c13d000000a00000043f000000e001000039000000400010043f000000c00000043f0000000503000039000000000103041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000010000390000000101002039000000000012004b0000016d0000613d0000067e01000041000000000010043f0000002201000039000000040010043f0000067f0100004100001810000104300000060a0030009c000001a20000213d000006160030009c000003c80000213d0000061c0030009c000004810000213d0000061f0030009c0000077d0000613d000006200030009c0000132f0000c13d000000840010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000202043b000c00000002001d000006380020009c0000132f0000213d0000004402500370000000000202043b000b00000002001d0000002402500370000000000202043b000a00000002001d0000006402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000605034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000316034f00000690042001980000001f0520018f000000a001400039000000880000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000000840000c13d000000000005004b000000950000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435180e14f00000040f0000000201000039000000000201041a0000000b03000029000000000032001a000007b70000413d0000000002320019000000000021041b0000000a01000029000000000010043f0000000301000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000b03000029000000000032001a000007b70000413d0000000002320019000000000021041b0000000c01000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000a02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000b03000029000000000032001a000007b70000413d0000000002320019000000000021041b000000400100043d000000200210003900000000003204350000000a020000290000000000210435000006050010009c000006050100804100000040011002100000000002000414000006050020009c0000060502008041000000c002200210000000000112019f0000064a011001c70000800d0200003900000004030000390000000005000411000006590400004100000000060000190000000c07000029180e18040000040f00000001002001900000132f0000613d0000000001000414000900000001001d0000065a0100004100000000001004430000000c0100002900000004001004430000000001000414000006050010009c0000060501008041000000c0011002100000065b011001c70000800202000039180e18090000040f000000010020019000000fab0000613d000000000101043b000000000001004b00000a980000613d0000065c0010009c00000a980000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000b02000029000000000021043500000044013000390000000a0200002900000000002104350000065d01000041000000000013043500000004013000390000000002000411000000000021043500000024013000390000000000010435000000a402300039000000800100043d0000000000120435000800000003001d000000c402300039000000000001004b0000011e0000613d00000000030000190000000004230019000000a005300039000000000505043300000000005404350000002003300039000000000013004b000001170000413d0000001f03100039000006900330019700000000012100190000000000010435000000c401300039000006050010009c000006050100804100000060011002100000000802000029000006050020009c00000605020080410000004002200210000000000121019f0000000902000029000006050020009c0000060502008041000000c002200210000000000121019f0000000c02000029180e18040000040f00000060031002700000060503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000805700029000001410000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b0000013d0000c13d000000000006004b0000014e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000e130000613d0000001f01400039000000600210018f0000000801200029000000000021004b00000000020000390000000102004039000006390010009c0000018a0000213d00000001002001900000018a0000c13d000000400010043f000000200030008c0000132f0000413d000000080200002900000000020204330000065f002001980000132f0000c13d00000660022001970000065d0020009c00000a980000613d00000064021000390000066103000041000000000032043500000044021000390000066203000041000000000032043500000024021000390000003a03000039000006470000013d000000200040008c000001860000413d000c00000004001d000000000030043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c020000290000001f0220003900000005022002700000000002210019000000000021004b0000000503000039000001860000813d000000000001041b0000000101100039000000000021004b000001820000413d000000000003041b000000c00500043d000006070050009c0000033f0000413d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f010000410000181000010430000006220030009c000004300000213d000006280030009c000004a30000213d0000062b0030009c0000079c0000613d0000062c0030009c0000132f0000c13d000000240010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000000000010043f0000000301000039000009850000013d0000060b0030009c000004470000213d000006110030009c000005650000213d000006140030009c000007aa0000613d000006150030009c0000132f0000c13d000000840010008c0000132f0000413d0000000003000416000000000003004b0000132f0000c13d0000000403500370000000000303043b000300000003001d000006380030009c0000132f0000213d0000002403500370000000000303043b000006390030009c0000132f0000213d0000002304300039000000000014004b0000132f0000813d0000000404300039000000000705034f000000000445034f000000000504043b000006390050009c0000018a0000213d00000005045002100000003f0640003900000665066001970000063a0060009c0000018a0000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000014004b0000132f0000213d000000000607034f000000000005004b000001d70000613d000000000536034f000000000505043b000000200220003900000000005204350000002003300039000000000043004b000001d00000413d0000004402600370000000000202043b000006390020009c0000132f0000213d0000002303200039000000000013004b000000000400001900000666040080410000066603300197000000000003004b00000000050000190000066605004041000006660030009c000000000504c019000000000005004b0000132f0000c13d0000000403200039000000000336034f000000000303043b000006390030009c0000018a0000213d00000005043002100000003f054000390000066505500197000000400600043d0000000005560019000900000006001d000000000065004b00000000060000390000000106004039000006390050009c0000018a0000213d00000001006001900000018a0000c13d000000400050043f00000009050000290000000005350436000600000005001d00000024022000390000000004240019000000000014004b0000132f0000213d000000000607034f000000000003004b0000020c0000613d0000000903000029000000000526034f000000000505043b000000200330003900000000005304350000002002200039000000000042004b000002050000413d0000006402600370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b000000000400001900000666040080410000066602200197000000000002004b00000000050000190000066605004041000006660020009c000000000504c019000000000005004b0000132f0000c13d0000000404300039000000000246034f000000000202043b000006390020009c0000018a0000213d0000001f0520003900000690055001970000003f055000390000069005500197000000400600043d0000000005560019000200000006001d000000000065004b00000000060000390000000106004039000006390050009c0000018a0000213d00000001006001900000018a0000c13d000000400050043f00000002050000290000000005250436000100000005001d00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000317034f00000690042001980000001f0520018f0000000101400029000002430000613d000000000603034f0000000107000029000000006806043c0000000007870436000000000017004b0000023f0000c13d000000000005004b000002500000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012000290000000000010435180e14f00000040f00000009010000290000000001010433000000800200043d000500000002001d000000000012004b00000d0e0000c13d0000000301000029000406380010019b000000050000006b000b00000000001d00000e490000c13d0000000201000039000000000201041a0000000b0020002a000007b70000413d0000000b02200029000000000021041b0000004002000039000000400100043d00000000022104360000004003100039000000800400043d00000000004304350000006003100039000000000004004b000002750000613d000000800500003900000000060000190000002005500039000000000705043300000000037304360000000106600039000000000046004b0000026f0000413d00000000041300490000000000420435000000090200002900000000040204330000000002430436000000000004004b000002840000613d000000000300001900000009050000290000002005500039000000000605043300000000026204360000000103300039000000000043004b0000027e0000413d0000000002120049000006050020009c00000605020080410000006002200210000006050010009c00000605010080410000004001100210000000000112019f0000000002000414000006050020009c0000060502008041000000c002200210000000000121019f0000064b011001c70000800d0200003900000004030000390000066704000041000000000500041100000000060000190000000407000029180e18040000040f00000001002001900000132f0000613d0000000001000414000c00000001001d0000065a010000410000000000100443000000030100002900000004001004430000000001000414000006050010009c0000060501008041000000c0011002100000065b011001c70000800202000039180e18090000040f000000010020019000000fab0000613d000000000101043b000000000001004b00000a980000613d0000065c0010009c00000a980000613d000000400300043d0000004401300039000000a00200003900000000002104350000066801000041000000000013043500000004013000390000000002000411000000000021043500000024013000390000000000010435000000a401300039000000800200043d0000000000210435000b00000003001d000000c401300039000000000002004b000002c90000613d000000800300003900000000040000190000002003300039000000000503043300000000015104360000000104400039000000000024004b000002c30000413d0000000b030000290000000002310049000000040220008a00000064033000390000000000230435000000090200002900000000020204330000000001210436000000000002004b000002db0000613d000000000300001900000009050000290000002005500039000000000405043300000000014104360000000103300039000000000023004b000002d50000413d0000000b030000290000000002310049000000040220008a00000084033000390000000000230435000000020200002900000000020204330000000001210436000000000002004b0000000106000029000002ee0000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b000002e70000413d0000001f0320003900000690033001970000000b050000290000000004510049000000000334001900000000011200190000000000010435000006050030009c00000605030080410000006001300210000006050050009c000006050200004100000000020540190000004002200210000000000121019f0000000c02000029000006050020009c0000060502008041000000c002200210000000000121019f0000000402000029180e18040000040f00000060031002700000060503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b05700029000003130000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b0000030f0000c13d000000000006004b000003200000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000103c0000613d0000001f01400039000000600210018f0000000b01200029000000000021004b00000000020000390000000102004039000006390010009c0000018a0000213d00000001002001900000018a0000c13d000000400010043f000000200030008c0000132f0000413d0000000b0200002900000000020204330000065f002001980000132f0000c13d0000066002200197000006680020009c00000a980000613d00000064021000390000066903000041000000000032043500000044021000390000066a03000041000000000032043500000024021000390000003f03000039000006470000013d0000000404000039000000000104041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f0000000100100190000000420000c13d000000200030008c0000036a0000413d000b00000003001d000c00000005001d000000000040043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d0000000c050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000b010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000004040000390000036a0000813d000000000002041b0000000102200039000000000012004b000003660000413d0000001f0050008c000007550000a13d000c00000005001d000000000040043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d0000000c060000290000069002600198000000000101043b000000e0040000390000038a0000613d000000010320008a00000005033002700000000003310019000000200400003900000001033000390000000005040019000000c0044000390000000004040433000000000041041b00000020045000390000000101100039000000000031004b000003810000c13d000000e004500039000000000062004b000003930000813d0000000302600210000000f80220018f000006910220027f00000691022001670000000003040433000000000223016f000000000021041b0000000101000039000000010260021000000004040000390000075e0000013d0000062e0030009c000005830000213d000006310030009c000007bd0000613d000006320030009c0000132f0000c13d000000240010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000000000001004b00000aa00000c13d000000c006000039000000400060043f0000000101000039000000800010043f0000068201000041000000a00010043f0000000404000039000000000304041a000000010530019000000001013002700000007f0110618f0000001f0010008c00000000020000390000000102002039000000000223013f0000000100200190000000420000c13d0000002002600039000000000005004b000c00000006001d00000b070000613d000000000040043f000000000001004b00000b090000613d000006440300004100000000040000190000000005240019000000000603041a000000000065043500000001033000390000002004400039000000000014004b000003c00000413d00000b090000013d000006170030009c000005e00000213d0000061a0030009c0000081f0000613d0000061b0030009c0000132f0000c13d000000240010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000605034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000316034f00000690042001980000001f0520018f000000a001400039000003f90000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000003f50000c13d000000000005004b000004060000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435180e14350000040f000000800200043d000006390020009c0000018a0000213d0000000a01000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c000004280000413d000000000010043f0000001f042000390000000504400270000006460440009a000000200020008c00000647040040410000001f033000390000000503300270000006460330009a000000000034004b000004280000813d000000000004041b0000000104400039000000000034004b000004240000413d0000001f0020008c00000b6d0000a13d000000000010043f000006900420019800000ca60000c13d000000a005000039000006470300004100000cb40000013d000006230030009c000006270000213d000006260030009c0000083c0000613d000006270030009c0000132f0000c13d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000002401500370000000000101043b000006380010009c0000132f0000213d0000000002000411000000000021004b00000adb0000c13d0000000401500370000000000101043b180e16730000040f00000000010000190000180f0001042e0000060c0030009c000006520000213d0000060f0030009c000008af0000613d000006100030009c0000132f0000c13d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000006380010009c0000132f0000213d0000002402500370000000000202043b000c00000002001d000006380020009c0000132f0000213d000000000010043f00000001010000390000082d0000013d000006340030009c000008c50000613d000006350030009c0000132f0000c13d0000000001000416000000000001004b0000132f0000c13d0000000503000039000000000203041a000000010420019000000001012002700000007f0110618f0000001f0010008c00000000050000390000000105002039000000000552013f0000000100500190000000420000c13d000000800010043f000000000004004b00000a9a0000613d000000000030043f000000000001004b00000ad90000613d000006410200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000004780000413d00000b2b0000013d0000061d0030009c000008da0000613d0000061e0030009c0000132f0000c13d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000000000010043f0000000901000039000000200010043f0000002401500370000000000101043b000c00000001001d0000004001000039180e17f30000040f0000000c02000029180e17570000040f0000000302200210000000000101041a000000000121022f0000063801100197000000ff0020008c0000000001002019000000400200043d0000000000120435000006050020009c000006050200804100000040012002100000066c011001c70000180f0001042e000006290030009c0000093c0000613d0000062a0030009c0000132f0000c13d000000a40010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000202043b000006380020009c0000132f0000213d0000002403500370000000000303043b000700000003001d000006380030009c0000132f0000213d0000004403500370000000000303043b000006390030009c0000132f0000213d0000002304300039000000000014004b0000132f0000813d0000000404300039000000000805034f000000000445034f000000000504043b000006390050009c0000018a0000213d00000005045002100000003f0640003900000665066001970000063a0060009c0000018a0000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000014004b0000132f0000213d000000000708034f000000000005004b000004d90000613d0000008005000039000000000637034f000000000606043b000000200550003900000000006504350000002003300039000000000043004b000004d20000413d0000006403700370000000000303043b000006390030009c0000132f0000213d0000002304300039000000000014004b000000000500001900000666050080410000066604400197000000000004004b00000000060000190000066606004041000006660040009c000000000605c019000000000006004b0000132f0000c13d0000000404300039000000000447034f000000000404043b000006390040009c0000018a0000213d00000005054002100000003f065000390000066506600197000000400700043d0000000006670019000b00000007001d000000000076004b00000000070000390000000107004039000006390060009c0000018a0000213d00000001007001900000018a0000c13d000000400060043f0000000b060000290000000006460436000600000006001d00000024033000390000000005350019000000000015004b0000132f0000213d000000000708034f000000000004004b0000050e0000613d0000000b04000029000000000637034f000000000606043b000000200440003900000000006404350000002003300039000000000053004b000005070000413d0000008403700370000000000403043b000006390040009c0000132f0000213d0000002303400039000000000013004b000000000500001900000666050080410000066603300197000000000003004b00000000060000190000066606004041000006660030009c000000000605c019000000000006004b0000132f0000c13d0000000405400039000000000357034f000000000303043b000006390030009c0000018a0000213d0000001f0630003900000690066001970000003f066000390000069006600197000000400700043d0000000006670019000200000007001d000000000076004b00000000070000390000000107004039000006390060009c0000018a0000213d00000001007001900000018a0000c13d000000400060043f00000002060000290000000006360436000100000006001d00000000043400190000002404400039000000000014004b0000132f0000213d0000002001500039000000000418034f00000690053001980000001f0630018f0000000101500029000005450000613d000000000704034f0000000108000029000000007907043c0000000008980436000000000018004b000005410000c13d000000000006004b000005520000613d000000000454034f0000000305600210000000000601043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000041043500000001013000290000000000010435000506380020019b0000000001000411000000050010006c00000ea90000c13d0000000701000029000406380010019c00000ed10000c13d000000400100043d00000064021000390000067a03000041000000000032043500000044021000390000067703000041000000000032043500000024021000390000003003000039000006470000013d000006120030009c0000097c0000613d000006130030009c0000132f0000c13d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000002401500370000000000101043b000c00000001001d000006380010009c0000132f0000213d0000000401500370000000000101043b000b00000001001d000000000010043f0000000801000039000000200010043f0000004001000039180e17f30000040f0000000101100039000000000101041a180e15ab0000040f0000000b010000290000000c02000029180e16730000040f00000000010000190000180f0001042e0000062f0030009c0000098c0000613d000006300030009c0000132f0000c13d000000440010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000202043b000006390020009c0000132f0000213d0000002303200039000000000013004b0000132f0000813d0000000403200039000000000335034f000000000403043b000006390040009c0000018a0000213d000000000705034f00000005034002100000003f0530003900000665055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800040043f00000024022000390000000003230019000000000013004b0000132f0000213d000000000607034f000000000004004b000005b00000613d0000008004000039000000000526034f000000000505043b000000200440003900000000005404350000002002200039000000000032004b000005a90000413d0000002402600370000000000202043b000006390020009c0000132f0000213d0000002303200039000000000013004b000000000400001900000666040080410000066603300197000000000003004b00000000050000190000066605004041000006660030009c000000000504c019000000000005004b0000132f0000c13d0000000403200039000000000336034f000000000303043b000006390030009c0000018a0000213d00000005043002100000003f054000390000066505500197000000400600043d0000000005560019000900000006001d000000000065004b00000000060000390000000106004039000006390050009c0000018a0000213d00000001006001900000018a0000c13d000000400050043f00000009050000290000000005350436000600000005001d00000024022000390000000004240019000000000014004b0000132f0000213d000000000003004b00000cc30000c13d000000800100043d000000000001004b00000cd30000613d00000d0e0000013d000006180030009c000009940000613d000006190030009c0000132f0000c13d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000c00000001001d000006380010009c0000132f0000213d0000002401500370000000000201043b000000000002004b0000000001000039000000010100c039000b00000002001d000000000012004b0000132f0000c13d0000000001000411000000000010043f0000000101000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a00000692022001970000000b03000029000000000232019f000000000021041b000000400100043d0000000000310435000006050010009c000006050100804100000040011002100000000002000414000006050020009c0000060502008041000000c002200210000000000112019f00000606011001c70000800d0200003900000003030000390000066b0400004100000000050004110000000c0600002900000a950000013d000006240030009c0000099a0000613d000006250030009c0000132f0000c13d000000640010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000002401500370000000000101043b000c00000001001d000006380010009c0000132f0000213d0000004401500370000000000101043b0000063b0010009c0000132f0000213d000b063b0010019b180e137a0000040f0000000b01000029000027110010008c00000b3f0000413d000000400100043d00000064021000390000066e03000041000000000032043500000044021000390000066f03000041000000000032043500000024021000390000002a03000039000000000032043500000654020000410000000000210435000000040210003900000020030000390000000000320435000006050010009c0000060501008041000000400110021000000658011001c700001810000104300000060d0030009c000009f50000613d0000060e0030009c0000132f0000c13d000000c40010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000202043b000c00000002001d000006380020009c0000132f0000213d0000002402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000a05034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d000000200340003900000000043a034f00000690052001980000001f0620018f000000a003500039000006860000613d000000a007000039000000000804034f000000008908043c0000000007970436000000000037004b000006820000c13d000000000006004b000006930000613d000000000454034f0000000305600210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000a00220003900000000000204350000004402a00370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d000000040430003900000000024a034f000000000202043b000006390020009c0000018a0000213d0000001f0520003900000690055001970000003f055000390000069005500197000000400600043d0000000005560019000a00000006001d000000000065004b00000000060000390000000106004039000006390050009c0000018a0000213d00000001006001900000018a0000c13d000000400050043f0000000a050000290000000005250436000900000005001d00000000032300190000002403300039000000000013004b0000132f0000213d000000200340003900000000043a034f00000690052001980000001f0620018f0000000903500029000006c30000613d000000000704034f0000000908000029000000007907043c0000000008980436000000000038004b000006bf0000c13d000000000006004b000006d00000613d000000000454034f0000000305600210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000090220002900000000000204350000006402a00370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d000000040430003900000000024a034f000000000202043b000006390020009c0000018a0000213d0000001f0520003900000690055001970000003f055000390000069005500197000000400600043d0000000005560019000b00000006001d000000000065004b00000000060000390000000106004039000006390050009c0000018a0000213d00000001006001900000018a0000c13d000000400050043f0000000b050000290000000005250436000800000005001d00000000032300190000002403300039000000000013004b0000132f0000213d000000200140003900000000031a034f00000690042001980000001f0520018f0000000801400029000007000000613d000000000603034f0000000807000029000000006806043c0000000007870436000000000017004b000006fc0000c13d000000000005004b0000070d0000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000080120002900000000000104350000008401a00370000000000101043b000006380010009c0000132f0000213d000000a401a00370000000000101043b0000063b0010009c0000132f0000213d0000063c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006050010009c0000060501008041000000c0011002100000063d011001c70000800502000039180e18090000040f000000010020019000000fab0000613d000000000101043b00000638011001970000000002000411000000000012004b00000fac0000c13d0000000b01000039000000000101041a000000ff0010019000000fac0000c13d000000800200043d000006390020009c0000018a0000213d0000000501000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c0000074d0000413d000000000010043f0000001f042000390000000504400270000006400440009a000000200020008c00000641040040410000001f033000390000000503300270000006400330009a000000000034004b0000074d0000813d000000000004041b0000000104400039000000000034004b000007490000413d0000001f0020008c000010480000a13d000000000010043f0000069005200198000010530000c13d000000200400003900000641030000410000105f0000013d000000000005004b0000000001000019000007590000613d000000e00100043d0000000302500210000006910220027f0000069102200167000000000221016f0000000101500210000000000112019f000000000014041b0000000001000411000000800010043f00000140000004430000016000100443000000200100003900000100001004430000000101000039000001200010044300000608010000410000180f0001042e000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000006380010009c0000132f0000213d000000000010043f000000200000043f0000004001000039000c000000050353180e17f30000040f0000000c0200035f0000002402200370000000000202043b000000000020043f000009850000013d0000000001000416000000000001004b0000132f0000c13d0000000403000039000000000203041a000000010420019000000001012002700000007f0110618f0000001f0010008c00000000050000390000000105002039000000000552013f0000000100500190000000420000c13d000000800010043f000000000004004b00000a9a0000613d000000000030043f000000000001004b00000ad90000613d000006440200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000007930000413d00000b2b0000013d000000240010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000000000010043f0000000801000039000000200010043f0000004001000039180e17f30000040f0000000101100039000009880000013d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000401043b0000000201000039000000000201041a0000002403500370000000000303043b000000000232004b00000a4e0000813d0000067e01000041000000000010043f0000001101000039000000040010043f0000067f010000410000181000010430000000240010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000605034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000316034f00000690042001980000001f0520018f000000a001400039000007e80000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000007e40000c13d000000000005004b000007f50000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435180e14350000040f000000800200043d000006390020009c0000018a0000213d0000000501000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c000008170000413d000000000010043f0000001f042000390000000504400270000006400440009a000000200020008c00000641040040410000001f033000390000000503300270000006400330009a000000000034004b000008170000813d000000000004041b0000000104400039000000000034004b000008130000413d0000001f0020008c00000b6d0000a13d000000000010043f000006900420019800000c8a0000c13d000000a005000039000006410300004100000cb40000013d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000002401500370000000000101043b000c00000001001d000006380010009c0000132f0000213d0000000401500370000000000101043b000000000010043f0000000801000039000000200010043f0000004001000039180e17f30000040f0000000c02000029000000000020043f000000200010043f0000004001000039180e17f30000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f00000664010000410000180f0001042e000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000c00000001001d0000002401500370000000000101043b000b00000001001d000006380010009c0000132f0000213d0000000c01000029000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000101100039000000000101041a180e15ab0000040f0000000c01000029000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000008a50000c13d0000000c01000029000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000006920220019700000001022001bf000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d02000039000000040300003900000000070004110000064c040000410000000c050000290000000b06000029180e18040000040f00000001002001900000132f0000613d0000000c01000029000000000010043f0000000901000039000000200010043f0000004001000039180e17f30000040f0000000b02000029180e17720000040f00000000010000190000180f0001042e0000000001000416000000000001004b0000132f0000c13d0000000a03000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000662013f0000000100600190000000420000c13d000000800010043f000000000005004b00000ad60000c13d0000069201200197000000a00010043f000000000004004b00000a9d0000013d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000c00000001001d000006380010009c0000132f0000213d0000002401500370000000000101043b000b00000001001d0000063b0010009c0000132f0000213d180e137a0000040f0000000c010000290000000b02000029180e17b70000040f00000000010000190000180f0001042e000000240010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000605034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000316034f00000690042001980000001f0520018f000000a001400039000009050000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000009010000c13d000000000005004b000009120000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435180e14350000040f000000800200043d000006390020009c0000018a0000213d0000000401000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c000009340000413d000000000010043f0000001f042000390000000504400270000006430440009a000000200020008c00000644040040410000001f033000390000000503300270000006430330009a000000000034004b000009340000813d000000000004041b0000000104400039000000000034004b000009300000413d0000001f0020008c00000b6d0000a13d000000000010043f000006900420019800000c980000c13d000000a005000039000006440300004100000cb40000013d000000440010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000002401500370000000000101043b000c00000001001d0000000401500370000000000101043b000000000010043f0000000701000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000400300043d000006510030009c0000018a0000213d000000000101043b0000004002300039000000400020043f000000000101041a0000002004300039000000a0021002700000000000240435000006380110019800000000001304350000096b0000c13d000000400300043d000006510030009c0000018a0000213d0000004001300039000000400010043f0000000601000039000000000101041a0000002004300039000000a0021002700000000000240435000006380110019700000000001304350000000c0400002900000000034200a9000000000004004b000009720000613d00000000044300d9000000000042004b000007b70000c13d000027100230011a000000400300043d000000200430003900000000002404350000000000130435000006050030009c000006050300804100000040013002100000067b011001c70000180f0001042e000000240010008c0000132f0000413d0000000001000416000000000001004b0000132f0000c13d0000000401500370000000000101043b000000000010043f0000000901000039000000200010043f0000004001000039180e17f30000040f000000000101041a000000800010043f00000664010000410000180f0001042e0000000001000416000000000001004b0000132f0000c13d0000000201000039000000000101041a000000800010043f00000664010000410000180f0001042e0000000001000416000000000001004b0000132f0000c13d000000800000043f00000664010000410000180f0001042e000000440010008c0000132f0000413d0000000003000416000000000003004b0000132f0000c13d0000000403500370000000000303043b000006390030009c0000132f0000213d0000002304300039000000000014004b0000132f0000813d0000000404300039000000000805034f000000000445034f000000000504043b000006390050009c0000018a0000213d00000005045002100000003f0640003900000665066001970000063a0060009c0000018a0000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000014004b0000132f0000213d000000000708034f000000000005004b000009c40000613d000000a005000039000000000637034f000000000606043b000006380060009c0000132f0000213d00000000056504360000002003300039000000000043004b000009bc0000413d0000002403700370000000000303043b000006390030009c0000132f0000213d0000002304300039000000000014004b000000000500001900000666050040410000066604400197000000000004004b00000000060000190000066606002041000006660040009c000000000605c019000000000006004b0000132f0000613d0000000404300039000000000447034f000000000404043b000006390040009c0000018a0000213d00000005054002100000003f065000390000066506600197000000400700043d0000000006670019000a00000007001d000000000076004b00000000070000390000000107004039000006390060009c0000018a0000213d00000001007001900000018a0000c13d000000400060043f0000000a060000290000000006460436000900000006001d00000024033000390000000005350019000000000015004b0000132f0000213d000000000004004b00000d160000c13d000000800100043d000000000001004b000000000100001900000d250000613d00000d4a0000013d000000a40010008c0000132f0000413d0000000002000416000000000002004b0000132f0000c13d0000000402500370000000000202043b000c00000002001d000006380020009c0000132f0000213d0000002402500370000000000202043b000b00000002001d000006380020009c0000132f0000213d0000006402500370000000000202043b000900000002001d0000004402500370000000000202043b000a00000002001d0000008402500370000000000302043b000006390030009c0000132f0000213d0000002302300039000000000012004b0000132f0000813d0000000404300039000000000245034f000000000202043b000006390020009c0000018a0000213d000000000605034f0000001f0520003900000690055001970000003f0550003900000690055001970000063a0050009c0000018a0000213d0000008005500039000000400050043f000000800020043f00000000032300190000002403300039000000000013004b0000132f0000213d0000002001400039000000000316034f00000690042001980000001f0520018f000000a00140003900000a300000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b00000a2c0000c13d000000000005004b00000a3d0000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a001200039000000000001043500000000020004110000000c0020006c00000b770000c13d0000000b0000006b00000bbc0000c13d000000400100043d00000064021000390000066303000041000000000032043500000044021000390000065703000041000000000032043500000024021000390000002b03000039000006470000013d000c00000003001d000000000021041b000b00000004001d000000000040043f0000000301000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000c0220006c000007b70000413d000000000021041b0000000001000411000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000c04000029000000000242004b0000000b03000029000007b70000413d000000000021041b000000400100043d000000200210003900000000004204350000000000310435000006050010009c000006050100804100000040011002100000000002000414000006050020009c0000060502008041000000c002200210000000000112019f0000064a011001c70000800d0200003900000004030000390000065904000041000000000500041100000000060500190000000007000019180e18040000040f00000001002001900000132f0000613d00000000010000190000180f0001042e0000069202200197000000a00020043f000000000001004b000000c001000039000000a00100603900000b2c0000013d000000000501001900000000030000190000000004030019000000010330003a000007b70000613d000000090050008c0000000a0550011a00000aa20000213d0000067d0040009c0000018a0000213d00000690044001970000005f0640003900000690066001970000063a0060009c0000018a0000213d0000008006600039000000400060043f000000800030043f000000200440003900000690054001980000001f0440018f00000abc0000613d000000a005500039000000a006000039000000002702043c0000000006760436000000000056004b00000ab80000c13d000000000004004b000000000003004b000007b70000613d0000000a4210011a0000000a052000c9000000000015004b000007b70000213d000000000000004b000007b70000c13d000000010530008a000000800600043d000000000056004b0000102e0000a13d000000f8044002100000009f0330003900000000060304330000068006600197000000000464019f000006810440009a0000000000430435000000090010008c0000000001020019000000000305001900000abd0000213d000000400600043d000003ac0000013d000000000030043f000000020020008c00000b210000813d000000a00100003900000b2c0000013d0000065401000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000067301000041000000c40010043f0000067401000041000000e40010043f00000675010000410000181000010430000006880020009c000009910000613d000006890020009c000009910000613d000006880020009c000000000300003900000001030060390000068a0020009c00000000040000390000000104006039000009910000613d0000068b0020009c000009910000613d0000068c0020009c000009910000613d000000000334019f0000068d0020009c000000000403001900000001044041bf000000010440018f000000000504001900000ba20000413d0000068e0020009c00000b9c0000213d000006880020009c000000000504001900000ba20000613d0000068a0020009c000000000504001900000ba20000613d000000000503001900000ba10000013d000006920330019700000000003204350000000002120019000b00000002001d000000800300043d000a00000003001d000000a001000039180e134e0000040f0000000a020000290000000b03200029000006830200004100000000002304350000000c0100002900000000031300490000001b0230008a00000000002104350000000502300039180e133c0000040f0000002001000039000000400200043d000b00000002001d00000000021204360000000c01000029180e135b0000040f0000000b0200002900000b360000013d000006470200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b00000b230000413d000000c001300039000000800210008a0000008001000039180e133c0000040f0000002001000039000000400200043d000c00000002001d00000000021204360000008001000039180e135b0000040f0000000c020000290000000001210049000006050010009c00000605010080410000006001100210000006050020009c00000605020080410000004002200210000000000121019f0000180f0001042e000000400100043d0000000c0000006b00000b520000c13d00000044031000390000066d02000041000000000023043500000024031000390000001b02000039000000000023043500000654020000410000000000210435000000040310003900000020020000390000000000230435000006050010009c0000060501008041000000400110021000000655011001c70000181000010430000a00000001001d180e13310000040f0000000a020000290000002003200039000900000003001d0000000b0100002900000000001304350000000c01000029000000000012043500000004010000390000000101100367000000000101043b000000000010043f0000000701000039000000200010043f0000004001000039180e17f30000040f0000000a020000290000000002020433000006380220019700000009030000290000000003030433000000a003300210000000000223019f000000000021041b00000000010000190000180f0001042e000000000002004b000000000300001900000b710000613d000000a00300043d0000000304200210000006910440027f0000069104400167000000000443016f000000010320021000000cbf0000013d0000000c01000029000000000010043f0000000101000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff0010019000000a420000c13d000000400100043d00000064021000390000065603000041000000000032043500000044021000390000065703000041000006440000013d00000001050000390000068b0020009c00000ba20000613d0000068c0020009c000000000503c019000000010550018f000000000005004b000009910000c13d0000068e0020009c00000bab0000213d000006880020009c000009910000613d0000068a0020009c000009910000613d00000baf0000013d0000068b0020009c000009910000613d0000068c0020009c000009910000613d0000068d0020009c000000000504001900000d5a0000413d0000068e0020009c00000d540000213d000006880020009c000000000504001900000d5a0000613d0000068a0020009c000000000504001900000d5a0000613d000000000503001900000d590000013d0000000c01000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000a02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000000090220006c000007b70000413d000000000021041b0000000b01000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000a02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000000090020002a000007b70000413d00000009030000290000000002320019000000000021041b000000400100043d000000200210003900000000003204350000000a020000290000000000210435000006050010009c000006050100804100000040011002100000000002000414000006050020009c0000060502008041000000c002200210000000000112019f0000064a011001c70000800d020000390000000403000039000006590400004100000000050004110000000c060000290000000b07000029180e18040000040f00000001002001900000132f0000613d0000000001000414000800000001001d0000065a0100004100000000001004430000000b0100002900000004001004430000000001000414000006050010009c0000060501008041000000c0011002100000065b011001c70000800202000039180e18090000040f000000010020019000000fab0000613d000000000101043b000000000001004b00000a980000613d0000065c0010009c00000a980000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000902000029000000000021043500000044013000390000000a02000029000000000021043500000024013000390000000c0200002900000000002104350000065d010000410000000000130435000000040130003900000000020004110000000000210435000000a402300039000000800100043d0000000000120435000700000003001d000000c402300039000000000001004b00000c460000613d00000000030000190000000004230019000000a005300039000000000505043300000000005404350000002003300039000000000013004b00000c3f0000413d0000001f03100039000006900330019700000000012100190000000000010435000000c401300039000006050010009c000006050100804100000060011002100000000702000029000006050020009c00000605020080410000004002200210000000000121019f0000000802000029000006050020009c0000060502008041000000c002200210000000000121019f0000000b02000029180e18040000040f00000060031002700000060503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000070570002900000c690000613d000000000801034f0000000709000029000000008a08043c0000000009a90436000000000059004b00000c650000c13d000000000006004b00000c760000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000fc20000613d0000001f01400039000000600210018f0000000701200029000000000021004b00000000020000390000000102004039000006390010009c0000018a0000213d00000001002001900000018a0000c13d000000400010043f000000200030008c0000132f0000413d000000070200002900000000020204330000065f00200198000001610000613d0000132f0000013d00000641030000410000002006000039000000010540008a0000000505500270000006420550009a000000000706001900000080066000390000000006060433000000000063041b00000020067000390000000103300039000000000053004b00000c8f0000c13d00000cb30000013d00000644030000410000002006000039000000010540008a0000000505500270000006450550009a000000000706001900000080066000390000000006060433000000000063041b00000020067000390000000103300039000000000053004b00000c9d0000c13d00000cb30000013d00000647030000410000002006000039000000010540008a0000000505500270000006480550009a000000000706001900000080066000390000000006060433000000000063041b00000020067000390000000103300039000000000053004b00000cab0000c13d000000a005700039000000000024004b00000cbd0000813d0000000304200210000000f80440018f000006910440027f00000691044001670000000005050433000000000445016f000000000043041b00000001030000390000000104200210000000000234019f000000000021041b00000000010000190000180f0001042e0000000901000029000000000327034f000000000303043b000000200110003900000000003104350000002002200039000000000042004b00000cc40000413d00000009010000290000000002010433000000800100043d000500000002001d000000000021004b00000d0e0000c13d000000050000006b00000d650000c13d0000000001000411000400000001001d0000000201000039000000000101041a000b00000000001d0000000b0110006a0000000202000039000000000012041b0000004002000039000000400100043d00000000022104360000004003100039000000800400043d00000000004304350000006003100039000000000004004b00000cec0000613d000000800500003900000000060000190000002005500039000000000705043300000000037304360000000106600039000000000046004b00000ce60000413d00000000041300490000000000420435000000090200002900000000040204330000000002430436000000000004004b00000cfb0000613d000000000300001900000009060000290000002006600039000000000506043300000000025204360000000103300039000000000043004b00000cf50000413d0000000002120049000006050020009c00000605020080410000006002200210000006050010009c00000605010080410000004001100210000000000112019f0000000002000414000006050020009c0000060502008041000000c002200210000000000121019f0000064b011001c70000800d0200003900000004030000390000066704000041000000040500002900000a930000013d000000400100043d0000067c020000410000000000210435000006050010009c000006050100804100000040011002100000063f011001c700001810000104300000000a01000029000000000438034f000000000404043b000000200110003900000000004104350000002003300039000000000053004b00000d170000413d0000000a010000290000000001010433000000800300043d000000000013004b00000d4a0000c13d000006390010009c0000018a0000213d00000005031002100000003f043000390000067205400197000000400400043d000800000004001d0000000004450019000000000054004b00000000050000390000000105004039000006390040009c0000018a0000213d00000001005001900000018a0000c13d000000400040043f00000008040000290000000001140436000700000001001d0000001f0130018f000000000003004b00000d3f0000613d00000007040000290000000003340019000000002502043c0000000004540436000000000034004b00000d3b0000c13d000000000001004b000000800100043d000000000001004b00000ddf0000c13d000000400200043d000c00000002001d000000200100003900000000021204360000000801000029180e136d0000040f00000b350000013d000000400100043d00000064021000390000067003000041000000000032043500000044021000390000067103000041000000000032043500000024021000390000002c03000039000006470000013d00000001050000390000068b0020009c00000d5a0000613d0000068c0020009c000000000503c019000000010550018f000000000005004b000009910000c13d000006840020009c00000dc70000a13d0000068f0020009c00000dce0000213d000006850020009c000009910000613d0000068b0020009c000009910000613d00000dd20000013d0000000001000411000400000001001d00000005010000290000000004000019000b00000000001d000000000041004b0000102e0000a13d000c00000004001d0000000502400210000800000002001d0000000601200029000a00000001001d0000000001010433000700000001001d0000000001000411000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000800200043d0000000c0020006c0000102e0000a13d000000000101043b0000000802000029000000a002200039000800000002001d0000000002020433000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000000070220006c00000009030000290000000c04000029000007b70000413d000000000021041b0000000001030433000000000041004b0000102e0000a13d000000800100043d000000000041004b0000102e0000a13d0000000a010000290000000001010433000700000001001d00000008010000290000000001010433000000000010043f0000000301000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000000070220006c00000009030000290000000c04000029000007b70000413d000000000021041b0000000001030433000000000041004b0000102e0000a13d0000000a0200002900000000020204330000000b0020002a000007b70000413d000b000b0020002d0000000104400039000000050040006c00000d6a0000413d0000000201000039000000000101041a0000000b0010006b000007b70000213d00000cd80000013d000006880020009c000009910000613d000006890020009c000009910000613d0000068a0020009c000009910000613d00000dd20000013d0000068c0020009c000009910000613d000006870020009c000009910000613d0000068d0020009c000000000504001900000e370000413d0000068e0020009c00000e310000213d000006880020009c000000000504001900000e370000613d0000068a0020009c000000000504001900000e370000613d000000000503001900000e360000013d0000000003000019000c00000003001d0000000501300210000b00000001001d000000a00110003900000000010104330000063801100197000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d0000000a0200002900000000020204330000000c0020006c0000102e0000a13d0000000b0400002900000009024000290000000002020433000000000101043b000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000080200002900000000020204330000000c03000029000000000032004b0000102e0000a13d0000000b040000290000000702400029000000000101043b000000000101041a00000000001204350000000103300039000000800100043d000000000013004b00000de00000413d00000d430000013d0000001f0530018f0000065e06300198000000400200043d000000000462001900000e1e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e1a0000c13d000000000005004b00000e2b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006050020009c00000605020080410000004002200210000000000112019f000018100001043000000001050000390000068b0020009c00000e370000613d0000068c0020009c000000000503c019000000010550018f000000000005004b000009910000c13d0000068e0020009c00000e400000213d000006880020009c000009910000613d0000068a0020009c000009910000613d00000e440000013d0000068b0020009c000009910000613d0000068c0020009c000009910000613d0000068d0020009c00000fb90000813d000000800040043f00000664010000410000180f0001042e00000005010000290000000004000019000b00000000001d000000000041004b0000102e0000a13d000c00000004001d0000000502400210000800000002001d0000000601200029000a00000001001d0000000001010433000700000001001d0000000401000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000800200043d0000000c0020006c0000102e0000a13d000000000101043b0000000802000029000000a002200039000800000002001d0000000002020433000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000705000029000000000052001a00000009030000290000000c04000029000007b70000413d0000000002520019000000000021041b0000000001030433000000000041004b0000102e0000a13d000000800100043d000000000041004b0000102e0000a13d0000000a010000290000000001010433000700000001001d00000008010000290000000001010433000000000010043f0000000301000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000705000029000000000052001a00000009030000290000000c04000029000007b70000413d0000000002520019000000000021041b0000000001030433000000000041004b0000102e0000a13d0000000a0200002900000000020204330000000b0020002a000007b70000413d000b000b0020002d0000000104400039000000050040006c00000e4c0000413d0000025e0000013d0000000501000029000000000010043f0000000101000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000005580000c13d000000400100043d00000064021000390000067603000041000000000032043500000044021000390000067703000041000000000032043500000024021000390000002f03000039000006470000013d0000000b010000290000000001010433000000800200043d000300000002001d000000000012004b00000faf0000c13d000000030000006b0000000b0100002900000fce0000c13d000000400100043d000000400200003900000000022104360000004003100039000000800400043d00000000004304350000006003100039000000000004004b00000eeb0000613d000000800500003900000000060000190000002005500039000000000705043300000000037304360000000106600039000000000046004b00000ee50000413d000000000413004900000000004204350000000b0200002900000000040204330000000002430436000000000004004b00000efa0000613d00000000030000190000000b050000290000002005500039000000000605043300000000026204360000000103300039000000000043004b00000ef40000413d0000000002120049000006050020009c00000605020080410000006002200210000006050010009c00000605010080410000004001100210000000000112019f0000000002000414000006050020009c0000060502008041000000c002200210000000000121019f0000064b011001c70000800d0200003900000004030000390000066704000041000000000500041100000005060000290000000407000029180e18040000040f00000001002001900000132f0000613d0000000001000414000c00000001001d0000065a010000410000000000100443000000070100002900000004001004430000000001000414000006050010009c0000060501008041000000c0011002100000065b011001c70000800202000039180e18090000040f000000010020019000000fab0000613d000000000101043b000000000001004b00000a980000613d0000065c0010009c00000a980000613d000000400300043d0000004401300039000000a002000039000000000021043500000024013000390000000502000029000000000021043500000668010000410000000000130435000000040130003900000000020004110000000000210435000000a401300039000000800200043d0000000000210435000a00000003001d000000c401300039000000000002004b00000f400000613d000000800300003900000000040000190000002003300039000000000503043300000000015104360000000104400039000000000024004b00000f3a0000413d0000000a030000290000000002310049000000040220008a000000640330003900000000002304350000000b0200002900000000020204330000000001210436000000000002004b00000f520000613d00000000030000190000000b050000290000002005500039000000000405043300000000014104360000000103300039000000000023004b00000f4c0000413d0000000a030000290000000002310049000000040220008a00000084033000390000000000230435000000020200002900000000020204330000000001210436000000000002004b000000010600002900000f650000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000f5e0000413d0000001f0320003900000690033001970000000a050000290000000004510049000000000334001900000000011200190000000000010435000006050030009c00000605030080410000006001300210000006050050009c000006050200004100000000020540190000004002200210000000000121019f0000000c02000029000006050020009c0000060502008041000000c002200210000000000121019f0000000402000029180e18040000040f00000060031002700000060503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a0570002900000f8a0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b00000f860000c13d000000000006004b00000f970000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000010950000613d0000001f01400039000000600210018f0000000a01200029000000000021004b00000000020000390000000102004039000006390010009c0000018a0000213d00000001002001900000018a0000c13d000000400010043f000000200030008c0000132f0000413d0000000a0200002900000000020204330000065f00200198000003330000613d0000132f0000013d000000000001042f000000400100043d0000063e0200004100000d100000013d000000400100043d00000064021000390000067803000041000000000032043500000044021000390000067903000041000000000032043500000024021000390000003503000039000006470000013d0000068e0020009c000010340000213d000006880020009c00000e460000613d0000068a0020009c0000000001040019000009910000613d0000000001030019000010380000013d0000001f0530018f0000065e06300198000000400200043d000000000462001900000e1e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000fc90000c13d00000e1e0000013d00000000020000190000000001010433000000000021004b0000102e0000a13d000c00000002001d0000000502200210000a00000002001d0000000601200029000800000001001d0000000001010433000900000001001d0000000501000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000800200043d0000000c0020006c0000102e0000a13d000000000101043b0000000a02000029000000a002200039000a00000002001d0000000002020433000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000000090220006c000007b70000413d000000000021041b0000000b0100002900000000010104330000000c0010006c0000102e0000a13d00000008010000290000000001010433000900000001001d0000000401000029000000000010043f000000200000043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000800200043d0000000c0020006c0000102e0000a13d000000000101043b0000000a020000290000000002020433000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a0000000903000029000000000032001a000007b70000413d0000000002320019000000000021041b0000000c020000290000000102200039000000030020006c0000000b0100002900000fcf0000413d00000eda0000013d0000067e01000041000000000010043f0000003201000039000000040010043f0000067f0100004100001810000104300000068b0020009c000009910000613d0000068c0020009c000000000103c019000000010110018f000000800010043f00000664010000410000180f0001042e0000001f0530018f0000065e06300198000000400200043d000000000462001900000e1e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010430000c13d00000e1e0000013d000000000002004b00000000030000190000104c0000613d000000a00300043d0000000304200210000006910440027f0000069104400167000000000343016f0000000102200210000000000223019f0000106b0000013d00000641030000410000002004000039000000010650008a0000000506600270000006420660009a00000080074000390000000007070433000000000073041b00000020044000390000000103300039000000000063004b000010580000c13d000000000025004b000010690000813d0000000305200210000000f80550018f000006910550027f000006910550016700000080044000390000000004040433000000000454016f000000000043041b000000010220021000000001022001bf000000000021041b0000000a010000290000000002010433000006390020009c0000018a0000213d0000000401000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c0000108c0000413d000000000010043f0000001f042000390000000504400270000006430440009a000000200020008c00000644040040410000001f033000390000000503300270000006430330009a000000000034004b0000108c0000813d000000000004041b0000000104400039000000000034004b000010880000413d0000001f0020008c0000000103200210000010a10000a13d000000000010043f0000069006200198000010ac0000c13d00000020050000390000064404000041000010b90000013d0000001f0530018f0000065e06300198000000400200043d000000000462001900000e1e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000109c0000c13d00000e1e0000013d000000000002004b0000000004000019000010a60000613d000000090400002900000000040404330000000302200210000006910220027f0000069102200167000000000224016f000000000232019f000010c40000013d00000644040000410000002005000039000000010760008a0000000507700270000006450770009a0000000a0900002900000000089500190000000008080433000000000084041b00000020055000390000000104400039000000000074004b000010b20000c13d000000000026004b000010c30000813d0000000302200210000000f80220018f000006910220027f00000691022001670000000a055000290000000005050433000000000225016f000000000024041b00000001023001bf000000000021041b0000000b010000290000000002010433000006390020009c0000018a0000213d0000000a01000039000000000401041a000000010040019000000001034002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000454013f0000000100400190000000420000c13d000000200030008c000010e50000413d000000000010043f0000001f042000390000000504400270000006460440009a000000200020008c00000647040040410000001f033000390000000503300270000006460330009a000000000034004b000010e50000813d000000000004041b0000000104400039000000000034004b000010e10000413d0000001f0020008c0000000103200210000010ee0000a13d000000000010043f0000069006200198000010f90000c13d00000020050000390000064704000041000011050000013d000000000002004b0000000004000019000010f30000613d000000080400002900000000040404330000000302200210000006910220027f0000069102200167000000000224016f000000000232019f000011100000013d00000647040000410000002005000039000000010760008a0000000507700270000006480770009a0000000b085000290000000008080433000000000084041b00000020055000390000000104400039000000000074004b000010fe0000c13d000000000026004b0000110f0000813d0000000302200210000000f80220018f000006910220027f00000691022001670000000b055000290000000005050433000000000225016f000000000024041b00000001023001bf000000000021041b0000000c010000290000063801100197000c00000001001d000000000010043f0000064901000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000011500000c13d000000000000043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000006920220019700000001022001bf000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d0200003900000004030000390000064c0400004100000000050000190000000c060000290000000007000411180e18040000040f00000001002001900000132f0000613d0000000c01000029000000000010043f0000064d01000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000000001004b000011890000c13d0000064e01000041000000000201041a000b00000002001d000006390020009c0000018a0000213d0000000b020000290000000102200039000000000021041b000000000010043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b011000290000000c02000029000000000021041b0000064e01000041000000000101041a000b00000001001d000000000020043f0000064d01000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000021041b0000064f01000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000011d40000c13d0000064f01000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000006920220019700000001022001bf000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d0200003900000004030000390000064c040000410000064f050000410000000c060000290000000007000411180e18040000040f00000001002001900000132f0000613d0000064f01000041000000000010043f0000000901000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000201043b0000000c01000029000000000010043f000b00000002001d0000000101200039000a00000001001d000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000000001004b0000121e0000c13d0000000b01000029000000000101041a000900000001001d000006390010009c0000018a0000213d000000090100002900000001011000390000000b02000029000000000012041b000000000020043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b00000009011000290000000c02000029000000000021041b0000000b01000029000000000101041a000b00000001001d000000000020043f0000000a01000029000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000021041b0000065001000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000012690000c13d0000065001000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000006920220019700000001022001bf000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d0200003900000004030000390000064c0400004100000650050000410000000c060000290000000007000411180e18040000040f00000001002001900000132f0000613d0000065001000041000000000010043f0000000901000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000201043b0000000c01000029000000000010043f000b00000002001d0000000101200039000a00000001001d000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000000001004b000012b30000c13d0000000b01000029000000000101041a000900000001001d000006390010009c0000018a0000213d000000090100002900000001011000390000000b02000029000000000012041b000000000020043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b00000009011000290000000c02000029000000000021041b0000000b01000029000000000101041a000b00000001001d000000000020043f0000000a01000029000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000b02000029000000000021041b0000000104000367000000a401400370000000000201043b0000063b03200197000027100030008c0000063e0000213d000000400100043d0000008404400370000000000404043b0000063804400198000012ca0000c13d0000004402100039000006530300004100000000003204350000002402100039000000190300003900000000003204350000065402000041000000000021043500000004021000390000002003000039000000000032043500000b4d0000013d000006510010009c0000018a0000213d0000004005100039000000400050043f000000200510003900000000003504350000000000410435000000a001200210000000000114019f0000000602000039000000000012041b0000065201000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000101041a000000ff00100190000013200000c13d0000065201000041000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b0000000c02000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000132f0000613d000000000101043b000000000201041a000006920220019700000001022001bf000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d0200003900000004030000390000064c0400004100000652050000410000000c060000290000000007000411180e18040000040f00000001002001900000132f0000613d0000065201000041000000000010043f0000000901000039000000200010043f0000004001000039180e17f30000040f0000000c02000029180e17720000040f0000000b02000039000000000102041a000006920110019700000001011001bf000000000012041b00000000010000190000180f0001042e00000000010000190000181000010430000006930010009c000013360000813d0000004001100039000000400010043f000000000001042d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f0100004100001810000104300000001f0220003900000690022001970000000001120019000000000021004b00000000020000390000000102004039000006390010009c000013480000213d0000000100200190000013480000c13d000000400010043f000000000001042d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f010000410000181000010430000000000003004b000013580000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000034004b000013510000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000003004b000013670000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000013600000413d000000000213001900000000000204350000001f0230003900000690022001970000000001210019000000000001042d000000000301001900000000040104330000000001420436000000000004004b000013790000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000042004b000013730000413d000000000001042d00040000000000020000000001000411000000000010043f0000069401000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f00000001002001900000138d0000613d000000000101043b000000000101041a000000ff001001900000138f0000613d000000000001042d00000000010000190000181000010430000000400200043d000006950020009c000013980000413d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f0100004100001810000104300000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b000013a00000c13d0000000004010433000006800440019700000682044001c7000000000041043500000021042000390000000005040433000006800550019700000696055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b0000141f0000a13d0000000006140019000000000706043300000680077001970000000308500210000000780880018f000006970880021f0000069808800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c000013af0000213d000000100050008c000014250000813d000000400400043d000400000004001d0000063a0040009c000013920000213d00000004060000290000008004600039000000400040043f00000042050000390000000005560436000300000005001d000000003603043c0000000005650436000000000045004b000013cc0000c13d00000003090000290000000003090433000006800330019700000682033001c70000000000390435000000040800002900000021038000390000000004030433000006800440019700000696044001c700000000004304350000064f05000041000000410300003900000000040500190000000005080433000000000035004b0000141f0000a13d0000000005930019000000000605043300000680066001970000000307400210000000780770018f000006970770021f0000069807700197000000000667019f00000000006504350000000405400270000000010330008a000000010030008c000013dd0000213d000000100040008c000014250000813d000000400500043d000200000005001d00000020035000390000069a0400004100000000004304350000000003020433000100000003001d0000003702500039180e134e0000040f0000000102000029000000020120002900000037021000390000069b030000410000000000320435000000480210003900000004010000290000000003010433000400000003001d0000000301000029180e134e0000040f000000040200002900000001032000290000002802300039000000020100002900000000002104350000004802300039180e133c0000040f0000065401000041000000400300043d000400000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000201000029180e135b0000040f00000004020000290000000001210049000006050010009c0000060501008041000006050020009c000006050200804100000060011002100000004002200210000000000121019f00001810000104300000067e01000041000000000010043f0000003201000039000000040010043f0000067f010000410000181000010430000000400100043d0000004402100039000006990300004100000000003204350000065402000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000006050010009c0000060501008041000000400110021000000655011001c7000018100001043000040000000000020000000001000411000000000010043f0000069c01000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000014480000613d000000000101043b000000000101041a000000ff001001900000144a0000613d000000000001042d00000000010000190000181000010430000000400200043d000006950020009c000014530000413d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f0100004100001810000104300000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b0000145b0000c13d0000000004010433000006800440019700000682044001c7000000000041043500000021042000390000000005040433000006800550019700000696055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b000014da0000a13d0000000006140019000000000706043300000680077001970000000308500210000000780880018f000006970880021f0000069808800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c0000146a0000213d000000100050008c000014e00000813d000000400400043d000400000004001d0000063a0040009c0000144d0000213d00000004060000290000008004600039000000400040043f00000042050000390000000005560436000300000005001d000000003603043c0000000005650436000000000045004b000014870000c13d00000003090000290000000003090433000006800330019700000682033001c70000000000390435000000040800002900000021038000390000000004030433000006800440019700000696044001c700000000004304350000065005000041000000410300003900000000040500190000000005080433000000000035004b000014da0000a13d0000000005930019000000000605043300000680066001970000000307400210000000780770018f000006970770021f0000069807700197000000000667019f00000000006504350000000405400270000000010330008a000000010030008c000014980000213d000000100040008c000014e00000813d000000400500043d000200000005001d00000020035000390000069a0400004100000000004304350000000003020433000100000003001d0000003702500039180e134e0000040f0000000102000029000000020120002900000037021000390000069b030000410000000000320435000000480210003900000004010000290000000003010433000400000003001d0000000301000029180e134e0000040f000000040200002900000001032000290000002802300039000000020100002900000000002104350000004802300039180e133c0000040f0000065401000041000000400300043d000400000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000201000029180e135b0000040f00000004020000290000000001210049000006050010009c0000060501008041000006050020009c000006050200804100000060011002100000004002200210000000000121019f00001810000104300000067e01000041000000000010043f0000003201000039000000040010043f0000067f010000410000181000010430000000400100043d0000004402100039000006990300004100000000003204350000065402000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000006050010009c0000060501008041000000400110021000000655011001c7000018100001043000040000000000020000000001000411000000000010043f0000069d01000041000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000015030000613d000000000101043b000000000101041a000000ff00100190000015050000613d000000000001042d00000000010000190000181000010430000000400200043d000006950020009c0000150e0000413d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f0100004100001810000104300000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b000015160000c13d0000000004010433000006800440019700000682044001c7000000000041043500000021042000390000000005040433000006800550019700000696055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b000015950000a13d0000000006140019000000000706043300000680077001970000000308500210000000780880018f000006970880021f0000069808800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c000015250000213d000000100050008c0000159b0000813d000000400400043d000400000004001d0000063a0040009c000015080000213d00000004060000290000008004600039000000400040043f00000042050000390000000005560436000300000005001d000000003603043c0000000005650436000000000045004b000015420000c13d00000003090000290000000003090433000006800330019700000682033001c70000000000390435000000040800002900000021038000390000000004030433000006800440019700000696044001c700000000004304350000065205000041000000410300003900000000040500190000000005080433000000000035004b000015950000a13d0000000005930019000000000605043300000680066001970000000307400210000000780770018f000006970770021f0000069807700197000000000667019f00000000006504350000000405400270000000010330008a000000010030008c000015530000213d000000100040008c0000159b0000813d000000400500043d000200000005001d00000020035000390000069a0400004100000000004304350000000003020433000100000003001d0000003702500039180e134e0000040f0000000102000029000000020120002900000037021000390000069b030000410000000000320435000000480210003900000004010000290000000003010433000400000003001d0000000301000029180e134e0000040f000000040200002900000001032000290000002802300039000000020100002900000000002104350000004802300039180e133c0000040f0000065401000041000000400300043d000400000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000201000029180e135b0000040f00000004020000290000000001210049000006050010009c0000060501008041000006050020009c000006050200804100000060011002100000004002200210000000000121019f00001810000104300000067e01000041000000000010043f0000003201000039000000040010043f0000067f010000410000181000010430000000400100043d0000004402100039000006990300004100000000003204350000065402000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000006050010009c0000060501008041000000400110021000000655011001c700001810000104300004000000000002000400000001001d000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000015cb0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000015cb0000613d000000000101043b000000000101041a000000ff00100190000015cd0000613d000000000001042d00000000010000190000181000010430000000400200043d000006950020009c000015d60000413d0000067e01000041000000000010043f0000004101000039000000040010043f0000067f0100004100001810000104300000006004200039000000400040043f0000002a01000039000000000112043600000000030000310000000103300367000000000503034f0000000006010019000000005705043c0000000006760436000000000046004b000015de0000c13d0000000004010433000006800440019700000682044001c7000000000041043500000021042000390000000005040433000006800550019700000696055001c700000000005404350000002904000039000000000600041100000000050600190000000006020433000000000046004b0000165d0000a13d0000000006140019000000000706043300000680077001970000000308500210000000780880018f000006970880021f0000069808800197000000000787019f00000000007604350000000406500270000000010440008a000000010040008c000015ed0000213d000000100050008c000016630000813d000000400400043d000300000004001d0000063a0040009c000015d00000213d00000003060000290000008004600039000000400040043f00000042050000390000000005560436000200000005001d000000003603043c0000000005650436000000000045004b0000160a0000c13d00000002090000290000000003090433000006800330019700000682033001c70000000000390435000000030800002900000021038000390000000004030433000006800440019700000696044001c700000000004304350000004103000039000000040500002900000000040500190000000005080433000000000035004b0000165d0000a13d0000000005930019000000000605043300000680066001970000000307400210000000780770018f000006970770021f0000069807700197000000000667019f00000000006504350000000405400270000000010330008a000000010030008c0000161b0000213d000000100040008c000016630000813d000000400500043d000400000005001d00000020035000390000069a0400004100000000004304350000000003020433000100000003001d0000003702500039180e134e0000040f0000000102000029000000040120002900000037021000390000069b030000410000000000320435000000480210003900000003010000290000000003010433000300000003001d0000000201000029180e134e0000040f000000030200002900000001032000290000002802300039000000040100002900000000002104350000004802300039180e133c0000040f0000065401000041000000400300043d000300000003001d000000000013043500000020010000390000000402300039000000000012043500000024023000390000000401000029180e135b0000040f00000003020000290000000001210049000006050010009c0000060501008041000006050020009c000006050200804100000060011002100000004002200210000000000121019f00001810000104300000067e01000041000000000010043f0000003201000039000000040010043f0000067f010000410000181000010430000000400100043d0000004402100039000006990300004100000000003204350000065402000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000006050010009c0000060501008041000000400110021000000655011001c700001810000104300006000000000002000600000002001d000500000001001d000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b00000006020000290000063802200197000600000002001d000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b000000000101041a000000ff00100190000016c10000613d0000000501000029000000000010043f0000000801000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b0000000602000029000000000020043f000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b000000000201041a0000069202200197000000000021041b0000000001000414000006050010009c0000060501008041000000c0011002100000064b011001c70000800d02000039000000040300003900000000070004110000069e0400004100000005050000290000000606000029180e18040000040f0000000100200190000017430000613d0000000501000029000000000010043f0000000901000039000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000201043b0000000601000029000000000010043f000500000002001d0000000101200039000300000001001d000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d0000000503000029000000000101043b000000000101041a000000000001004b000017420000613d000000000203041a000000000002004b000017450000613d000000000012004b000400000001001d000017220000613d000200000002001d000000000030043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f0000000100200190000017430000613d00000004020000290001000100200092000000000101043b0000000504000029000000000204041a000000010020006c0000174b0000a13d0000000202000029000000010220008a0000000001120019000000000101041a000200000001001d000000000040043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b00000001011000290000000202000029000000000021041b000000000020043f0000000301000029000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b0000000402000029000000000021041b0000000503000029000000000103041a000400000001001d000000000001004b000017510000613d000000000030043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f0000000100200190000017430000613d0000000402000029000000010220008a000000000101043b0000000001210019000000000001041b0000000501000029000000000021041b0000000601000029000000000010043f0000000301000029000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017430000613d000000000101043b000000000001041b000000000001042d000000000100001900001810000104300000067e01000041000000000010043f0000001101000039000000040010043f0000067f0100004100001810000104300000067e01000041000000000010043f0000003201000039000000040010043f0000067f0100004100001810000104300000067e01000041000000000010043f0000003101000039000000040010043f0000067f0100004100001810000104300001000000000002000000000301041a000100000002001d000000000023004b0000176a0000a13d000000000010043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f0000000100200190000017700000613d000000000101043b00000001011000290000000002000019000000000001042d0000067e01000041000000000010043f0000003201000039000000040010043f0000067f010000410000181000010430000000000100001900001810000104300004000000000002000300000002001d000000000020043f000400000001001d0000000101100039000200000001001d000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017af0000613d000000000101043b000000000101041a000000000001004b000017870000613d000000000001042d0000000402000029000000000102041a000006070010009c000017b10000813d000100000001001d0000000101100039000000000012041b000000000020043f0000000001000414000006050010009c0000060501008041000000c00110021000000606011001c70000801002000039180e18090000040f0000000100200190000017af0000613d000000000101043b00000001011000290000000302000029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000201000029000000200010043f0000000001000414000006050010009c0000060501008041000000c0011002100000064a011001c70000801002000039180e18090000040f0000000100200190000017af0000613d000000000101043b0000000402000029000000000021041b000000000001042d000000000100001900001810000104300000067e01000041000000000010043f0000004101000039000000040010043f0000067f010000410000181000010430000000400300043d0000063b04200197000027110040008c000017c90000813d0000063801100198000017dc0000613d000006930030009c000017ec0000813d0000004005300039000000400050043f000000200530003900000000004504350000000000130435000000a002200210000000000112019f0000000602000039000000000012041b000000000001042d00000064013000390000066e02000041000000000021043500000044013000390000066f02000041000000000021043500000024013000390000002a02000039000000000021043500000654010000410000000000130435000000040130003900000020020000390000000000210435000006050030009c0000060503008041000000400130021000000658011001c7000018100001043000000044013000390000065302000041000000000021043500000024013000390000001902000039000000000021043500000654010000410000000000130435000000040130003900000020020000390000000000210435000006050030009c0000060503008041000000400130021000000655011001c700001810000104300000067e01000041000000000010043f0000004101000039000000040010043f0000067f010000410000181000010430000000000001042f000006050010009c000006050100804100000060011002100000000002000414000006050020009c0000060502008041000000c002200210000000000112019f0000064b011001c70000801002000039180e18090000040f0000000100200190000018020000613d000000000101043b000000000001042d0000000001000019000018100001043000001807002104210000000102000039000000000001042d0000000002000019000000000001042d0000180c002104230000000102000039000000000001042d0000000002000019000000000001042d0000180e000004320000180f0001042e000018100001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff020000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000080000001000000000000000000000000000000000000000000000000000000000000000000000000006c0360ea00000000000000000000000000000000000000000000000000000000b390c0aa00000000000000000000000000000000000000000000000000000000e8a3d48400000000000000000000000000000000000000000000000000000000f242432900000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000f895481800000000000000000000000000000000000000000000000000000000e8a3d48500000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000ca15c87200000000000000000000000000000000000000000000000000000000ca15c87300000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000b390c0ab00000000000000000000000000000000000000000000000000000000b48ab8b60000000000000000000000000000000000000000000000000000000091d1485300000000000000000000000000000000000000000000000000000000a217fdde00000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000938e3d7b000000000000000000000000000000000000000000000000000000007e518ec7000000000000000000000000000000000000000000000000000000007e518ec8000000000000000000000000000000000000000000000000000000009010d07c000000000000000000000000000000000000000000000000000000006c0360eb00000000000000000000000000000000000000000000000000000000731133e900000000000000000000000000000000000000000000000000000000248a9ca2000000000000000000000000000000000000000000000000000000002f2ff15c000000000000000000000000000000000000000000000000000000004e1273f3000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000005944c753000000000000000000000000000000000000000000000000000000002f2ff15d0000000000000000000000000000000000000000000000000000000036568abe000000000000000000000000000000000000000000000000000000002a552059000000000000000000000000000000000000000000000000000000002a55205a000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000248a9ca3000000000000000000000000000000000000000000000000000000002693ebf2000000000000000000000000000000000000000000000000000000000b5ee0050000000000000000000000000000000000000000000000000000000018160ddc0000000000000000000000000000000000000000000000000000000018160ddd0000000000000000000000000000000000000000000000000000000020ec271b000000000000000000000000000000000000000000000000000000000b5ee006000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000004634d8c0000000000000000000000000000000000000000000000000000000004634d8d0000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000000fdd58e0000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff7f0000000000000000000000000000000000000000ffffffffffffffffffffffff310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000f92ee8a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c250036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c24f75ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e658a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b75ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e6439a5844729cae3e308f36a5ce933956d7c6367997d26743ca06a70b77c062d58c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a839a5844729cae3e308f36a5ce933956d7c6367997d26743ca06a70b77c062d575eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6cec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b6db4061a20ca83a3be756ee172bd37a029093ac5afe4ce968c6d5435b43cb011e02a0315b383857ac496e9d2b2546a699afaeb4e5e83a1fdef64376d0b74e5a5000000000000000000000000000000000000000000000000ffffffffffffffbf9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6455243323938313a20696e76616c69642072656365697665720000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000445f4f50455241544f52000000000000000000000000000000000000000000004552433131353523736166655472616e7366657246726f6d3a20494e56414c490000000000000000000000000000000000000084000000000000000000000000c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62e03fe177bb050a40ea1b3ecd64121a3fa063a94b6d404b2f45c64697555efe0e0200000200000000000000000000000000000024000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470f23a6e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000494e56414c49445f4f4e5f524543454956455f4d45535341474500000000000045524331313535235f63616c6c6f6e4552433131353552656365697665643a20445f524543495049454e5400000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080000000000000000000000000000000000000000000000000000000000000004a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fbbc197c81000000000000000000000000000000000000000000000000000000007665643a20494e56414c49445f4f4e5f524543454956455f4d4553534147450045524331313535235f63616c6c6f6e455243313135354261746368526563656917307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c310000000000000000000000000000000000000020000000000000000000000000455243323938313a20496e76616c696420706172616d657465727300000000002073616c65507269636500000000000000000000000000000000000000000000455243323938313a20726f79616c7479206665652077696c6c2065786365656441525241595f4c454e4754480000000000000000000000000000000000000000455243313135352362616c616e63654f6642617463683a20494e56414c49445f00000000000000000000000000000000000000000000003fffffffffffffffe0416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000004e56414c49445f4f50455241544f52000000000000000000000000000000000045524331313535237361666542617463685472616e7366657246726f6d3a2049494e56414c49445f4152524159535f4c454e475448000000000000000000000045524331313535235f7361666542617463685472616e7366657246726f6d3a204e56414c49445f524543495049454e540000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000009d89020a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffe4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002e6a736f6e0000000000000000000000000000000000000000000000000000003e85e62effffffffffffffffffffffffffffffffffffffffffffffffffffffff3e85e62f00000000000000000000000000000000000000000000000000000000c79b8b5f00000000000000000000000000000000000000000000000000000000d9b67a260000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000e89341c000000000000000000000000000000000000000000000000000000002a55205a000000000000000000000000000000000000000000000000000000005a05180f000000000000000000000000000000000000000000000000000000007965db0b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000005a05180effffffffffffffffffffffffffffffffffffffffffffffffffffffff7965db0affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffc0a9ced9fdc45cded6d4b7a90e36d1ee82b957a500cc22704c465e9bdf275406fd000000000000000000000000000000000000000000000000ffffffffffffffa0780000000000000000000000000000000000000000000000000000000000000030313233343536373839616263646566000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000537472696e67733a20686578206c656e67746820696e73756666696369656e74416363657373436f6e74726f6c3a206163636f756e7420000000000000000000206973206d697373696e6720726f6c652000000000000000000000000000000095f185554aba264de8ed412af70e5aba6acb0e648f258c912ad29ed85d11ca1851a495916474fe1a0c0fcfb65a8a97682b84a054118858cdd1f5dfd7fc0919ebf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b00000000000000000000000000000000000000000000000000000000000000004f31ddc6f9b4fe3b142e0af0382d753a3bb98dab10b4daa53f8a0677747fb116

[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.