{
  "address": "0xa4e14a5afFB3022EFEADe11A1C9093651756b387",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "accessMethod",
          "type": "string"
        }
      ],
      "name": "DatasetMetadataAlreadyExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "datasetId",
          "type": "uint64"
        }
      ],
      "name": "InvalidDatasetState",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "DatasetApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "DatasetMetadataApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "DatasetMetadataRejected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        }
      ],
      "name": "DatasetMetadataSubmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "DatasetRejected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "approveDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "approveDatasetMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetsCount",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "escrow",
      "outputs": [
        {
          "internalType": "contract IEscrow",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "getDatasetMetadata",
      "outputs": [
        {
          "internalType": "string",
          "name": "title",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "industry",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "source",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "accessMethod",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "submitter",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "createdBlockNumber",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "sizeInBytes",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "isPublic",
          "type": "bool"
        },
        {
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "getDatasetMetadataSubmitter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "getDatasetState",
      "outputs": [
        {
          "internalType": "enum DatasetType.State",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governanceAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_accessMethod",
          "type": "string"
        }
      ],
      "name": "hasDatasetMetadata",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governanceAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_roles",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_escrow",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "rejectDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "rejectDatasetMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "reportCollateralEnough",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "reportCollateralNotEnough",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "reportDatasetProofSubmitted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "reportDatasetReplicaRequirementSubmitted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_datasetId",
          "type": "uint64"
        }
      ],
      "name": "requireValidDatasetMetadata",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "roles",
      "outputs": [
        {
          "internalType": "contract IRoles",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_datasetsProof",
          "type": "address"
        }
      ],
      "name": "setDatasetsProofAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_title",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_industry",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_description",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_source",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_accessMethod",
          "type": "string"
        },
        {
          "internalType": "uint64",
          "name": "_sizeInBytes",
          "type": "uint64"
        },
        {
          "internalType": "bool",
          "name": "_isPublic",
          "type": "bool"
        },
        {
          "internalType": "uint64",
          "name": "_version",
          "type": "uint64"
        }
      ],
      "name": "submitDatasetMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "numDeployments": 1,
  "solcInputHash": "f41acfe2ac725f0bc4f65421a2d4b920",
  "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"accessMethod\",\"type\":\"string\"}],\"name\":\"DatasetMetadataAlreadyExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"datasetId\",\"type\":\"uint64\"}],\"name\":\"InvalidDatasetState\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"DatasetApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"DatasetMetadataApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"DatasetMetadataRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"}],\"name\":\"DatasetMetadataSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"DatasetRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"approveDataset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"approveDatasetMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"datasetsCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"escrow\",\"outputs\":[{\"internalType\":\"contract IEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetMetadata\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"title\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"industry\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"accessMethod\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"createdBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sizeInBytes\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetMetadataSubmitter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"getDatasetState\",\"outputs\":[{\"internalType\":\"enum DatasetType.State\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_accessMethod\",\"type\":\"string\"}],\"name\":\"hasDatasetMetadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governanceAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_roles\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_escrow\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"rejectDataset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"rejectDatasetMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"reportCollateralEnough\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"reportCollateralNotEnough\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"reportDatasetProofSubmitted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"reportDatasetReplicaRequirementSubmitted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_datasetId\",\"type\":\"uint64\"}],\"name\":\"requireValidDatasetMetadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"roles\",\"outputs\":[{\"internalType\":\"contract IRoles\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_datasetsProof\",\"type\":\"address\"}],\"name\":\"setDatasetsProofAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_title\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_industry\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_source\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_accessMethod\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"_sizeInBytes\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"_version\",\"type\":\"uint64\"}],\"name\":\"submitDatasetMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is intended to be inherited by specific dataset-related contracts.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"approveDataset(uint64)\":{\"details\":\"This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event.\"},\"approveDatasetMetadata(uint64)\":{\"details\":\"This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"rejectDataset(uint64)\":{\"details\":\"This function changes the state of the dataset to DatasetRejected and emits the DatasetRejected event.\"},\"rejectDatasetMetadata(uint64)\":{\"details\":\"This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event.\"},\"setDatasetsProofAddress(address)\":{\"details\":\"After the contract is deployed, this function needs to be called manually!\"},\"upgradeTo(address)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new\"}},\"title\":\"Datasets Base Contract\",\"version\":1},\"userdoc\":{\"events\":{\"DatasetApproved(uint64)\":{\"notice\":\"Event emitted when a dataset is approved.\"},\"DatasetMetadataApproved(uint64)\":{\"notice\":\"Event emitted when metadata is approved for a dataset.\"},\"DatasetMetadataRejected(uint64)\":{\"notice\":\"Event emitted when metadata is rejected for a dataset.\"},\"DatasetMetadataSubmitted(uint64,address)\":{\"notice\":\"Event emitted when metadata is submitted for a new dataset.\"},\"DatasetRejected(uint64)\":{\"notice\":\"Event emitted when a dataset is rejected.\"}},\"kind\":\"user\",\"methods\":{\"approveDataset(uint64)\":{\"notice\":\"Approve a dataset.\"},\"approveDatasetMetadata(uint64)\":{\"notice\":\"Approve the metadata of a dataset.\"},\"datasetsCount()\":{\"notice\":\"Default getter functions for public variables\"},\"getDatasetMetadata(uint64)\":{\"notice\":\"Get dataset metadata\"},\"getDatasetMetadataSubmitter(uint64)\":{\"notice\":\"Get submitter of dataset's metadata\"},\"getDatasetState(uint64)\":{\"notice\":\"Get dataset state\"},\"getImplementation()\":{\"notice\":\"Returns the implementation contract\"},\"governanceAddress()\":{\"notice\":\"get  governance address\"},\"hasDatasetMetadata(string)\":{\"notice\":\"Check if a dataset has metadata\"},\"initialize(address,address,address)\":{\"notice\":\"initialize function to initialize the contract and grant the default admin role to the deployer.\"},\"rejectDataset(uint64)\":{\"notice\":\"Reject a dataset.\"},\"rejectDatasetMetadata(uint64)\":{\"notice\":\"Reject the metadata of a dataset.\"},\"reportCollateralEnough(uint64)\":{\"notice\":\"Report the dataset has enough collateral.\"},\"reportCollateralNotEnough(uint64)\":{\"notice\":\"Report the dataset has not enough collateral.\"},\"reportDatasetProofSubmitted(uint64)\":{\"notice\":\"Report the dataset proof has already been submitted.\"},\"reportDatasetReplicaRequirementSubmitted(uint64)\":{\"notice\":\"Report the dataset replica has already been submitted.\"},\"requireValidDatasetMetadata(uint64)\":{\"notice\":\"Checks if metadata fields are valid.\"},\"roles()\":{\"notice\":\"get  roles instance\"},\"setDatasetsProofAddress(address)\":{\"notice\":\"setDatasetsProofAddress function to initialize the datasetsProof contract.\"},\"submitDatasetMetadata(string,string,string,string,string,string,uint64,bool,uint64)\":{\"notice\":\"Submit metadata for a dataset        Note:anyone can submit dataset metadata\"}},\"notice\":\"This contract serves as the base for managing Dataset, metadata, state.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/module/dataset/Datasets.sol\":\"Datasets\"},\"evmVersion\":\"paris\",\"libraries\":{\":__CACHE_BREAKER__\":\"0x0000000000000031363939383631363036343935\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":false},\"runs\":0},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlUpgradeable.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerableUpgradeable is IAccessControlUpgradeable {\\n    /**\\n     * @dev Returns one of the accounts that have `role`. `index` must be a\\n     * value between 0 and {getRoleMemberCount}, non-inclusive.\\n     *\\n     * Role bearers are not sorted in any particular way, and their ordering may\\n     * change at any point.\\n     *\\n     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n     * you perform all queries on the same block. See the following\\n     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n     * for more information.\\n     */\\n    function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n    /**\\n     * @dev Returns the number of accounts that have `role`. Can be used\\n     * together with {getRoleMember} to enumerate all bearers of a role.\\n     */\\n    function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7acbc538aad6eb4614e26612a8c5c0149bb8808db95e2638d245a8365f63e572\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControlUpgradeable {\\n    /**\\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n     *\\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n     * {RoleAdminChanged} not being emitted signaling this.\\n     *\\n     * _Available since v3.1._\\n     */\\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n    /**\\n     * @dev Emitted when `account` is granted `role`.\\n     *\\n     * `sender` is the account that originated the contract call, an admin role\\n     * bearer except when using {AccessControl-_setupRole}.\\n     */\\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Emitted when `account` is revoked `role`.\\n     *\\n     * `sender` is the account that originated the contract call:\\n     *   - if using `revokeRole`, it is the admin role bearer\\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n     */\\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n    /**\\n     * @dev Returns `true` if `account` has been granted `role`.\\n     */\\n    function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n    /**\\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\\n     * {revokeRole}.\\n     *\\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n     */\\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n    /**\\n     * @dev Grants `role` to `account`.\\n     *\\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function grantRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from `account`.\\n     *\\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have ``role``'s admin role.\\n     */\\n    function revokeRole(bytes32 role, address account) external;\\n\\n    /**\\n     * @dev Revokes `role` from the calling account.\\n     *\\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n     * purpose is to provide a mechanism for accounts to lose their privileges\\n     * if they are compromised (such as when a trusted device is misplaced).\\n     *\\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\\n     * event.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must be `account`.\\n     */\\n    function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0xb8f5302f12138c5561362e88a78d061573e6298b7a1a5afe84a1e2c8d4d5aeaa\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967Upgradeable {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x47d6e06872b12e72c79d1b5eb55842f860b5fb1207b2317c2358d2766b950a7b\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822ProxiableUpgradeable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeaconUpgradeable.sol\\\";\\nimport \\\"../../interfaces/IERC1967Upgradeable.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822Upgradeable.sol\\\";\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\nimport \\\"../../utils/StorageSlotUpgradeable.sol\\\";\\nimport \\\"../utils/Initializable.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967UpgradeUpgradeable is Initializable, IERC1967Upgradeable {\\n    function __ERC1967Upgrade_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC1967Upgrade_init_unchained() internal onlyInitializing {\\n    }\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(AddressUpgradeable.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            AddressUpgradeable.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(AddressUpgradeable.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            AddressUpgradeable.functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data);\\n        }\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x584ebdf9c1118a7c773f98788e3f3ede01982bdf8932aa06f5acc7d54876e161\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeaconUpgradeable {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized != type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822Upgradeable.sol\\\";\\nimport \\\"../ERC1967/ERC1967UpgradeUpgradeable.sol\\\";\\nimport \\\"./Initializable.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable {\\n    function __UUPSUpgradeable_init() internal onlyInitializing {\\n    }\\n\\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\\n    }\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n    address private immutable __self = address(this);\\n\\n    /**\\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n     * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n     * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n     * fail.\\n     */\\n    modifier onlyProxy() {\\n        require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n        require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n     * callable on the implementing contract but not through proxies.\\n     */\\n    modifier notDelegated() {\\n        require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n     */\\n    function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n        return _IMPLEMENTATION_SLOT;\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeTo(address newImplementation) public virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n     * encoded in `data`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n     * {upgradeTo} and {upgradeToAndCall}.\\n     *\\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n     *\\n     * ```solidity\\n     * function _authorizeUpgrade(address) internal override onlyOwner {}\\n     * ```\\n     */\\n    function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xb607cb94c27e89750f5ae2ccebcb94e654e926f6125f4fd4c6262c89875118ad\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlotUpgradeable {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x07ac95acad040f1fb1f6120dd0aa5f702db69446e95f82613721879d30de0908\",\"license\":\"MIT\"},\"src/v0.8/interfaces/core/ICarstore.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {CarReplicaType} from \\\"src/v0.8/types/CarReplicaType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IFilplus} from \\\"src/v0.8/interfaces/core/IFilplus.sol\\\";\\nimport {IFilecoin} from \\\"src/v0.8/interfaces/core/IFilecoin.sol\\\";\\n\\n/// @title ICarstoreReadOnly\\n/// @notice This interface defines the functions for get car status.\\ninterface ICarstoreReadOnly {\\n    /// @notice Get the dataset ID associated with a car.\\n    /// @param _id Car ID to check.\\n    /// @return The car size of the car.\\n    function getCarSize(uint64 _id) external view returns (uint64);\\n\\n    /// @notice Get the total size of cars based on an array of car IDs.\\n    /// @param _ids An array of car IDs for which to calculate the size.\\n    /// @return The total size of cars.\\n    function getCarsSize(uint64[] memory _ids) external view returns (uint64);\\n\\n    /// @notice Get the dataset ID associated with a car.\\n    /// @param _id Car ID to check.\\n    /// @return The dataset ID of the car.\\n    /// NOTE: a car only belongs a datasets\\n    function getCarDatasetId(uint64 _id) external view returns (uint64);\\n\\n    /// @notice Get the matching ids of a replica associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @return The matching ids of the car's replica.\\n    function getCarMatchingIds(\\n        uint64 _id\\n    ) external view returns (uint64[] memory);\\n\\n    /// @notice Get the replica details associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The dataset ID, state, and Filecoin claim ID of the replica.\\n    function getCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (CarReplicaType.State, uint64);\\n\\n    /// @notice Get the count of replicas associated with a car.\\n    /// @param _id Car ID for which to retrieve the replica count.\\n    /// @return The count of replicas associated with the car.\\n    function getCarReplicasCount(uint64 _id) external view returns (uint16);\\n\\n    /// @notice Get the Filecoin claim ID associated with a specific replica of a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The Filecoin claim ID of the replica.\\n    function getCarReplicaFilecoinClaimId(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (uint64);\\n\\n    /// @notice Get the state of a replica associated with a car.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @return The state of the replica.\\n    function getCarReplicaState(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (CarReplicaType.State);\\n\\n    /// @notice Get the hash of car based on the car id.\\n    /// @param _id Car ID which to get car hash.\\n    /// @return The hash of the car.\\n    function getCarHash(uint64 _id) external view returns (bytes32);\\n\\n    /// @notice Get the hashs of cars based on an array of car IDs.\\n    /// @param _ids An array of car IDs for which to get car hashs.\\n    /// @return The hashs of cars.\\n    function getCarsHashs(\\n        uint64[] memory _ids\\n    ) external view returns (bytes32[] memory);\\n\\n    /// @notice Get the car's id based on the car's hash.\\n    /// @param _hash The hash which to get car id.\\n    /// @return The id of the car.\\n    function getCarId(bytes32 _hash) external view returns (uint64);\\n\\n    /// @notice Get the ids of cars based on an array of car hashs.\\n    /// @param _hashs An array of car hashs for which to cat car hashs.\\n    /// @return The ids of cars.\\n    function getCarsIds(\\n        bytes32[] memory _hashs\\n    ) external view returns (uint64[] memory);\\n\\n    /// @notice Check if a car exists based on its Hash.\\n    /// @param _hash Car Hash to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCarHash(bytes32 _hash) external view returns (bool);\\n\\n    /// @notice Check if a car exists based on its ID.\\n    /// @param _id Car ID to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCar(uint64 _id) external view returns (bool);\\n\\n    /// @notice Check if a replica exists within a car based on its matching ID.\\n    /// @param _id Car ID to check.\\n    /// @param _matchingId Matching ID of the replica to check.\\n    /// @return True if the replica exists, false otherwise.\\n    function hasCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) external view returns (bool);\\n\\n    /// @notice Check if a car exists based on its Hashs.\\n    /// @dev This function returns whether a car exists or not.\\n    /// @param _hashs  Array of car Hashs to check.\\n    /// @return True if the car exists, false otherwise.\\n    function hasCarsHashs(bytes32[] memory _hashs) external view returns (bool);\\n\\n    /// @notice Check if multiple cars exist based on their IDs.\\n    /// @param _ids Array of car IDs to check.\\n    /// @return True if all specified cars exist, false if any one does not exist.\\n    function hasCars(uint64[] memory _ids) external view returns (bool);\\n\\n    // Default getter functions for public variables\\n    function carsCount() external view returns (uint64);\\n\\n    /// @notice get filecoin object\\n    function filecoin() external view returns (IFilecoin);\\n\\n    /// @notice get filplus object\\n    function filplus() external view returns (IFilplus);\\n}\\n\\n/// @title ICarStore\\n/// @notice This interface defines the functions for managing car data and associated replicas.\\ninterface ICarstore is ICarstoreReadOnly {\\n    /// @dev Internal function to add a car based on its CID.\\n    ///      tips: diffent dataset has the same car is dones't matter,maybe need limit replicas count for a car.\\n    ///      filplus requires dataset replicas,but not limit for car replicas\\n    /// @param _cid Car CID to be added.\\n    /// @param _datasetId dataset index of approved dataset.\\n    /// @param _size car size.\\n    /// @param _replicaCount count of car's replicas.\\n    /// @return The id of the car.\\n    function addCar(\\n        bytes32 _cid,\\n        uint64 _datasetId,\\n        uint64 _size,\\n        uint16 _replicaCount\\n    ) external returns (uint64);\\n\\n    /// @notice Add multiple cars to the storage.\\n    /// @dev This function allows the addition of multiple cars at once.\\n    /// @param _cids Array of car CIDs to be added.\\n    /// @param _datasetId dataset index of approved dataset.\\n    /// @param _sizes car size array.\\n    /// @param _replicaCount count of car's replicas.\\n    /// @return The ids of the cars and the size.\\n    function addCars(\\n        bytes32[] memory _cids,\\n        uint64 _datasetId,\\n        uint64[] memory _sizes,\\n        uint16 _replicaCount\\n    ) external returns (uint64[] memory, uint64);\\n\\n    /// @notice Regist a replica to a car.\\n    /// @dev This function allows adding a replica to an existing car.\\n    /// @param _id Car ID to which the replica will be added.\\n    /// @param _matchingId Matching ID for the new replica.\\n    /// @param _replicaIndex The index of the replica.\\n    function registCarReplica(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint16 _replicaIndex\\n    ) external;\\n\\n    /// @notice Report that matching's state for a replica.\\n    /// @dev This function allows reporting that the matching for a replica is failed.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @param _matchingState Matching's state of the replica, true for success ,false for failed.\\n    function reportCarReplicaMatchingState(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        bool _matchingState\\n    ) external;\\n\\n    /// @notice Report that storage deal for a replica has expired.\\n    /// @dev This function allows reporting that the storage deal for a replica has expired.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    function reportCarReplicaExpired(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n\\n    /// @notice Report that storage of a replica has been slashed.\\n    /// @dev This function allows reporting that the storage of a replica has been slashed.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    function reportCarReplicaSlashed(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n\\n    /// @notice Set the Filecoin claim ID for a replica's storage.\\n    /// @dev This function allows setting the Filecoin claim ID for a specific replica's storage.\\n    /// @param _id Car ID associated with the replica.\\n    /// @param _matchingId Matching ID of the replica.\\n    /// @param _claimId New Filecoin claim ID to set for the replica's storage.\\n    function setCarReplicaFilecoinClaimId(\\n        uint64 _id,\\n        uint64 _matchingId,\\n        uint64 _claimId\\n    ) external;\\n}\\n\",\"keccak256\":\"0xc41c469d6b54a1e15f6e0a8c06ccb3f5980c49df88e704bb270c4f7365481917\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IEscrow.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {EscrowType} from \\\"src/v0.8/types/EscrowType.sol\\\";\\n\\n/// @title IEscrow Interface\\n/// @notice This interface defines the escrow-related functions within the system.\\ninterface IEscrow {\\n    /// @dev Records the sent amount as credit for future withdrawals.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {Collateral} event upon successful credit recording.\\n    function collateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @notice Withdraw funds authorized for an address.\\n    /// @dev This function allows the owner to initiate a withdrawal of authorized funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @notice Emits a {Withdrawn} event upon successful withdrawal.\\n    function withdraw(\\n        EscrowType.Type _type,\\n        address payable _owner,\\n        uint64 _id\\n    ) external;\\n\\n    /// @dev Records the sent amount as credit for future payment withdraw.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {PaymentCollateral} event upon successful credit recording.\\n    function paymentCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @dev Records the sent amount as credit for future payment withdraw.\\n    /// Note Called by the payer to store the sent amount as credit to be pulled.\\n    /// Funds sent in this way are stored in an intermediate {Escrow} contract, so\\n    /// there is no danger of them being spent before withdrawal.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    /// @param _amount The collateral funds.\\n    /// @notice Emits a {PaymentSingleBeneficiaryCollateral} event upon successful credit recording.\\n    function paymentSingleBeneficiaryCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary,\\n        uint256 _amount\\n    ) external payable;\\n\\n    /// @notice Payment withdraw funds authorized for an address.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    /// @notice Emits a {PaymentWithdrawn} event upon successful credit recording.\\n    function paymentWithdraw(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary\\n    ) external;\\n\\n    /// @notice Post an event for collateral type.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function emitCollateralEvent(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        EscrowType.CollateralEvent _event\\n    ) external;\\n\\n    /// @notice Post an event for payment type.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    function emitPaymentEvent(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary,\\n        EscrowType.PaymentEvent _event\\n    ) external;\\n\\n    /// @notice Get owner created block number.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerCreatedBlockNumber(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint64);\\n\\n    /// @notice Get owner collateral funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerCollateral(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner total funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerTotal(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner lock funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerLock(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get owner burned funds.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getOwnerBurned(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (uint256);\\n\\n    /// @notice Get beneficiariesList.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    function getBeneficiariesList(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id\\n    ) external view returns (address[] memory);\\n\\n    /// @notice Get beneficiary fund.\\n    /// @param _type The Escrow type for the credited funds.\\n    /// @param _owner The destination address for the credited funds.\\n    /// @param _id The business id associated with the credited funds.\\n    /// @param _beneficiary The beneficiary address for the payment credited funds.\\n    function getBeneficiaryFund(\\n        EscrowType.Type _type,\\n        address _owner,\\n        uint64 _id,\\n        address _beneficiary\\n    )\\n        external\\n        view\\n        returns (\\n            uint256 total, // Total amount in fund account\\n            uint256 lock, // Lock amount in fund account for payment beneficiaries\\n            uint256 collateral, // Collateral amount in fund account for withdraw and punishment\\n            uint256 burned, // burned amount in fund account\\n            uint64 createdBlockNumber // Fund account created block number\\n        );\\n}\\n\",\"keccak256\":\"0x379552be51d20f8e5bf6b7a980efde842e98b3865ba6c3b403feeae0d1d05afd\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IFilecoin.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {FilecoinType} from \\\"src/v0.8/types/FilecoinType.sol\\\";\\n\\n/// @title IFilplus\\ninterface IFilecoin {\\n    /// @notice The function to init the dependencies of a filecoin.\\n    function initDependencies(address _datacap) external;\\n\\n    /// @notice The function to allocate the datacap of a storage deal.\\n    function allocateDatacap(address client, uint256 _size) external;\\n\\n    /// @notice The function to get the state of a Filecoin storage deal for a replica.\\n    function getReplicaDealState(\\n        bytes32 _cid,\\n        uint64 _claimId\\n    ) external returns (FilecoinType.DealState);\\n\\n    /// @dev do nothing,just for mock\\n    function setMockDealState(FilecoinType.DealState _state) external;\\n\\n    /// @notice The function to get the data of a claim for a replica.\\n    function getReplicaClaimData(\\n        uint64 _provider,\\n        uint64 _claimId\\n    ) external returns (bytes memory);\\n\\n    /// @dev mock the filecoin claim data\\n    function setMockClaimData(uint64 claimId, bytes memory _data) external;\\n}\\n\",\"keccak256\":\"0x1fa5146ddafb3ad304dc3964065a8e7fa91df40b77fc1c47290a738491fe33cb\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IFilplus.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title IFilplus\\ninterface IFilplus {\\n    // Public getter function to access datasetRuleMaxReplicasInCountries\\n    function getDatasetRuleMaxReplicasInCountry(\\n        uint16 _countryCode\\n    ) external view returns (uint16);\\n\\n    // Set functions for public variables\\n    function setDatasetRuleMinRegionsPerDataset(uint16 _newValue) external;\\n\\n    function setDatasetRuleDefaultMaxReplicasPerCountry(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxReplicasInCountry(\\n        uint16 _countryCode,\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxReplicasPerCity(uint16 _newValue) external;\\n\\n    // set maximum proportion of dataset mapping files\\n    function setDatasetRuleMaxProportionOfMappingFilesToDataset(\\n        uint8 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMinSPsPerDataset(uint16 _newValue) external;\\n\\n    function setDatasetRuleMaxReplicasPerSP(uint16 _newValue) external;\\n\\n    function setDatasetRuleMinTotalReplicasPerDataset(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatasetRuleMaxTotalReplicasPerDataset(\\n        uint16 _newValue\\n    ) external;\\n\\n    function setDatacapRulesMaxAllocatedSizePerTime(uint64 _newValue) external;\\n\\n    function setDatacapRulesMaxRemainingPercentageForNext(\\n        uint8 _newValue\\n    ) external;\\n\\n    // Default getter functions for public variables\\n    function datasetRuleMinRegionsPerDataset() external view returns (uint16);\\n\\n    function datasetRuleDefaultMaxReplicasPerCountry()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datasetRuleMaxReplicasPerCity() external view returns (uint16);\\n\\n    function datasetRuleMaxProportionOfMappingFilesToDataset()\\n        external\\n        view\\n        returns (uint8);\\n\\n    function datasetRuleMinSPsPerDataset() external view returns (uint16);\\n\\n    function datasetRuleMaxReplicasPerSP() external view returns (uint16);\\n\\n    function datasetRuleMinTotalReplicasPerDataset()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datasetRuleMaxTotalReplicasPerDataset()\\n        external\\n        view\\n        returns (uint16);\\n\\n    function datacapRulesMaxAllocatedSizePerTime()\\n        external\\n        view\\n        returns (uint64);\\n\\n    function datacapRulesMaxRemainingPercentageForNext()\\n        external\\n        view\\n        returns (uint8);\\n\\n    /// @notice Check if the storage area complies with filplus rules.\\n    function isCompliantRuleGeolocation(\\n        uint16[] memory _regions,\\n        uint16[] memory _countrys,\\n        uint32[][] memory _citys\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the mappingFiles percentage in the dataset complies with filplus rules.\\n    function isCompliantRuleMaxProportionOfMappingFilesToDataset(\\n        uint64 _mappingFilesSize,\\n        uint64 _sourceSize\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the total number of storage replicas complies with filplus rules.\\n    function isCompliantRuleTotalReplicasPerDataset(\\n        address[][] memory _dataPreparers,\\n        address[][] memory _storageProviders,\\n        uint16[] memory _regions,\\n        uint16[] memory _countrys,\\n        uint32[][] memory _citys\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the storage provider for each dataset complies with filplus rules `datasetRuleMinSPsPerDataset`.\\n    function isCompliantRuleMinSPsPerDataset(\\n        uint16 _requirementValue,\\n        uint16 _totalExists,\\n        uint16 _uniqueExists\\n    ) external view returns (bool);\\n\\n    /// @notice Check if the storage provider for each dataset complies with filplus rules `datasetRuleMaxReplicasPerSP`.\\n    function isCompliantRuleMaxReplicasPerSP(\\n        uint16 _value\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xee080dc0e2c87242039aff68c3d2a30cece9afd59cd5260218efc6a4d4fad0a5\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/core/IRoles.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {IAccessControlEnumerableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol\\\";\\n\\n/// @title IRoles Interface\\n/// @notice This interface defines the role-based access control for various roles within the system.\\ninterface IRoles is IAccessControlEnumerableUpgradeable {\\n    ///@dev The new owner accepts the ownership transfer.\\n    function acceptOwnership() external;\\n\\n    /**\\n     * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n     * Overriding this function changes the behavior of the {onlyRole} modifier.\\n     *\\n     * Format of the revert message is described in {_checkRole}.\\n     *\\n     * _Available since v4.6._\\n     */\\n    function checkRole(bytes32 _role) external view;\\n\\n    ///@dev Returns the address of the current owner.\\n    function owner() external view returns (address);\\n\\n    ///@dev Returns the address of the pending owner.\\n    function pendingOwner() external view returns (address);\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() external;\\n\\n    /**\\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0xc03390a62336f7c9e77db4d08a65644439764fb69bd616b499aa502d836e66f8\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/module/IDatasets.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IMerkleUtils} from \\\"src/v0.8/interfaces/utils/IMerkleUtils.sol\\\";\\n\\n/// @title IDatasets\\ninterface IDatasets {\\n    ///@notice Approve a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event.\\n    function approveDataset(uint64 _datasetId) external;\\n\\n    ///@notice Approve the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event.\\n    function approveDatasetMetadata(uint64 _datasetId) external;\\n\\n    ///@notice Reject a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetRejected and emits the DatasetRejected event.\\n    function rejectDataset(uint64 _datasetId) external;\\n\\n    ///@notice Reject the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event.\\n    function rejectDatasetMetadata(uint64 _datasetId) external;\\n\\n    ///@notice Submit metadata for a dataset\\n    ///        Note:anyone can submit dataset metadata\\n    function submitDatasetMetadata(\\n        string memory _title,\\n        string memory _industry,\\n        string memory _name,\\n        string memory _description,\\n        string memory _source,\\n        string memory _accessMethod,\\n        uint64 _sizeInBytes,\\n        bool _isPublic,\\n        uint64 _version\\n    ) external;\\n\\n    ///@notice Get dataset metadata\\n    function getDatasetMetadata(\\n        uint64 _datasetId\\n    )\\n        external\\n        view\\n        returns (\\n            string memory title,\\n            string memory industry,\\n            string memory name,\\n            string memory description,\\n            string memory source,\\n            string memory accessMethod,\\n            address submitter,\\n            uint64 createdBlockNumber,\\n            uint64 sizeInBytes,\\n            bool isPublic,\\n            uint64 version\\n        );\\n\\n    /// @notice Get submitter of dataset's metadata\\n    function getDatasetMetadataSubmitter(\\n        uint64 _datasetId\\n    ) external view returns (address);\\n\\n    ///@notice Get dataset state\\n    function getDatasetState(\\n        uint64 _datasetId\\n    ) external view returns (DatasetType.State);\\n\\n    ///@notice Check if a dataset has metadata\\n    function hasDatasetMetadata(\\n        string memory _accessMethod\\n    ) external view returns (bool);\\n\\n    /// @notice Checks if metadata fields are valid.\\n    function requireValidDatasetMetadata(\\n        uint64 _datasetId\\n    ) external view returns (bool);\\n\\n    /// @notice Report the dataset has not enough collateral.\\n    function reportCollateralNotEnough(uint64 _datasetId) external;\\n\\n    /// @notice Report the dataset has enough collateral.\\n    function reportCollateralEnough(uint64 _datasetId) external;\\n\\n    /// @notice Report the dataset replica has already been submitted.\\n    function reportDatasetReplicaRequirementSubmitted(\\n        uint64 _datasetId\\n    ) external;\\n\\n    /// @notice Report the dataset proof has already been submitted.\\n    function reportDatasetProofSubmitted(uint64 _datasetId) external;\\n\\n    /// @notice Default getter functions for public variables\\n    function datasetsCount() external view returns (uint64);\\n\\n    /// @notice get  roles instance\\n    function roles() external view returns (IRoles);\\n\\n    /// @notice get  governance address\\n    function governanceAddress() external view returns (address);\\n}\\n\",\"keccak256\":\"0x126e414cd17fc1882984d63dfe2fa17623e5235372b07d9a63236a98d8ff75ad\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/module/IDatasetsProof.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IMerkleUtils} from \\\"src/v0.8/interfaces/utils/IMerkleUtils.sol\\\";\\n\\n/// @title IDatasetsProof\\ninterface IDatasetsProof {\\n    ///@notice Submit proof root for a dataset\\n    function submitDatasetProofRoot(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        string calldata _mappingFilesAccessMethod,\\n        bytes32 _rootHash\\n    ) external;\\n\\n    ///@notice Submit proof for a dataset\\n    function submitDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        bytes32[] memory _leafHashes,\\n        uint64 _leafIndex,\\n        uint64[] memory _leafSizes,\\n        bool _completed\\n    ) external;\\n\\n    ///@notice Submit proof completed for a dataset\\n    function submitDatasetProofCompleted(uint64 _datasetId) external;\\n\\n    /// @notice Append dataset collateral funds\\n    function appendDatasetCollateral(uint64 _datasetId) external payable;\\n\\n    /// @notice Get dataset need append collateral funds\\n    function getDatasetAppendCollateral(\\n        uint64 _datasetId\\n    ) external view returns (uint256);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetProof(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) external view returns (bytes32[] memory);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCars(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType,\\n        uint64 _index,\\n        uint64 _len\\n    ) external view returns (bytes32[] memory);\\n\\n    function getDatasetProofCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset proof's submitter\\n    function getDatasetProofSubmitter(\\n        uint64 _datasetId\\n    ) external view returns (address);\\n\\n    ///@notice Get dataset source CIDs\\n    function getDatasetCarsCount(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset size\\n    function getDatasetSize(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (uint64);\\n\\n    ///@notice Get dataset minimum conditional\\n    function getDatasetCollateralRequirement(\\n        uint64 _datasetId\\n    ) external view returns (uint256);\\n\\n    ///@notice Check if a dataset has a car id\\n    function isDatasetContainsCar(\\n        uint64 _datasetId,\\n        uint64 _id\\n    ) external returns (bool);\\n\\n    ///@notice Check if a dataset has car ids\\n    function isDatasetContainsCars(\\n        uint64 _datasetId,\\n        uint64[] memory _ids\\n    ) external view returns (bool);\\n\\n    ///@notice Check if a dataset has submitter\\n    function isDatasetProofSubmitter(\\n        uint64 _datasetId,\\n        address _submitter\\n    ) external view returns (bool);\\n\\n    ///@notice Check if a dataset proof all completed\\n    function isDatasetProofallCompleted(\\n        uint64 _datasetId,\\n        DatasetType.DataType _dataType\\n    ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe6f984da1ffcf0bb6dec2e79a232f394d564107972c727420d21a2d084c0a584\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/interfaces/utils/IMerkleUtils.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title IMerkleUtils\\ninterface IMerkleUtils {\\n    /// @notice Validate a Merkle proof.\\n    /// @dev This function checks if a given Merkle proof is valid.\\n    function isValidMerkleProof(\\n        bytes32 _root,\\n        bytes32 _leaf,\\n        bytes32[] memory _siblings,\\n        uint32 _path\\n    ) external view returns (bool);\\n\\n    /// @notice Set mock valid state\\n    function setMockValidState(bool _state) external;\\n}\\n\",\"keccak256\":\"0xbd575f25c6eb78a215a4594e1506ffef15196c48b9666592155359492e9e34d5\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/Datasets.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// interface\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {IEscrow} from \\\"src/v0.8/interfaces/core/IEscrow.sol\\\";\\nimport {IDatasets} from \\\"src/v0.8/interfaces/module/IDatasets.sol\\\";\\nimport {IDatasetsProof} from \\\"src/v0.8/interfaces/module/IDatasetsProof.sol\\\";\\n///shared\\nimport {DatasetsEvents} from \\\"src/v0.8/shared/events/DatasetsEvents.sol\\\";\\nimport {DatasetsModifiers} from \\\"src/v0.8/shared/modifiers/DatasetsModifiers.sol\\\";\\n/// library\\nimport {DatasetMetadataLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetMetadataLIB.sol\\\";\\nimport {DatasetStateMachineLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\\\";\\nimport {DatasetAuditLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetAuditLIB.sol\\\";\\n\\n/// type\\nimport {RolesType} from \\\"src/v0.8/types/RolesType.sol\\\";\\nimport {EscrowType} from \\\"src/v0.8/types/EscrowType.sol\\\";\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {GeolocationType} from \\\"src/v0.8/types/GeolocationType.sol\\\";\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport {UUPSUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\\\";\\n\\n/// @title Datasets Base Contract\\n/// @notice This contract serves as the base for managing Dataset, metadata, state.\\n/// @dev This contract is intended to be inherited by specific dataset-related contracts.\\ncontract Datasets is\\n    Initializable,\\n    UUPSUpgradeable,\\n    IDatasets,\\n    DatasetsModifiers\\n{\\n    using DatasetMetadataLIB for DatasetType.Dataset;\\n    using DatasetAuditLIB for DatasetType.Dataset;\\n    using DatasetStateMachineLIB for DatasetType.Dataset;\\n\\n    uint64 public datasetsCount; // Total count of datasets\\n    mapping(uint64 => DatasetType.Dataset) private datasets; // Mapping of dataset ID to dataset details\\n\\n    address public governanceAddress;\\n    IRoles public roles;\\n    IEscrow public escrow;\\n    IDatasetsProof private datasetsProof;\\n    /// @dev This empty reserved space is put in place to allow future versions to add new\\n    uint256[32] private __gap;\\n\\n    /// @notice initialize function to initialize the contract and grant the default admin role to the deployer.\\n    function initialize(\\n        address _governanceAddress,\\n        address _roles,\\n        address _escrow\\n    ) public initializer {\\n        governanceAddress = _governanceAddress;\\n        roles = IRoles(_roles);\\n        escrow = IEscrow(_escrow);\\n\\n        __UUPSUpgradeable_init();\\n    }\\n\\n    /// @notice setDatasetsProofAddress function to initialize the datasetsProof contract.\\n    /// @dev After the contract is deployed, this function needs to be called manually!\\n    function setDatasetsProofAddress(\\n        address _datasetsProof\\n    ) public onlyRole(roles, RolesType.DEFAULT_ADMIN_ROLE) {\\n        datasetsProof = IDatasetsProof(_datasetsProof);\\n    }\\n\\n    /// @notice UUPS Upgradeable function to update the roles implementation\\n    /// @dev Only triggered by contract admin\\n    function _authorizeUpgrade(\\n        address newImplementation\\n    )\\n        internal\\n        override\\n        onlyRole(roles, RolesType.DEFAULT_ADMIN_ROLE) // solhint-disable-next-line\\n    {}\\n\\n    /// @notice Returns the implementation contract\\n    function getImplementation() external view returns (address) {\\n        return _getImplementation();\\n    }\\n\\n    ///@notice Approve a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event.\\n    function approveDataset(\\n        uint64 _datasetId\\n    )\\n        external\\n        onlyNotZero(_datasetId)\\n        onlyDatasetState(\\n            this,\\n            _datasetId,\\n            DatasetType.State.DatasetProofSubmitted\\n        )\\n        onlyAddress(governanceAddress)\\n    {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        uint256 funds = escrow.getOwnerTotal(\\n            EscrowType.Type.DatacapCollateral,\\n            dataset.metadata.submitter,\\n            _datasetId\\n        );\\n        if (\\n            funds >= datasetsProof.getDatasetCollateralRequirement(_datasetId)\\n        ) {\\n            // Update collateral funds to collateral requirement\\n            escrow.emitCollateralEvent(\\n                EscrowType.Type.DatacapCollateral,\\n                dataset.metadata.submitter,\\n                _datasetId,\\n                EscrowType.CollateralEvent.SyncCollateral\\n            );\\n\\n            dataset.approveDataset();\\n            emit DatasetsEvents.DatasetApproved(_datasetId);\\n        } else {\\n            dataset.rejectDataset();\\n            emit DatasetsEvents.DatasetRejected(_datasetId);\\n        }\\n    }\\n\\n    ///@notice Approve the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event.\\n    function approveDatasetMetadata(\\n        uint64 _datasetId\\n    )\\n        external\\n        onlyNotZero(_datasetId)\\n        onlyDatasetState(this, _datasetId, DatasetType.State.MetadataSubmitted)\\n        onlyAddress(governanceAddress)\\n    {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n\\n        dataset.approveDatasetMetadata();\\n        emit DatasetsEvents.DatasetMetadataApproved(_datasetId);\\n    }\\n\\n    ///@notice Reject the metadata of a dataset.\\n    ///@dev This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event.\\n    function rejectDatasetMetadata(\\n        uint64 _datasetId\\n    )\\n        external\\n        onlyNotZero(_datasetId)\\n        onlyDatasetState(this, _datasetId, DatasetType.State.MetadataSubmitted)\\n        onlyAddress(governanceAddress)\\n    {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset.rejectDatasetMetadata();\\n\\n        emit DatasetsEvents.DatasetMetadataRejected(_datasetId);\\n    }\\n\\n    ///@notice Reject a dataset.\\n    ///@dev This function changes the state of the dataset to DatasetRejected and emits the DatasetRejected event.\\n    function rejectDataset(\\n        uint64 _datasetId\\n    )\\n        external\\n        onlyNotZero(_datasetId)\\n        onlyDatasetState(\\n            this,\\n            _datasetId,\\n            DatasetType.State.DatasetProofSubmitted\\n        )\\n        onlyAddress(governanceAddress)\\n    {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset.rejectDataset();\\n\\n        emit DatasetsEvents.DatasetRejected(_datasetId);\\n    }\\n\\n    ///@notice Submit metadata for a dataset\\n    ///        Note:anyone can submit dataset metadata\\n    function submitDatasetMetadata(\\n        string memory _title,\\n        string memory _industry,\\n        string memory _name,\\n        string memory _description,\\n        string memory _source,\\n        string memory _accessMethod,\\n        uint64 _sizeInBytes,\\n        bool _isPublic,\\n        uint64 _version\\n    ) external onlyDatasetMetadataNotExsits(this, _accessMethod) {\\n        //Note: params check in lib\\n        datasetsCount++;\\n\\n        DatasetType.Dataset storage dataset = datasets[datasetsCount];\\n        dataset.submitDatasetMetadata(\\n            _title,\\n            _industry,\\n            _name,\\n            _description,\\n            _source,\\n            _accessMethod,\\n            _sizeInBytes,\\n            _isPublic,\\n            _version\\n        );\\n\\n        emit DatasetsEvents.DatasetMetadataSubmitted(datasetsCount, msg.sender);\\n    }\\n\\n    ///@notice Get dataset metadata\\n    function getDatasetMetadata(\\n        uint64 _datasetId\\n    )\\n        public\\n        view\\n        onlyNotZero(_datasetId)\\n        returns (\\n            string memory title,\\n            string memory industry,\\n            string memory name,\\n            string memory description,\\n            string memory source,\\n            string memory accessMethod,\\n            address submitter,\\n            uint64 createdBlockNumber,\\n            uint64 sizeInBytes,\\n            bool isPublic,\\n            uint64 version\\n        )\\n    {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        require(\\n            bytes(dataset.metadata.title).length > 0,\\n            \\\"Metadata does not exist\\\"\\n        );\\n        return (\\n            dataset.metadata.title,\\n            dataset.metadata.industry,\\n            dataset.metadata.name,\\n            dataset.metadata.description,\\n            dataset.metadata.source,\\n            dataset.metadata.accessMethod,\\n            dataset.metadata.submitter,\\n            dataset.metadata.createdBlockNumber,\\n            dataset.metadata.sizeInBytes,\\n            dataset.metadata.isPublic,\\n            dataset.metadata.version\\n        );\\n    }\\n\\n    /// @notice Get submitter of dataset's metadata\\n    function getDatasetMetadataSubmitter(\\n        uint64 _datasetId\\n    ) public view returns (address) {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        return dataset.getDatasetMetadataSubmitter();\\n    }\\n\\n    ///@notice Get dataset state\\n    function getDatasetState(\\n        uint64 _datasetId\\n    ) public view onlyNotZero(_datasetId) returns (DatasetType.State) {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        return dataset.getDatasetState();\\n    }\\n\\n    ///@notice Check if a dataset has metadata\\n    function hasDatasetMetadata(\\n        string memory _accessMethod\\n    ) public view returns (bool) {\\n        for (uint64 i = 1; i <= datasetsCount; i++) {\\n            DatasetType.Dataset storage dataset = datasets[i];\\n            if (dataset.hasDatasetMetadata(_accessMethod)) return true;\\n        }\\n        return false;\\n    }\\n\\n    /// @notice Checks if metadata fields are valid.\\n    function requireValidDatasetMetadata(\\n        uint64 _datasetId\\n    ) external view returns (bool) {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset.requireValidDatasetMetadata();\\n        return true;\\n    }\\n\\n    /// @notice Report the dataset replica has already been submitted.\\n    function reportDatasetReplicaRequirementSubmitted(\\n        uint64 _datasetId\\n    ) external {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset._emitDatasetEvent(DatasetType.Event.SubmitMetadata);\\n    }\\n\\n    /// @notice Report the dataset has not enough collateral.\\n    function reportCollateralNotEnough(uint64 _datasetId) external {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset._emitDatasetEvent(DatasetType.Event.NotEnoughCollateral);\\n    }\\n\\n    /// @notice Report the dataset has enough collateral.\\n    function reportCollateralEnough(uint64 _datasetId) external {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset._emitDatasetEvent(DatasetType.Event.EnoughCollateral);\\n    }\\n\\n    /// @notice Report the dataset proof has already been submitted.\\n    function reportDatasetProofSubmitted(uint64 _datasetId) external {\\n        DatasetType.Dataset storage dataset = datasets[_datasetId];\\n        dataset._emitDatasetEvent(DatasetType.Event.SubmitDatasetProof);\\n    }\\n}\\n\",\"keccak256\":\"0x02bb487464e3a55514b1f4f9f0a1d7a0feb2e66eaa310aeb4c1465c9b5c52c28\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/metadata/DatasetAuditLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {DatasetStateMachineLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\\\";\\n\\n/// @title Dataset Library\\n/// @notice This library provides functions to manage datasets and their metadata, proofs, and verifications.\\n/// @dev This library is intended to be used in conjunction with the Dataset contract.\\n///       Note: only called by governance contract\\nlibrary DatasetAuditLIB {\\n    using DatasetStateMachineLIB for DatasetType.Dataset;\\n\\n    /// @notice Approve the metadata of a dataset.\\n    /// @dev This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event.\\n    /// @param self The dataset for which metadata is being approved.\\n    function approveDatasetMetadata(DatasetType.Dataset storage self) internal {\\n        require(\\n            self.state == DatasetType.State.MetadataSubmitted,\\n            \\\"Invalid state\\\"\\n        );\\n        self._emitDatasetEvent(DatasetType.Event.MetadataApproved);\\n    }\\n\\n    /// @notice Reject the metadata of a dataset.\\n    /// @dev This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event.\\n    /// @param self The dataset for which metadata is being rejected.\\n    function rejectDatasetMetadata(DatasetType.Dataset storage self) internal {\\n        require(\\n            self.state == DatasetType.State.MetadataSubmitted,\\n            \\\"Invalid state\\\"\\n        );\\n        self._emitDatasetEvent(DatasetType.Event.MetadataRejected);\\n    }\\n\\n    /// @notice Approve a dataset.\\n    /// @dev This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event.\\n    /// @param self The dataset to be approved.\\n    function approveDataset(DatasetType.Dataset storage self) internal {\\n        require(\\n            self.state == DatasetType.State.DatasetProofSubmitted,\\n            \\\"Invalid state\\\"\\n        );\\n        self._emitDatasetEvent(DatasetType.Event.DatasetApproved);\\n    }\\n\\n    /// @notice Reject a dataset.\\n    /// @dev This function changes the state of the dataset to MetadataApproved and emits the DatasetRejected event.\\n    /// @param self The dataset to be rejected.\\n    function rejectDataset(DatasetType.Dataset storage self) internal {\\n        require(\\n            self.state == DatasetType.State.DatasetProofSubmitted,\\n            \\\"Invalid state\\\"\\n        );\\n        self._emitDatasetEvent(DatasetType.Event.DatasetRejected);\\n    }\\n}\\n\",\"keccak256\":\"0xee6298296ddebf08ebacbc91b0d1e7c25feb040a7dd724b45d84de95dcbf0466\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/metadata/DatasetMetadataLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\nimport {DatasetStateMachineLIB} from \\\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\\\";\\n\\n/// @title DatasetMetadataLIB Library,,include add,get,verify.\\n/// @notice This library provides functions for managing metadata of datasets.\\nlibrary DatasetMetadataLIB {\\n    using DatasetStateMachineLIB for DatasetType.Dataset;\\n\\n    /// @notice Checks if metadata fields are valid.\\n    /// @param _title Title of the dataset.\\n    /// @param _industry Industry category of the dataset.\\n    /// @param _name Name of the dataset.\\n    /// @param _description Description of the dataset.\\n    /// @param _source Source of the dataset.\\n    /// @param _accessMethod Method of accessing the dataset (e.g., URL, API).\\n    /// @param _sizeInBytes Size of the dataset in bytes.\\n    function _requireValidDatasetMetadata(\\n        string memory _title,\\n        string memory _industry,\\n        string memory _name,\\n        string memory _description,\\n        string memory _source,\\n        string memory _accessMethod,\\n        uint256 _sizeInBytes\\n    ) private pure {\\n        require(\\n            bytes(_title).length > 0 &&\\n                bytes(_industry).length > 0 &&\\n                bytes(_name).length > 0 &&\\n                bytes(_description).length > 0 &&\\n                bytes(_source).length > 0 &&\\n                bytes(_accessMethod).length > 0 &&\\n                _sizeInBytes > 0,\\n            \\\"all params must be non-empty\\\"\\n        );\\n    }\\n\\n    /// @notice Checks if metadata fields are valid.\\n    /// @param self The metadata object to store the metadata details.\\n    function requireValidDatasetMetadata(\\n        DatasetType.Dataset storage self\\n    ) internal view {\\n        _requireValidDatasetMetadata(\\n            self.metadata.title,\\n            self.metadata.industry,\\n            self.metadata.name,\\n            self.metadata.description,\\n            self.metadata.source,\\n            self.metadata.accessMethod,\\n            self.metadata.sizeInBytes\\n        );\\n    }\\n\\n    /// @notice Submits metadata for a dataset.\\n    /// @dev This function allows submitting metadata for a dataset if it hasn't been submitted before.\\n    /// @param self The metadata object to store the metadata details.\\n    /// @param _title Title of the dataset.\\n    /// @param _industry Industry category of the dataset.\\n    /// @param _name Name of the dataset.\\n    /// @param _description Description of the dataset.\\n    /// @param _source Source of the dataset.\\n    /// @param _accessMethod Method of accessing the dataset (e.g., URL, API).\\n    /// @param _sizeInBytes Size of the dataset in bytes.\\n    /// @param _isPublic Boolean indicating if the dataset is public.\\n    /// @param _version Version number of the dataset.\\n    function submitDatasetMetadata(\\n        DatasetType.Dataset storage self,\\n        string memory _title,\\n        string memory _industry,\\n        string memory _name,\\n        string memory _description,\\n        string memory _source,\\n        string memory _accessMethod,\\n        uint64 _sizeInBytes,\\n        bool _isPublic,\\n        uint64 _version\\n    ) internal {\\n        _requireValidDatasetMetadata(\\n            _title,\\n            _industry,\\n            _name,\\n            _description,\\n            _source,\\n            _accessMethod,\\n            _sizeInBytes\\n        );\\n\\n        self.metadata.title = _title;\\n        self.metadata.industry = _industry;\\n        self.metadata.name = _name;\\n        self.metadata.description = _description;\\n        self.metadata.source = _source;\\n        self.metadata.accessMethod = _accessMethod;\\n        self.metadata.submitter = msg.sender;\\n        self.metadata.createdBlockNumber = uint64(block.number);\\n        self.metadata.sizeInBytes = _sizeInBytes;\\n        self.metadata.isPublic = _isPublic;\\n        self.metadata.version = _version;\\n    }\\n\\n    /// @notice Gets the submitter  for a dataset.\\n    /// @dev This function requires that metadata has been submitted before.\\n    /// @param self The metadata object to retrieve the metadata details from.\\n    function getDatasetMetadataSubmitter(\\n        DatasetType.Dataset storage self\\n    ) internal view returns (address submitter) {\\n        require(\\n            bytes(self.metadata.title).length > 0,\\n            \\\"Metadata does not exist\\\"\\n        );\\n\\n        return (self.metadata.submitter);\\n    }\\n\\n    /// @notice Checks if an access method for a dataset has been submitted.\\n    /// @param self The metadata object to check.\\n    /// @param _accessMethod The access method to check.\\n    /// @return True if the access method exists, false otherwise.\\n    function hasDatasetMetadata(\\n        DatasetType.Dataset storage self,\\n        string memory _accessMethod\\n    ) internal view returns (bool) {\\n        return\\n            keccak256(bytes(self.metadata.accessMethod)) ==\\n            keccak256(bytes(_accessMethod));\\n    }\\n}\\n\",\"keccak256\":\"0x3af2b96fb8a3d7b0ab1cf99e6d079bd0f3fb725d6978cc0c4069b9a470bd0915\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/module/dataset/library/metadata/DatasetStateMachineLIB.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title DatasetStateMachineLIB Library,include add,get,verify.\\n/// @notice This library defines the state machine for managing the states of datasets.\\nlibrary DatasetStateMachineLIB {\\n    /// @notice Post an event for a dataset.\\n    /// @dev This function updates the dataset's state based on the event and emits the corresponding event.\\n    /// @param self The dataset for which the event will be posted.\\n    /// @param _event The event to be posted.\\n    function _emitDatasetEvent(\\n        DatasetType.Dataset storage self,\\n        DatasetType.Event _event\\n    ) internal {\\n        DatasetType.State currentState = self.state;\\n        DatasetType.State newState;\\n        // Apply the state transition based on the event\\n        if (_event == DatasetType.Event.SubmitMetadata) {\\n            if (currentState == DatasetType.State.None) {\\n                newState = DatasetType.State.MetadataSubmitted;\\n            }\\n        } else if (_event == DatasetType.Event.MetadataApproved) {\\n            if (currentState == DatasetType.State.MetadataSubmitted) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        } else if (_event == DatasetType.Event.MetadataRejected) {\\n            if (currentState == DatasetType.State.MetadataSubmitted) {\\n                newState = DatasetType.State.MetadataRejected;\\n            }\\n        } else if (_event == DatasetType.Event.NotEnoughCollateral) {\\n            if (currentState == DatasetType.State.MetadataApproved) {\\n                newState = DatasetType.State.CollateralNotEnough;\\n            }\\n        } else if (_event == DatasetType.Event.EnoughCollateral) {\\n            if (currentState == DatasetType.State.CollateralNotEnough) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        } else if (_event == DatasetType.Event.SubmitDatasetProof) {\\n            if (currentState == DatasetType.State.MetadataApproved) {\\n                newState = DatasetType.State.DatasetProofSubmitted;\\n            }\\n        } else if (_event == DatasetType.Event.DatasetApproved) {\\n            if (currentState == DatasetType.State.DatasetProofSubmitted) {\\n                newState = DatasetType.State.DatasetApproved;\\n            }\\n        } else if (_event == DatasetType.Event.DatasetRejected) {\\n            if (currentState == DatasetType.State.DatasetProofSubmitted) {\\n                newState = DatasetType.State.MetadataApproved;\\n            }\\n        }\\n\\n        // Update the state if newState is not None (i.e., a valid transition)\\n        if (newState != DatasetType.State.None) {\\n            self.state = newState;\\n        }\\n    }\\n\\n    /// @notice Get the state of a dataset.\\n    /// @dev This function returns the current state of a dataset.\\n    /// @param self The dataset for which to retrieve the state.\\n    /// @return The current state of the dataset.\\n    function getDatasetState(\\n        DatasetType.Dataset storage self\\n    ) internal view returns (DatasetType.State) {\\n        return self.state;\\n    }\\n}\\n\",\"keccak256\":\"0x5c973fe363d8544a1a4eabde5a0fc24b0ca3b50e6575fecd90d390b89d7de627\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/errors/Errors.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {MatchingType} from \\\"src/v0.8/types/MatchingType.sol\\\";\\n\\nlibrary Errors {\\n    /// @notice commmon errors\\n    error ParamLengthMismatch(uint256 _expectedLength, uint256 _actualLength);\\n\\n    /// @notice car errors\\n    error CarNotExist(uint64 _id);\\n    error CarAlreadyExists(uint64 _id, bytes32 _hash);\\n    error ReplicaNotExist(uint64 _id, uint64 _matchingId);\\n    error ReplicaAlreadyExists(uint64 _id, uint64 _matchingId);\\n    error ReplicaFilecoinClaimIdExists(uint64 _id, uint64 _matchingId);\\n    error InvalidReplicaState(uint64 _id, uint64 _matchingId);\\n    error InvalidReplicaFilecoinDealState(uint64 _id, uint64 _filecoinId);\\n\\n    /// @notice Dataset errors\\n    error DatasetMetadataNotExist(string accessMethod);\\n    error DatasetMetadataAlreadyExist(string accessMethod);\\n    error InvalidDatasetState(uint64 datasetId);\\n    error InvalidDatasetProofsSubmitter(uint64 datasetId, address submitter);\\n\\n    /// @notice matching errors\\n    error InvalidMatchingState(\\n        uint64 matchingId,\\n        MatchingType.State expectedState,\\n        MatchingType.State actualState\\n    );\\n    error NotMatchingInitiator(\\n        uint64 matchingId,\\n        address expectedInitiator,\\n        address actualInitiator\\n    );\\n\\n    error NotMatchingsTarget(uint64 _matchingId, address actualAddress);\\n    error NotMatchingsBids(uint64 _matchingId, address actualAddress);\\n\\n    /// @notice storage errors\\n    error StorageDealNotSuccessful(uint64 _claimId);\\n    error StorageClaimIdAlreadySet(\\n        uint64 _matchingId,\\n        bytes32 _cid,\\n        uint64 _claimId\\n    );\\n\\n    /// @notice datacap errors\\n    error AllocatedDatacapExceedsTotalRequirement(\\n        uint64 _allocatedDatacap,\\n        uint64 _totalDatacapAllocationRequirement\\n    );\\n    error AvailableDatacapExceedAllocationThreshold(\\n        uint64 availableDatacap,\\n        uint64 allocationThreshold\\n    );\\n    error NextDatacapAllocationInvalid(uint64 _matchingId);\\n    error StoredExceedsAllocatedDatacap(\\n        uint64 reallyStored,\\n        uint64 allocatedDatacap\\n    );\\n    error NotCompliantRuleMaxReplicasPerSP(address winner, bytes32 cid);\\n    error NotCompliantRuleMatchingTargetMeetsFilPlusRequirements(\\n        uint64 matchingId,\\n        address winner\\n    );\\n    error TestCase(uint64 code);\\n}\\n\",\"keccak256\":\"0xac984a7eb594a4810e085dad2ad264307e9c657c652023a821f3ab901850bd11\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/events/DatasetsEvents.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nlibrary DatasetsEvents {\\n    /// @notice Event emitted when metadata is approved for a dataset.\\n    event DatasetMetadataApproved(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when metadata is rejected for a dataset.\\n    event DatasetMetadataRejected(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when a dataset is approved.\\n    event DatasetApproved(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when a dataset is rejected.\\n    event DatasetRejected(uint64 indexed _datasetId);\\n\\n    /// @notice Event emitted when metadata is submitted for a new dataset.\\n    event DatasetMetadataSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when replica requirement is submitted for a new dataset.\\n    event DatasetReplicaRequirementSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset has not enough collateral.\\n    event CollateralNotEnough(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset has enough collateral.\\n    event CollateralEnough(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a proof is submitted for a dataset.\\n    event DatasetProofSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _provider\\n    );\\n\\n    /// @notice Event emitted when a dataset is verified.\\n    event DatasetChallengeProofsSubmitted(\\n        uint64 indexed _datasetId,\\n        address indexed _verifier\\n    );\\n    event LogMessage(address indexed sender, string message);\\n}\\n\",\"keccak256\":\"0xaa9544e84d8b8ea3af08a3211926c3f480e59a7ecda9df36459ea3cf6ce87742\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/CarstoreModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IFilecoin} from \\\"src/v0.8/interfaces/core/IFilecoin.sol\\\";\\nimport {ICarstore} from \\\"src/v0.8/interfaces/core/ICarstore.sol\\\";\\n///shared\\nimport {RolesModifiers} from \\\"src/v0.8/shared/modifiers/RolesModifiers.sol\\\";\\nimport {FilplusModifiers} from \\\"src/v0.8/shared/modifiers/FilplusModifiers.sol\\\";\\nimport {Errors} from \\\"src/v0.8/shared/errors/Errors.sol\\\";\\n///types\\nimport {CarReplicaType} from \\\"src/v0.8/types/CarReplicaType.sol\\\";\\nimport {FilecoinType} from \\\"src/v0.8/types/FilecoinType.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract CarstoreModifiers is RolesModifiers, FilplusModifiers {\\n    /// @dev Modifier to ensure that a car with the given ID exists.\\n    modifier onlyCarExist(ICarstore _carstore, uint64 _id) {\\n        if (!_carstore.hasCar(_id)) {\\n            revert Errors.CarNotExist(_id);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a car with the given hash does not exist.\\n    modifier onlyCarNotExist(ICarstore _carstore, bytes32 _hash) {\\n        if (_carstore.hasCarHash(_hash)) {\\n            revert Errors.CarAlreadyExists(_carstore.getCarId(_hash), _hash);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car exists.\\n    modifier onlyCarReplicaExist(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (!_carstore.hasCarReplica(_id, _matchingId)) {\\n            revert Errors.ReplicaNotExist(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car not exists.\\n    modifier onlyCarReplicaNotExist(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (_carstore.hasCarReplica(_id, _matchingId)) {\\n            revert Errors.ReplicaAlreadyExists(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica of a car exists.\\n    modifier onlyUnsetCarReplicaFilecoinClaimId(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId\\n    ) {\\n        if (_carstore.getCarReplicaFilecoinClaimId(_id, _matchingId) != 0) {\\n            revert Errors.ReplicaFilecoinClaimIdExists(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica state before function do.\\n    modifier onlyCarReplicaState(\\n        ICarstore _carstore,\\n        uint64 _id,\\n        uint64 _matchingId,\\n        CarReplicaType.State _state\\n    ) {\\n        if (_state != _carstore.getCarReplicaState(_id, _matchingId)) {\\n            revert Errors.InvalidReplicaState(_id, _matchingId);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a replica filecoin deal state before function do.\\n    modifier onlyCarReplicaFilecoinDealState(\\n        ICarstore _carstore,\\n        IFilecoin _filecoin,\\n        uint64 _id,\\n        uint64 _claimId,\\n        FilecoinType.DealState _filecoinDealState\\n    ) {\\n        if (\\n            _filecoinDealState !=\\n            _filecoin.getReplicaDealState(_carstore.getCarHash(_id), _claimId)\\n        ) {\\n            revert Errors.InvalidReplicaFilecoinDealState(_id, _claimId);\\n        }\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf6a01638b6d8ca801f9af67cf728e40038ab5dc0d3374899243fdfc4d8a97f3c\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/CommonModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title ModifierCommon\\ncontract CommonModifiers {\\n    /// @dev Modifier to check if an ID is not zero.\\n    modifier onlyNotZero(uint64 _value) {\\n        require(_value != 0, \\\"Value must not be zero\\\");\\n        _;\\n    }\\n\\n    /// @dev Modifier to check if an address is not zero\\n    modifier onlyNotZeroAddress(address _address) {\\n        require(address(0) != _address, \\\"Address must not be zero\\\");\\n        _;\\n    }\\n\\n    /// @dev Modifier to check the sender's address\\n    modifier onlyAddress(address allowedAddress) {\\n        require(msg.sender == allowedAddress, \\\"Only allowed address can call\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0x724b2ab7816874ad6285ec7bd538f1ee1e44984c1190b1d0a8b1be33620df029\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/DatasetsModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IDatasets} from \\\"src/v0.8/interfaces/module/IDatasets.sol\\\";\\nimport {IDatasetsProof} from \\\"src/v0.8/interfaces/module/IDatasetsProof.sol\\\";\\n///shared\\nimport {CarstoreModifiers} from \\\"src/v0.8/shared/modifiers/CarstoreModifiers.sol\\\";\\nimport {Errors} from \\\"src/v0.8/shared/errors/Errors.sol\\\";\\n\\n///types\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract DatasetsModifiers is CarstoreModifiers {\\n    /// @dev Modifier to ensure that a dataset metadata  with the given accessMethod exists.\\n    modifier onlyDatasetMetadataExsits(\\n        IDatasets _datasets,\\n        string memory _accessMethod\\n    ) {\\n        if (!_datasets.hasDatasetMetadata(_accessMethod)) {\\n            revert Errors.DatasetMetadataNotExist(_accessMethod);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that a dataset metadata with the given accessMethod not exists.\\n    modifier onlyDatasetMetadataNotExsits(\\n        IDatasets _datasets,\\n        string memory _accessMethod\\n    ) {\\n        if (_datasets.hasDatasetMetadata(_accessMethod)) {\\n            revert Errors.DatasetMetadataAlreadyExist(_accessMethod);\\n        }\\n        _;\\n    }\\n\\n    /// @dev Modifier to ensure that dataset has the special state\\n    modifier onlyDatasetState(\\n        IDatasets _datasets,\\n        uint64 _datasetId,\\n        DatasetType.State _state\\n    ) {\\n        if (_state != _datasets.getDatasetState(_datasetId)) {\\n            revert Errors.InvalidDatasetState(_datasetId);\\n        }\\n        _;\\n    }\\n\\n    /// @notice The sender of the dataset proof transaction must be the submitter of the proof.\\n    modifier onlyDatasetProofSubmitterOrSubmitterNotExsits(\\n        IDatasetsProof _datasetsProof,\\n        uint64 _datasetId,\\n        address _sender\\n    ) {\\n        if (\\n            _datasetsProof.getDatasetProofCount(\\n                _datasetId,\\n                DatasetType.DataType.Source\\n            ) !=\\n            0 ||\\n            _datasetsProof.getDatasetProofCount(\\n                _datasetId,\\n                DatasetType.DataType.MappingFiles\\n            ) !=\\n            0\\n        ) {\\n            if (\\n                _datasetsProof.isDatasetProofSubmitter(_datasetId, _sender) !=\\n                true\\n            ) {\\n                revert Errors.InvalidDatasetProofsSubmitter(\\n                    _datasetId,\\n                    _sender\\n                );\\n            }\\n        }\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xf28c27366123751064e0f13b4d7ac9e03abd7da9d6fa4137ee23563b1af2c8da\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/FilplusModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n///interface\\nimport {IFilplus} from \\\"src/v0.8/interfaces/core/IFilplus.sol\\\";\\n///shared\\nimport {CommonModifiers} from \\\"src/v0.8/shared/modifiers/CommonModifiers.sol\\\";\\n\\n/// @title storages\\n/// @dev Manages the storage of matched data after successful matching with Filecoin storage deals.\\ncontract FilplusModifiers is CommonModifiers {\\n\\n}\\n\",\"keccak256\":\"0x7bbe3eebb23a2b4315765aff340b2a38bdbde846734ded1a983536075ce92548\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/shared/modifiers/RolesModifiers.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nimport {IRoles} from \\\"src/v0.8/interfaces/core/IRoles.sol\\\";\\nimport {CommonModifiers} from \\\"src/v0.8/shared/modifiers/CommonModifiers.sol\\\";\\n\\n/// @title RolesModifier\\ncontract RolesModifiers is CommonModifiers {\\n    modifier onlyRole(IRoles _roles, bytes32 _role) {\\n        // roles.checkRole(_role);\\n        require(\\n            _roles.hasRole(_role, msg.sender),\\n            \\\"Only allowed role can call\\\"\\n        );\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0x478efe3520eedf7d6cde667b377bdf4d2a721616c7f2e66603d364e51f02ad3f\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/CarReplicaType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title CarReplicaType Library\\n/// @notice This library defines data structures and enums related to car replicas and their states.\\n/// @dev This library provides enums for different states and events related to car replicas.\\nlibrary CarReplicaType {\\n    /// @notice Enum representing the possible states of a car replica.\\n    enum State {\\n        None, //justify if Replica exsits\\n        Matched, // Replica has been matched for storage\\n        Stored, // Replica has been successfully stored\\n        StorageFailed, // The filecoin claim id's verification failed.\\n        Slashed, // The filecoin storage has been slashed.\\n        Expired // The filecoin storage has expired.\\n    }\\n\\n    /// @notice Enum representing the events associated with car replicas.\\n    enum Event {\\n        MatchingFailed, // Matching for a replica has been failed\\n        MatchingCompleted, // Matching for a replica has been completed\\n        StorageCompleted, // Storage for a replica has been completed\\n        StorageFailed, // Storage for a replica has failed\\n        StorageDealExpired, // Storage for a replica has expired\\n        StorageSlashed // Storage for a replica has been slashed\\n    }\\n\\n    /// @notice Struct representing a car replica.\\n    struct Replica {\\n        uint64 matchingId; // The matchingId associated with the replica.\\n        uint64 filecoinClaimId; // ID of the Filecoin claim associated with the replica's storage\\n        State state; // Current state of the replica\\n    }\\n\\n    /// @notice Struct representing a car and its associated replicas.\\n    struct Car {\\n        uint64 id; // The id associated with the car.\\n        uint64 datasetId; // Index of approved dataset\\n        uint64 size; //car size\\n        mapping(uint64 => uint16) replicaIndex; // Mapping from matchingId => Replica index\\n        Replica[] replicas; // replicas associated with the car.\\n    }\\n}\\n\",\"keccak256\":\"0xce0e57f8acd81e6dbe4c6d7efddad660792420c0c0cca028d040f82749506aa0\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/DatasetType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {GeolocationType} from \\\"src/v0.8/types/GeolocationType.sol\\\";\\n\\n/// @title DatasetType Library\\n/// @notice This library defines data structures for managing datasets, their metadata, states, and events.\\nlibrary DatasetType {\\n    /// @notice Enum representing the possible states of a dataset.\\n    enum State {\\n        None, // No specific state.\\n        MetadataSubmitted, // Metadata submitted but not approved.\\n        MetadataApproved, // Metadata has been approved.\\n        MetadataRejected, // Metadata submission has been rejected.\\n        CollateralNotEnough, // Not enough collateral when submit proof or challenge proof.\\n        DatasetProofSubmitted, // Proof of dataset submitted.\\n        DatasetApproved // Dataset has been approved.\\n    }\\n\\n    /// @notice Enum representing the events related to dataset management.\\n    enum Event {\\n        SubmitMetadata, // Metadata submission event.\\n        MetadataApproved, // Metadata approval event.\\n        MetadataRejected, // Metadata rejection event.\\n        NotEnoughCollateral, // Dataset not enough collateral event.\\n        EnoughCollateral, // Dataset enough collateral event.\\n        SubmitDatasetProof, // Dataset proof submission event.\\n        DatasetApproved, // Dataset approval event.\\n        DatasetRejected // Dataset rejection event.\\n    }\\n\\n    /// @notice Enum representing the type of data associated with a matching.\\n    enum DataType {\\n        Source, // Matching is associated with a dataset\\n        MappingFiles // Matching is associated with mapping files\\n    }\\n\\n    /// @notice Struct representing metadata associated with a dataset.\\n    struct Metadata {\\n        string title; // Title of the dataset.\\n        string industry; // Industry category of the dataset.\\n        string name; // Name of the dataset.\\n        string description; // Description of the dataset.\\n        string source; // Source of the dataset.\\n        string accessMethod; // Method of accessing the dataset (e.g., URL, API).\\n        address submitter; // Address of the dataset's submitter.\\n        uint64 createdBlockNumber; // Block number at which the dataset was created.\\n        uint64 sizeInBytes; // Size of the dataset in bytes.\\n        bool isPublic; // Boolean indicating if the dataset is public.\\n        uint64 version; // Version number of the dataset.\\n    }\\n\\n    struct Dataset {\\n        Metadata metadata;\\n        State state; // Current state of the dataset.\\n    }\\n\\n    /// @notice Struct representing proofs associated with a dataset challenge submitted by reviewers.\\n    struct Proof {\\n        uint64 datasetSize;\\n        bytes32 rootHash; // Root hash of the data's Merkle tree.\\n        bool allCompleted;\\n        uint64 leafHashesCount;\\n        uint64[] leafHashes; // Proof associated with the dataset.\\n    }\\n\\n    struct DatasetProof {\\n        //proof\\n        string mappingFilesAccessMethod; // Method of accessing data (e.g., URL, API).\\n        Proof sourceProof; // Proof associated with the dataset.\\n        Proof mappingFilesProof; // Note:mappingFiles includes mappingFiles and CarMerkleTree,Proof associated with the dataset.\\n        address proofSubmitter; // Address of the dataset proof's submitter.\\n    }\\n\\n    /// @notice Struct representing proofs associated with a dataset challenge submitted by reviewers.\\n    struct Challenge {\\n        bytes32 leaf;\\n        bytes32[] siblings;\\n        uint32 path;\\n    }\\n\\n    /// @notice Struct representing verification details of a dataset.\\n    struct ChallengeProof {\\n        uint64 randomSeed; // Random seed used for verification. This seed determines which nodes need to be challenged.\\n        Challenge[] challenges; // Merkle proof provided by the auditor to support their challenge.\\n    }\\n\\n    struct DatasetChallengeProof {\\n        // challenges\\n        uint16 challengesCount;\\n        mapping(address => ChallengeProof) challengeProofs; // Address of the auditor who submits challenges.\\n        address[] auditors; // Records of auditors submitting verifications.\\n    }\\n\\n    /// @notice The struct describes the storage requirements specified by the client.\\n    struct ReplicaRequirement {\\n        address[] dataPreparers; // The client can specify DP or choose not to specify\\n        address[] storageProviders; //The client can specify SP or choose not to specify.\\n        GeolocationType.Geolocation geolocations; // Geolocation requested by the client.\\n    }\\n\\n    struct DatasetReplicasRequirement {\\n        ReplicaRequirement[] replicasRequirement; // Replica requirements requested by the client.\\n    }\\n}\\n\",\"keccak256\":\"0x9108caabc6f94898eae01009a91c9f2f728cb99d7cf80358d4c3b1e4058997f4\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/EscrowType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title EscrowType Library\\n/// @notice This library defines escrow type within the system.\\nlibrary EscrowType {\\n    /// @notice Enum escrow object types.\\n    enum Type {\\n        DatacapCollateral, // The storage client collateral.\\n        DatacapChunkCollateral, // The storage provider collateral.\\n        DataAuditCollateral, // The data auditor collateral, for dispute\\n        DataPrepareCollateral, // The data preparer collateral,for dispute\\n        DataAuditFee, // The data auditor calculate fees.\\n        DataPrepareFeeByClient, // The data preparer calculate fees paid by storage client.\\n        DataPrepareFeeByProvider // The data preparer calculate fees paid by storage provider.\\n    }\\n\\n    /// @notice Enum representing the events related to collateral management.\\n    enum CollateralEvent {\\n        SyncBurn, // Escrow synchronize collateral burn event.\\n        SyncCollateral // Escrow synchronize collateral event.\\n    }\\n\\n    /// @notice Enum representing the events related to payment management.\\n    enum PaymentEvent {\\n        SyncPaymentRefund, // Escrow synchronize payment refund event.\\n        SyncPaymentCollateral, // Escrow synchronize payment collateral event.\\n        SyncPaymentBeneficiaries // Escrow synchronize payment beneficiaries list.\\n    }\\n\\n    /// @notice Struct the beneficiary of escrow\\n    struct Fund {\\n        uint256 total; // Total amount in fund account\\n        uint256 lock; // Lock amount in fund account for payment beneficiaries\\n        uint256 collateral; // Collateral amount in fund account for withdraw and punishment\\n        uint256 burned; // burned amount in fund account\\n        uint64 createdBlockNumber; // Fund account created block number\\n    }\\n\\n    /// @notice Struct the escrow\\n    struct Escrow {\\n        Fund owner; // fund owner\\n        address[] beneficiariesList; // Retrieves beneficiaries list\\n        mapping(address beneficiary => Fund) beneficiaries; // Beneficiaries information\\n    }\\n}\\n\",\"keccak256\":\"0xf2a79be6903d2de33f8b87f0ee14a6f5b7abe7d88fb0779f2ebc507933a314b8\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/FilecoinType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\nlibrary FilecoinType {\\n    /// @notice Enum representing the possible states of a Filecoin storage deal.\\n    enum DealState {\\n        Stored, // The filecoin deal's verification was successful.\\n        StorageFailed, // The filecoin deal's verification failed.\\n        Slashed, // The filecoin deal has been slashed.\\n        Expired // The filecoin deal has expired.\\n    }\\n\\n    /// @notice filecoin network type\\n    enum Network {\\n        Mainnet,\\n        CalibrationTestnet,\\n        EndIdentifier\\n    }\\n}\\n\",\"keccak256\":\"0xe4a9b3fe32517cb0c7492eb858e573419d0b323e7735e31cf318381340793f0d\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/GeolocationType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n/// SPDX-License-Identifier: GPL-3.0-or-later\\npragma solidity ^0.8.21;\\n\\n/// @title GeolocationType Library\\n/// @notice This library defines common data structures used for geolocation information.\\n/// @dev This library provides structs to represent geolocation details.\\nlibrary GeolocationType {\\n    /// @notice Struct representing geolocation information.\\n    struct Geolocation {\\n        uint16 regionCode; // Code representing the region\\n        uint16 countryCode; // Code representing the country\\n        uint32[] cityCodes; // Code representing the city\\n    }\\n}\\n\",\"keccak256\":\"0xe8eb4cc7d0e2a6390faa4c3d0634781b768440ea8cc5ce65aaa842bf17cf347f\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/MatchingType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\nimport {DatasetType} from \\\"src/v0.8/types/DatasetType.sol\\\";\\n\\n/// @title MatchingType Library\\n/// @notice This library defines data structures and enums related to dataset matching and their states.\\nlibrary MatchingType {\\n    /// @notice Enum representing the possible states of a dataset matching.\\n    enum State {\\n        None,\\n        Published, // Matching is published and open for bids\\n        InProgress, // Matching is currently in progress\\n        Paused, // Matching is paused\\n        Closed, // Matching is closed and no longer accepting bids\\n        Completed, // Matching is completed\\n        Cancelled, // Matching is cancelled\\n        Failed // Matching has failed\\n    }\\n\\n    /// @notice Enum representing the events associated with dataset matching.\\n    enum Event {\\n        Publish, // Matching is published\\n        FilPlusCheckSuccessed, // Fil+ check succeeded\\n        FilPlusCheckFailed, // Fil+ check failed\\n        Pause, // Matching is paused\\n        PauseExpired, // Pause period expired\\n        Resume, // Matching is resumed\\n        Cancel, // Matching is cancelled\\n        Close, // Matching is closed\\n        HasWinner, // Matching has a winner\\n        NoWinner // No winner in the matching\\n    }\\n\\n    /// @notice Enum representing the rules for determining the winning bid.\\n    enum BidSelectionRule {\\n        HighestBid, // Note: Auction, Winner is determined by the highest bid\\n        LowestBid, // Note: Tender, Winner is determined by the lowest bid\\n        ImmediateAtLeast, // Note: Auction Immediate winning condition: Bid amount is at least the threshold\\n        ImmediateAtMost // Note: Render Immediate winning condition: Bid amount is at most the threshold\\n    }\\n\\n    /// @notice Struct representing a dataset matching.\\n    struct Matching {\\n        BidSelectionRule bidSelectionRule;\\n        uint64 biddingDelayBlockCount; // Number of blocks to delay bidding\\n        uint64 biddingPeriodBlockCount; // Number of blocks for bidding period\\n        uint64 storageCompletionPeriodBlocks; // Number of blocks for storage period, representing the duration of the storage completion time period.\\n        uint256 biddingThreshold; // Threshold for bidding\\n        uint64 createdBlockNumber; // Block number at which the matching was created\\n        string additionalInfo; // Additional information about the matching\\n        address initiator; // Address of the initiator of the matching\\n        uint64 pausedBlockCount; // Number of blocks to paused\\n        State state; // Current state of the matching\\n    }\\n\\n    /// @notice Struct representing the target of a matching.\\n    struct MatchingTarget {\\n        uint64 datasetId; // ID of the dataset associated with the matching\\n        uint64[] cars; // Array of car IDs associated with the matching\\n        uint64 size; // Size of the matching target\\uff0cNote:total datacap size that this matching need allocate\\n        DatasetType.DataType dataType; // Type of data associated with the matching\\n        uint64 associatedMappingFilesMatchingID; // ID of the matching associated with mapping files\\n        uint16 replicaIndex; // index of dataset's replica\\n    }\\n\\n    /// @notice Struct representing a bid in a matching.\\n    struct Bid {\\n        address bidder; // Address of the bidder\\n        uint256 bid; // Bid amount\\n        bool complyFilplusRule; //If the bidder comply with filplus rules\\n    }\\n\\n    /// @notice Struct representing a bids of matching.\\n    struct MatchingBids {\\n        Bid[] bids; // Array of bids in the matching\\n        address winner; // Address of the winner in the matching\\n    }\\n}\\n\",\"keccak256\":\"0x3b6918e967adea47fceea5d699a40f86c24c9417379cd387071ee96bb246f7dc\",\"license\":\"GPL-3.0-or-later\"},\"src/v0.8/types/RolesType.sol\":{\"content\":\"/*******************************************************************************\\n *   (c) 2023 Dataswap\\n *\\n *  Licensed under the GNU General Public License, Version 3.0 or later (the \\\"License\\\");\\n *  you may not use this file except in compliance with the License.\\n *  You may obtain a copy of the License at\\n *\\n *      https://www.gnu.org/licenses/gpl-3.0.en.html\\n *\\n *  Unless required by applicable law or agreed to in writing, software\\n *  distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n *  See the License for the specific language governing permissions and\\n *  limitations under the License.\\n ********************************************************************************/\\n\\n// SPDX-License-Identifier: GPL-3.0-or-later\\n\\npragma solidity ^0.8.21;\\n\\n/// @title RolesType Library\\n/// @notice This library defines constants for different roles within the system.\\nlibrary RolesType {\\n    /// @notice Default admin role\\n    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n    /// @notice Bytes32 constant representing the role of a storage provider.\\n    bytes32 public constant STORAGE_PROVIDER = keccak256(\\\"SP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a retrieve provider.\\n    bytes32 public constant RETRIEVE_PROVIDER = keccak256(\\\"RP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a compute provider.\\n    bytes32 public constant COMPUTE_PROVIDER = keccak256(\\\"CP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a metadata dataset provider.\\n    bytes32 public constant METADATA_DATASET_PROVIDER = keccak256(\\\"MDP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a dataset provider.\\n    bytes32 public constant DATASET_PROVIDER = keccak256(\\\"DP\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a metadata dataset auditor.\\n    bytes32 public constant METADATA_DATASET_AUDITOR = keccak256(\\\"MDA\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a dataset auditor.\\n    bytes32 public constant DATASET_AUDITOR = keccak256(\\\"DA\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a reviewer client.\\n    bytes32 public constant REVIEWER_CLIENT = keccak256(\\\"RC\\\");\\n\\n    /// @notice Bytes32 constant representing the role of a compute client.\\n    bytes32 public constant COMPUTE_CLIENT = keccak256(\\\"CC\\\");\\n}\\n\",\"keccak256\":\"0xed26c066df50161142fb4dda28e66d23a7f1d85cb1bdfd7a3b06187d96ad9bd1\",\"license\":\"GPL-3.0-or-later\"}},\"version\":1}",
  "bytecode": "0x60a06040523060805234801561001457600080fd5b506080516131a061004c600039600081816104d401528181610514015281816106eb0152818161072b015261095301526131a06000f3fe60806040526004361061011b5760003560e01c80632b6a6d7a146101205780633659cfe614610156578063379c131e14610178578063392f5f64146101a557806349421e6b146101d25780634f1ef286146101f257806350cc54ab1461020557806351ff7c3314610225578063527535021461024557806352d1902d146102725780635756d84a14610294578063637a19c6146102b457806368832a6b146102d4578063795053d314610301578063a31e767114610321578063aaf10f4214610341578063ae3c1a6e14610356578063b43f324114610376578063c0c53b8b14610396578063c33ff2a0146103b6578063cc07f203146103ed578063e2fdcc171461040d578063e4714ed81461042d578063ef377d1d1461044d575b600080fd5b34801561012c57600080fd5b5061014061013b366004612267565b61046d565b60405161014d91906122d7565b60405180910390f35b34801561016257600080fd5b50610176610171366004612310565b6104ca565b005b34801561018457600080fd5b50606554610198906001600160401b031681565b60405161014d9190612340565b3480156101b157600080fd5b506068546101c5906001600160a01b031681565b60405161014d9190612386565b3480156101de57600080fd5b506101766101ed366004612267565b610592565b610176610200366004612494565b6106e1565b34801561021157600080fd5b50610176610220366004612267565b61079a565b34801561023157600080fd5b50610176610240366004612267565b6108fb565b34801561025157600080fd5b50610265610260366004612267565b61091e565b60405161014d91906124f4565b34801561027e57600080fd5b50610287610946565b60405161014d9190612508565b3480156102a057600080fd5b506101766102af366004612267565b6109a3565b3480156102c057600080fd5b506101766102cf366004612267565b6109c6565b3480156102e057600080fd5b506102f46102ef366004612267565b6109e9565b60405161014d919061251e565b34801561030d57600080fd5b50606754610265906001600160a01b031681565b34801561032d57600080fd5b5061017661033c36600461253f565b610a13565b34801561034d57600080fd5b50610265610b40565b34801561036257600080fd5b50610176610371366004612267565b610b4f565b34801561038257600080fd5b50610176610391366004612310565b610b73565b3480156103a257600080fd5b506101766103b13660046126a1565b610c2b565b3480156103c257600080fd5b506103d66103d1366004612267565b610d41565b60405161014d9b9a99989796959493929190612749565b3480156103f957600080fd5b506102f4610408366004612815565b611191565b34801561041957600080fd5b506069546101c5906001600160a01b031681565b34801561043957600080fd5b50610176610448366004612267565b6111f9565b34801561045957600080fd5b50610176610468366004612267565b61135a565b600081806001600160401b03166000036104a25760405162461bcd60e51b81526004016104999061287f565b60405180910390fd5b6001600160401b03831660009081526066602052604090206008015460ff1691505b50919050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105125760405162461bcd60e51b8152600401610499906128c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610544611654565b6001600160a01b03161461056a5760405162461bcd60e51b815260040161049990612910565b61057381611670565b6040805160008082526020820190925261058f91839190611709565b50565b80806001600160401b03166000036105bc5760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906005908390632b6a6d7a906105e6908590600401612340565b602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612938565b600681111561063857610638612288565b81600681111561064a5761064a612288565b1461066a57816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b03163381146106955760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604090206106b6816117eb565b6040516001600160401b038816906000805160206130e483398151915290600090a250505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107295760405162461bcd60e51b8152600401610499906128c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661075b611654565b6001600160a01b0316146107815760405162461bcd60e51b815260040161049990612910565b61078a82611670565b61079682826001611709565b5050565b80806001600160401b03166000036107c45760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906001908390632b6a6d7a906107ee908590600401612340565b602060405180830381865afa15801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f9190612938565b600681111561084057610840612288565b81600681111561085257610852612288565b1461087257816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b031633811461089d5760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604090206108be8161182e565b6040516001600160401b038816907fc6542258ba8401255b1fd15ee4fab37bb91a180b999e1c3f40a5ca63a58af50f90600090a250505050505050565b6001600160401b038116600090815260666020526040902061079681600461186d565b6001600160401b038116600090815260666020526040812061093f81611a6f565b9392505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109905760405162461bcd60e51b8152600401610499906129f2565b5060008051602061312483398151915290565b6001600160401b038116600090815260666020526040902061079681600561186d565b6001600160401b038116600090815260666020526040902061079681600361186d565b6001600160401b0381166000908152606660205260408120610a0a81611ab1565b50600192915050565b60405163cc07f20360e01b815230908590829063cc07f20390610a3a908490600401612a02565b602060405180830381865afa158015610a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b9190612a1e565b15610a9b578060405163972de51960e01b81526004016104999190612a02565b606580546001600160401b0316906000610ab483612a55565b82546101009290920a6001600160401b038181021990931691831602179091556065541660009081526066602052604090209050610afa818d8d8d8d8d8d8d8d8d611e24565b60655460405133916001600160401b0316907fdbef5fb8ee173d73266166645e184e7fefac6651f7b7adc1e7985a0f46d2be4390600090a3505050505050505050505050565b6000610b4a611654565b905090565b6001600160401b03811660009081526066602052604081209061079690829061186d565b606854604051632474521560e21b81526001600160a01b039091169060009082906391d1485490610baa9084903390600401612a7e565b602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190612a1e565b610c075760405162461bcd60e51b815260040161049990612aca565b5050606a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610c4b5750600054600160ff909116105b80610c6c5750610c5a30611f19565b158015610c6c575060005460ff166001145b610c885760405162461bcd60e51b815260040161049990612b25565b6000805460ff191660011790558015610cab576000805461ff0019166101001790555b606780546001600160a01b038087166001600160a01b031992831617909255606880548684169083161790556069805492851692909116919091179055610cf0611f28565b8015610d3b576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610d3290600190612b49565b60405180910390a15b50505050565b60608060608060608060008060008060008b806001600160401b0316600003610d7c5760405162461bcd60e51b81526004016104999061287f565b6001600160401b038d16600090815260666020526040812080549091908290610da490612b6d565b905011610dc35760405162461bcd60e51b815260040161049990612bc1565b6006810154600782015482548392600184019260028501926003860192600487019260058801926001600160a01b038316926001600160401b03600160a01b9091048116928082169260ff600160401b83041692600160481b909204909116908b90610e2e90612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90612b6d565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b50505050509a50898054610eba90612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee690612b6d565b8015610f335780601f10610f0857610100808354040283529160200191610f33565b820191906000526020600020905b815481529060010190602001808311610f1657829003601f168201915b50505050509950888054610f4690612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7290612b6d565b8015610fbf5780601f10610f9457610100808354040283529160200191610fbf565b820191906000526020600020905b815481529060010190602001808311610fa257829003601f168201915b50505050509850878054610fd290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90612b6d565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b5050505050975086805461105e90612b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90612b6d565b80156110d75780601f106110ac576101008083540402835291602001916110d7565b820191906000526020600020905b8154815290600101906020018083116110ba57829003601f168201915b505050505096508580546110ea90612b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461111690612b6d565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b505050505095509c509c509c509c509c509c509c509c509c509c509c50505091939597999b90929496989a50565b600060015b6065546001600160401b03908116908216116111f0576001600160401b03811660009081526066602052604090206111ce8185611f51565b156111dd575060019392505050565b50806111e881612a55565b915050611196565b50600092915050565b80806001600160401b03166000036112235760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906001908390632b6a6d7a9061124d908590600401612340565b602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e9190612938565b600681111561129f5761129f612288565b8160068111156112b1576112b1612288565b146112d157816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b03163381146112fc5760405162461bcd60e51b81526004016104999061298d565b6001600160401b038616600090815260666020526040902061131d81611f7f565b6040516001600160401b038816907fd4d52f4d2ee1c7789e6771c84aacb4e5610db8c7a725caeaeff18e8c1b988a4990600090a250505050505050565b80806001600160401b03166000036113845760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906005908390632b6a6d7a906113ae908590600401612340565b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ef9190612938565b600681111561140057611400612288565b81600681111561141257611412612288565b1461143257816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b031633811461145d5760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604080822060695460068201549251632093cf7160e11b81529193926001600160a01b03918216926341279ee2926114b29286929116908d90600401612bd1565b602060405180830381865afa1580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f39190612c0a565b606a546040516305ce199d60e31b81529192506001600160a01b031690632e70cce890611524908b90600401612340565b602060405180830381865afa158015611541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115659190612c0a565b811061161e576069546006830154604051630320005f60e51b81526001600160a01b03928316926364000be0926115aa92600092909116908d90600190600401612c59565b600060405180830381600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506115e582611fc2565b6040516001600160401b038916907f41556162b6fcd672c4c54031c35825457e7e0f6887389d5e51ce62142de955f990600090a261164a565b611627826117eb565b6040516001600160401b038916906000805160206130e483398151915290600090a25b5050505050505050565b600080516020613124833981519152546001600160a01b031690565b606854604051632474521560e21b81526001600160a01b039091169060009082906391d14854906116a79084903390600401612a7e565b602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190612a1e565b6117045760405162461bcd60e51b815260040161049990612aca565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561173c5761170483612005565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611796575060408051601f3d908101601f1916820190925261179391810190612c0a565b60015b6117b25760405162461bcd60e51b815260040161049990612ce2565b60008051602061312483398151915281146117df5760405162461bcd60e51b815260040161049990612d38565b50611704838383612059565b6005600882015460ff16600681111561180657611806612288565b146118235760405162461bcd60e51b815260040161049990612d6c565b61058f81600761186d565b6001600882015460ff16600681111561184957611849612288565b146118665760405162461bcd60e51b815260040161049990612d6c565b61058f8160025b600882015460ff1660008083600781111561188a5761188a612288565b036118b15760008260068111156118a3576118a3612288565b036118ac575060015b611a2a565b60018360078111156118c5576118c5612288565b036118ec5760015b8260068111156118df576118df612288565b036118ac57506002611a2a565b600283600781111561190057611900612288565b0361192657600182600681111561191957611919612288565b036118ac57506003611a2a565b600383600781111561193a5761193a612288565b0361196057600282600681111561195357611953612288565b036118ac57506004611a2a565b600483600781111561197457611974612288565b036119805760046118cd565b600583600781111561199457611994612288565b036119ba5760028260068111156119ad576119ad612288565b036118ac57506005611a2a565b60068360078111156119ce576119ce612288565b036119f45760058260068111156119e7576119e7612288565b036118ac57506006611a2a565b6007836007811115611a0857611a08612288565b03611a2a576005826006811115611a2157611a21612288565b03611a2a575060025b6000816006811115611a3e57611a3e612288565b14610d3b5760088401805482919060ff19166001836006811115611a6457611a64612288565b021790555050505050565b805460009081908390611a8190612b6d565b905011611aa05760405162461bcd60e51b815260040161049990612bc1565b50600601546001600160a01b031690565b805461058f908290611ac290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611aee90612b6d565b8015611b3b5780601f10611b1057610100808354040283529160200191611b3b565b820191906000526020600020905b815481529060010190602001808311611b1e57829003601f168201915b5050505050826000016001018054611b5290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7e90612b6d565b8015611bcb5780601f10611ba057610100808354040283529160200191611bcb565b820191906000526020600020905b815481529060010190602001808311611bae57829003601f168201915b5050505050836000016002018054611be290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e90612b6d565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b5050505050846000016003018054611c7290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9e90612b6d565b8015611ceb5780601f10611cc057610100808354040283529160200191611ceb565b820191906000526020600020905b815481529060010190602001808311611cce57829003601f168201915b5050505050856000016004018054611d0290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2e90612b6d565b8015611d7b5780601f10611d5057610100808354040283529160200191611d7b565b820191906000526020600020905b815481529060010190602001808311611d5e57829003601f168201915b5050505050866000016005018054611d9290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbe90612b6d565b8015611e0b5780601f10611de057610100808354040283529160200191611e0b565b820191906000526020600020905b815481529060010190602001808311611dee57829003601f168201915b5050505060078901546001600160401b0316905061207e565b611e3c898989898989896001600160401b031661207e565b89611e478a82612e40565b5060018a01611e568982612e40565b5060028a01611e658882612e40565b5060038a01611e748782612e40565b5060048a01611e838682612e40565b5060058a01611e928582612e40565b5060068a0180546001600160401b03438116600160a01b02600160a01b600160e01b031933166001600160e01b031990931692909217919091179091556007909a018054918b16600160481b02600160481b600160881b0319931515600160401b026001600160481b031990931694909b1693909317171697909717909655505050505050565b6001600160a01b03163b151590565b600054610100900460ff16611f4f5760405162461bcd60e51b815260040161049990612f46565b565b8051602082012060405160009190611f6d906005860190612fc8565b60405180910390201490505b92915050565b6001600882015460ff166006811115611f9a57611f9a612288565b14611fb75760405162461bcd60e51b815260040161049990612d6c565b61058f81600161186d565b6005600882015460ff166006811115611fdd57611fdd612288565b14611ffa5760405162461bcd60e51b815260040161049990612d6c565b61058f81600661186d565b61200e81611f19565b61202a5760405162461bcd60e51b81526004016104999061301e565b60008051602061312483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612062836120f5565b60008251118061206f5750805b1561170457610d3b8383612135565b60008751118015612090575060008651115b801561209d575060008551115b80156120aa575060008451115b80156120b7575060008351115b80156120c4575060008251115b80156120d05750600081115b6120ec5760405162461bcd60e51b815260040161049990613061565b50505050505050565b6120fe81612005565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061093f8383604051806060016040528060278152602001613144602791396060600080856001600160a01b0316856040516121729190613093565b600060405180830381855af49150503d80600081146121ad576040519150601f19603f3d011682016040523d82523d6000602084013e6121b2565b606091505b50915091506121c3868383876121cd565b9695505050505050565b6060831561220a578251600003612203576121e785611f19565b6122035760405162461bcd60e51b8152600401610499906130d3565b5081612214565b612214838361221c565b949350505050565b81511561222c5781518083602001fd5b8060405162461bcd60e51b81526004016104999190612a02565b6001600160401b0381165b811461058f57600080fd5b8035611f7981612246565b60006020828403121561227c5761227c600080fd5b6000612214848461225c565b634e487b7160e01b600052602160045260246000fd5b6007811061058f5761058f612288565b806122b88161229e565b919050565b6000611f79826122ae565b6122d1816122bd565b82525050565b60208101611f7982846122c8565b6001600160a01b031690565b6000611f79826122e5565b612251816122f1565b8035611f79816122fc565b60006020828403121561232557612325600080fd5b60006122148484612305565b6001600160401b0381166122d1565b60208101611f798284612331565b6000611f7961236261235f846122e5565b90565b6122e5565b6000611f798261234e565b6000611f7982612367565b6122d181612372565b60208101611f79828461237d565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6123bd82612394565b81018181106001600160401b03821117156123da576123da61239e565b6040525050565b60006123ec60405190565b90506122b882826123b4565b60006001600160401b038211156124115761241161239e565b61241a82612394565b60200192915050565b82818337506000910152565b600061244261243d846123f8565b6123e1565b90508281526020810184848401111561245d5761245d600080fd5b612468848285612423565b509392505050565b600082601f83011261248457612484600080fd5b813561221484826020860161242f565b600080604083850312156124aa576124aa600080fd5b60006124b68585612305565b92505060208301356001600160401b038111156124d5576124d5600080fd5b6124e185828601612470565b9150509250929050565b6122d1816122f1565b60208101611f7982846124eb565b806122d1565b60208101611f798284612502565b8015156122d1565b60208101611f798284612516565b801515612251565b8035611f798161252c565b60008060008060008060008060006101208a8c03121561256157612561600080fd5b89356001600160401b0381111561257a5761257a600080fd5b6125868c828d01612470565b99505060208a01356001600160401b038111156125a5576125a5600080fd5b6125b18c828d01612470565b98505060408a01356001600160401b038111156125d0576125d0600080fd5b6125dc8c828d01612470565b97505060608a01356001600160401b038111156125fb576125fb600080fd5b6126078c828d01612470565b96505060808a01356001600160401b0381111561262657612626600080fd5b6126328c828d01612470565b95505060a08a01356001600160401b0381111561265157612651600080fd5b61265d8c828d01612470565b94505060c061266e8c828d0161225c565b93505060e061267f8c828d01612534565b9250506101006126918c828d0161225c565b9150509295985092959850929598565b6000806000606084860312156126b9576126b9600080fd5b60006126c58686612305565b93505060206126d686828701612305565b92505060406126e786828701612305565b9150509250925092565b60005b8381101561270c5781810151838201526020016126f4565b50506000910152565b600061271f825190565b8084526020840193506127368185602086016126f1565b61273f81612394565b9093019392505050565b610160808252810161275b818e612715565b9050818103602083015261276f818d612715565b90508181036040830152612783818c612715565b90508181036060830152612797818b612715565b905081810360808301526127ab818a612715565b905081810360a08301526127bf8189612715565b90506127ce60c08301886124eb565b6127db60e0830187612331565b6127e9610100830186612331565b6127f7610120830185612516565b612805610140830184612331565b9c9b505050505050505050505050565b60006020828403121561282a5761282a600080fd5b81356001600160401b0381111561284357612843600080fd5b61221484828501612470565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b815291505b5060200190565b60208082528101611f798161284f565b602c815260006020820160008051602061310483398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b60208082528101611f798161288f565b602c815260006020820160008051602061310483398151915281526b6163746976652070726f787960a01b602082015291506128c2565b60208082528101611f79816128d9565b6007811061058f57600080fd5b8051611f7981612920565b60006020828403121561294d5761294d600080fd5b6000612214848461292d565b601d81526000602082017f4f6e6c7920616c6c6f77656420616464726573732063616e2063616c6c00000081529150612878565b60208082528101611f7981612959565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b602082015291506128c2565b60208082528101611f798161299d565b6020808252810161093f8184612715565b8051611f798161252c565b600060208284031215612a3357612a33600080fd5b60006122148484612a13565b634e487b7160e01b600052601160045260246000fd5b6001600160401b031660006002600160401b03198201612a7757612a77612a3f565b5060010190565b60408101612a8c8285612502565b61093f60208301846124eb565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612878565b60208082528101611f7981612a99565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506128c2565b60208082528101611f7981612ada565b600060ff8216611f79565b6122d181612b35565b60208101611f798284612b40565b634e487b7160e01b600052602260045260246000fd5b600281046001821680612b8157607f821691505b6020821081036104c4576104c4612b57565b601781526000602082017613595d1859185d1848191bd95cc81b9bdd08195e1a5cdd604a1b81529150612878565b60208082528101611f7981612b93565b60608101612bdf82866122c8565b612bec60208301856124eb565b6122146040830184612331565b80612251565b8051611f7981612bf9565b600060208284031215612c1f57612c1f600080fd5b60006122148484612bff565b6002811061058f5761058f612288565b806122b881612c2b565b6000611f7982612c3b565b6122d181612c45565b60808101612c6782876122c8565b612c7460208301866124eb565b612c816040830185612331565b612c8e6060830184612c50565b95945050505050565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b602082015291506128c2565b60208082528101611f7981612c97565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b602082015291506128c2565b60208082528101611f7981612cf2565b600d81526000602082016c496e76616c696420737461746560981b81529150612878565b60208082528101611f7981612d48565b6000611f7961235f8381565b612d9183612d7c565b815460001960089490940293841b1916921b91909117905550565b6000611704818484612d88565b8181101561079657612dcc600082612dac565b600101612db9565b601f821115611704576000818152602090206020601f85010481016020851015612dfb5750805b612e0d6020601f860104830182612db9565b5050505050565b6000196008929092029190911c191690565b6000612e328383612e14565b600290930290921792915050565b81516001600160401b03811115612e5957612e5961239e565b612e638254612b6d565b612e6e828285612dd4565b6020601f831160018114612e9c5760008415612e8a5750858201515b612e948582612e26565b865550612ef6565b600085815260208120601f198616915b82811015612ecc5788850151825560209485019460019092019101612eac565b86831015612ee95784890151612ee5601f891682612e14565b8355505b6001600288020188555050505b505050505050565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506128c2565b60208082528101611f7981612efe565b60008154612f6381612b6d565b600182168015612f7a5760018114612f8f57612fbf565b60ff1983168652811515820286019350612fbf565b60008581526020902060005b83811015612fb757815488820152600190910190602001612f9b565b838801955050505b50505092915050565b600061093f8284612f56565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291506128c2565b60208082528101611f7981612fd4565b601c81526000602082017b616c6c20706172616d73206d757374206265206e6f6e2d656d70747960201b81529150612878565b60208082528101611f798161302e565b600061307b825190565b6130898185602086016126f1565b9290920192915050565b600061093f8284613071565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612878565b60208082528101611f798161309f56fe571b4e518ce1c666c0cfdad09d8001b252f51f088e4c54ebde3bd2a4d9d2ed5c46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204263aa846ae284a332f59b21798e2c43c66a3aa6572699e50c9056f194f3952364736f6c63430008150033",
  "deployedBytecode": "0x60806040526004361061011b5760003560e01c80632b6a6d7a146101205780633659cfe614610156578063379c131e14610178578063392f5f64146101a557806349421e6b146101d25780634f1ef286146101f257806350cc54ab1461020557806351ff7c3314610225578063527535021461024557806352d1902d146102725780635756d84a14610294578063637a19c6146102b457806368832a6b146102d4578063795053d314610301578063a31e767114610321578063aaf10f4214610341578063ae3c1a6e14610356578063b43f324114610376578063c0c53b8b14610396578063c33ff2a0146103b6578063cc07f203146103ed578063e2fdcc171461040d578063e4714ed81461042d578063ef377d1d1461044d575b600080fd5b34801561012c57600080fd5b5061014061013b366004612267565b61046d565b60405161014d91906122d7565b60405180910390f35b34801561016257600080fd5b50610176610171366004612310565b6104ca565b005b34801561018457600080fd5b50606554610198906001600160401b031681565b60405161014d9190612340565b3480156101b157600080fd5b506068546101c5906001600160a01b031681565b60405161014d9190612386565b3480156101de57600080fd5b506101766101ed366004612267565b610592565b610176610200366004612494565b6106e1565b34801561021157600080fd5b50610176610220366004612267565b61079a565b34801561023157600080fd5b50610176610240366004612267565b6108fb565b34801561025157600080fd5b50610265610260366004612267565b61091e565b60405161014d91906124f4565b34801561027e57600080fd5b50610287610946565b60405161014d9190612508565b3480156102a057600080fd5b506101766102af366004612267565b6109a3565b3480156102c057600080fd5b506101766102cf366004612267565b6109c6565b3480156102e057600080fd5b506102f46102ef366004612267565b6109e9565b60405161014d919061251e565b34801561030d57600080fd5b50606754610265906001600160a01b031681565b34801561032d57600080fd5b5061017661033c36600461253f565b610a13565b34801561034d57600080fd5b50610265610b40565b34801561036257600080fd5b50610176610371366004612267565b610b4f565b34801561038257600080fd5b50610176610391366004612310565b610b73565b3480156103a257600080fd5b506101766103b13660046126a1565b610c2b565b3480156103c257600080fd5b506103d66103d1366004612267565b610d41565b60405161014d9b9a99989796959493929190612749565b3480156103f957600080fd5b506102f4610408366004612815565b611191565b34801561041957600080fd5b506069546101c5906001600160a01b031681565b34801561043957600080fd5b50610176610448366004612267565b6111f9565b34801561045957600080fd5b50610176610468366004612267565b61135a565b600081806001600160401b03166000036104a25760405162461bcd60e51b81526004016104999061287f565b60405180910390fd5b6001600160401b03831660009081526066602052604090206008015460ff1691505b50919050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105125760405162461bcd60e51b8152600401610499906128c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610544611654565b6001600160a01b03161461056a5760405162461bcd60e51b815260040161049990612910565b61057381611670565b6040805160008082526020820190925261058f91839190611709565b50565b80806001600160401b03166000036105bc5760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906005908390632b6a6d7a906105e6908590600401612340565b602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190612938565b600681111561063857610638612288565b81600681111561064a5761064a612288565b1461066a57816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b03163381146106955760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604090206106b6816117eb565b6040516001600160401b038816906000805160206130e483398151915290600090a250505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107295760405162461bcd60e51b8152600401610499906128c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661075b611654565b6001600160a01b0316146107815760405162461bcd60e51b815260040161049990612910565b61078a82611670565b61079682826001611709565b5050565b80806001600160401b03166000036107c45760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906001908390632b6a6d7a906107ee908590600401612340565b602060405180830381865afa15801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f9190612938565b600681111561084057610840612288565b81600681111561085257610852612288565b1461087257816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b031633811461089d5760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604090206108be8161182e565b6040516001600160401b038816907fc6542258ba8401255b1fd15ee4fab37bb91a180b999e1c3f40a5ca63a58af50f90600090a250505050505050565b6001600160401b038116600090815260666020526040902061079681600461186d565b6001600160401b038116600090815260666020526040812061093f81611a6f565b9392505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109905760405162461bcd60e51b8152600401610499906129f2565b5060008051602061312483398151915290565b6001600160401b038116600090815260666020526040902061079681600561186d565b6001600160401b038116600090815260666020526040902061079681600361186d565b6001600160401b0381166000908152606660205260408120610a0a81611ab1565b50600192915050565b60405163cc07f20360e01b815230908590829063cc07f20390610a3a908490600401612a02565b602060405180830381865afa158015610a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b9190612a1e565b15610a9b578060405163972de51960e01b81526004016104999190612a02565b606580546001600160401b0316906000610ab483612a55565b82546101009290920a6001600160401b038181021990931691831602179091556065541660009081526066602052604090209050610afa818d8d8d8d8d8d8d8d8d611e24565b60655460405133916001600160401b0316907fdbef5fb8ee173d73266166645e184e7fefac6651f7b7adc1e7985a0f46d2be4390600090a3505050505050505050505050565b6000610b4a611654565b905090565b6001600160401b03811660009081526066602052604081209061079690829061186d565b606854604051632474521560e21b81526001600160a01b039091169060009082906391d1485490610baa9084903390600401612a7e565b602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190612a1e565b610c075760405162461bcd60e51b815260040161049990612aca565b5050606a80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610c4b5750600054600160ff909116105b80610c6c5750610c5a30611f19565b158015610c6c575060005460ff166001145b610c885760405162461bcd60e51b815260040161049990612b25565b6000805460ff191660011790558015610cab576000805461ff0019166101001790555b606780546001600160a01b038087166001600160a01b031992831617909255606880548684169083161790556069805492851692909116919091179055610cf0611f28565b8015610d3b576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610d3290600190612b49565b60405180910390a15b50505050565b60608060608060608060008060008060008b806001600160401b0316600003610d7c5760405162461bcd60e51b81526004016104999061287f565b6001600160401b038d16600090815260666020526040812080549091908290610da490612b6d565b905011610dc35760405162461bcd60e51b815260040161049990612bc1565b6006810154600782015482548392600184019260028501926003860192600487019260058801926001600160a01b038316926001600160401b03600160a01b9091048116928082169260ff600160401b83041692600160481b909204909116908b90610e2e90612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90612b6d565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b50505050509a50898054610eba90612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee690612b6d565b8015610f335780601f10610f0857610100808354040283529160200191610f33565b820191906000526020600020905b815481529060010190602001808311610f1657829003601f168201915b50505050509950888054610f4690612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7290612b6d565b8015610fbf5780601f10610f9457610100808354040283529160200191610fbf565b820191906000526020600020905b815481529060010190602001808311610fa257829003601f168201915b50505050509850878054610fd290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90612b6d565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b5050505050975086805461105e90612b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90612b6d565b80156110d75780601f106110ac576101008083540402835291602001916110d7565b820191906000526020600020905b8154815290600101906020018083116110ba57829003601f168201915b505050505096508580546110ea90612b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461111690612b6d565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b505050505095509c509c509c509c509c509c509c509c509c509c509c50505091939597999b90929496989a50565b600060015b6065546001600160401b03908116908216116111f0576001600160401b03811660009081526066602052604090206111ce8185611f51565b156111dd575060019392505050565b50806111e881612a55565b915050611196565b50600092915050565b80806001600160401b03166000036112235760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906001908390632b6a6d7a9061124d908590600401612340565b602060405180830381865afa15801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e9190612938565b600681111561129f5761129f612288565b8160068111156112b1576112b1612288565b146112d157816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b03163381146112fc5760405162461bcd60e51b81526004016104999061298d565b6001600160401b038616600090815260666020526040902061131d81611f7f565b6040516001600160401b038816907fd4d52f4d2ee1c7789e6771c84aacb4e5610db8c7a725caeaeff18e8c1b988a4990600090a250505050505050565b80806001600160401b03166000036113845760405162461bcd60e51b81526004016104999061287f565b6040516315b536bd60e11b8152309083906005908390632b6a6d7a906113ae908590600401612340565b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ef9190612938565b600681111561140057611400612288565b81600681111561141257611412612288565b1461143257816040516311bc7abb60e21b81526004016104999190612340565b6067546001600160a01b031633811461145d5760405162461bcd60e51b81526004016104999061298d565b6001600160401b03861660009081526066602052604080822060695460068201549251632093cf7160e11b81529193926001600160a01b03918216926341279ee2926114b29286929116908d90600401612bd1565b602060405180830381865afa1580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f39190612c0a565b606a546040516305ce199d60e31b81529192506001600160a01b031690632e70cce890611524908b90600401612340565b602060405180830381865afa158015611541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115659190612c0a565b811061161e576069546006830154604051630320005f60e51b81526001600160a01b03928316926364000be0926115aa92600092909116908d90600190600401612c59565b600060405180830381600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506115e582611fc2565b6040516001600160401b038916907f41556162b6fcd672c4c54031c35825457e7e0f6887389d5e51ce62142de955f990600090a261164a565b611627826117eb565b6040516001600160401b038916906000805160206130e483398151915290600090a25b5050505050505050565b600080516020613124833981519152546001600160a01b031690565b606854604051632474521560e21b81526001600160a01b039091169060009082906391d14854906116a79084903390600401612a7e565b602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190612a1e565b6117045760405162461bcd60e51b815260040161049990612aca565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561173c5761170483612005565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611796575060408051601f3d908101601f1916820190925261179391810190612c0a565b60015b6117b25760405162461bcd60e51b815260040161049990612ce2565b60008051602061312483398151915281146117df5760405162461bcd60e51b815260040161049990612d38565b50611704838383612059565b6005600882015460ff16600681111561180657611806612288565b146118235760405162461bcd60e51b815260040161049990612d6c565b61058f81600761186d565b6001600882015460ff16600681111561184957611849612288565b146118665760405162461bcd60e51b815260040161049990612d6c565b61058f8160025b600882015460ff1660008083600781111561188a5761188a612288565b036118b15760008260068111156118a3576118a3612288565b036118ac575060015b611a2a565b60018360078111156118c5576118c5612288565b036118ec5760015b8260068111156118df576118df612288565b036118ac57506002611a2a565b600283600781111561190057611900612288565b0361192657600182600681111561191957611919612288565b036118ac57506003611a2a565b600383600781111561193a5761193a612288565b0361196057600282600681111561195357611953612288565b036118ac57506004611a2a565b600483600781111561197457611974612288565b036119805760046118cd565b600583600781111561199457611994612288565b036119ba5760028260068111156119ad576119ad612288565b036118ac57506005611a2a565b60068360078111156119ce576119ce612288565b036119f45760058260068111156119e7576119e7612288565b036118ac57506006611a2a565b6007836007811115611a0857611a08612288565b03611a2a576005826006811115611a2157611a21612288565b03611a2a575060025b6000816006811115611a3e57611a3e612288565b14610d3b5760088401805482919060ff19166001836006811115611a6457611a64612288565b021790555050505050565b805460009081908390611a8190612b6d565b905011611aa05760405162461bcd60e51b815260040161049990612bc1565b50600601546001600160a01b031690565b805461058f908290611ac290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611aee90612b6d565b8015611b3b5780601f10611b1057610100808354040283529160200191611b3b565b820191906000526020600020905b815481529060010190602001808311611b1e57829003601f168201915b5050505050826000016001018054611b5290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7e90612b6d565b8015611bcb5780601f10611ba057610100808354040283529160200191611bcb565b820191906000526020600020905b815481529060010190602001808311611bae57829003601f168201915b5050505050836000016002018054611be290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e90612b6d565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b5050505050846000016003018054611c7290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9e90612b6d565b8015611ceb5780601f10611cc057610100808354040283529160200191611ceb565b820191906000526020600020905b815481529060010190602001808311611cce57829003601f168201915b5050505050856000016004018054611d0290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2e90612b6d565b8015611d7b5780601f10611d5057610100808354040283529160200191611d7b565b820191906000526020600020905b815481529060010190602001808311611d5e57829003601f168201915b5050505050866000016005018054611d9290612b6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbe90612b6d565b8015611e0b5780601f10611de057610100808354040283529160200191611e0b565b820191906000526020600020905b815481529060010190602001808311611dee57829003601f168201915b5050505060078901546001600160401b0316905061207e565b611e3c898989898989896001600160401b031661207e565b89611e478a82612e40565b5060018a01611e568982612e40565b5060028a01611e658882612e40565b5060038a01611e748782612e40565b5060048a01611e838682612e40565b5060058a01611e928582612e40565b5060068a0180546001600160401b03438116600160a01b02600160a01b600160e01b031933166001600160e01b031990931692909217919091179091556007909a018054918b16600160481b02600160481b600160881b0319931515600160401b026001600160481b031990931694909b1693909317171697909717909655505050505050565b6001600160a01b03163b151590565b600054610100900460ff16611f4f5760405162461bcd60e51b815260040161049990612f46565b565b8051602082012060405160009190611f6d906005860190612fc8565b60405180910390201490505b92915050565b6001600882015460ff166006811115611f9a57611f9a612288565b14611fb75760405162461bcd60e51b815260040161049990612d6c565b61058f81600161186d565b6005600882015460ff166006811115611fdd57611fdd612288565b14611ffa5760405162461bcd60e51b815260040161049990612d6c565b61058f81600661186d565b61200e81611f19565b61202a5760405162461bcd60e51b81526004016104999061301e565b60008051602061312483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612062836120f5565b60008251118061206f5750805b1561170457610d3b8383612135565b60008751118015612090575060008651115b801561209d575060008551115b80156120aa575060008451115b80156120b7575060008351115b80156120c4575060008251115b80156120d05750600081115b6120ec5760405162461bcd60e51b815260040161049990613061565b50505050505050565b6120fe81612005565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061093f8383604051806060016040528060278152602001613144602791396060600080856001600160a01b0316856040516121729190613093565b600060405180830381855af49150503d80600081146121ad576040519150601f19603f3d011682016040523d82523d6000602084013e6121b2565b606091505b50915091506121c3868383876121cd565b9695505050505050565b6060831561220a578251600003612203576121e785611f19565b6122035760405162461bcd60e51b8152600401610499906130d3565b5081612214565b612214838361221c565b949350505050565b81511561222c5781518083602001fd5b8060405162461bcd60e51b81526004016104999190612a02565b6001600160401b0381165b811461058f57600080fd5b8035611f7981612246565b60006020828403121561227c5761227c600080fd5b6000612214848461225c565b634e487b7160e01b600052602160045260246000fd5b6007811061058f5761058f612288565b806122b88161229e565b919050565b6000611f79826122ae565b6122d1816122bd565b82525050565b60208101611f7982846122c8565b6001600160a01b031690565b6000611f79826122e5565b612251816122f1565b8035611f79816122fc565b60006020828403121561232557612325600080fd5b60006122148484612305565b6001600160401b0381166122d1565b60208101611f798284612331565b6000611f7961236261235f846122e5565b90565b6122e5565b6000611f798261234e565b6000611f7982612367565b6122d181612372565b60208101611f79828461237d565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b6123bd82612394565b81018181106001600160401b03821117156123da576123da61239e565b6040525050565b60006123ec60405190565b90506122b882826123b4565b60006001600160401b038211156124115761241161239e565b61241a82612394565b60200192915050565b82818337506000910152565b600061244261243d846123f8565b6123e1565b90508281526020810184848401111561245d5761245d600080fd5b612468848285612423565b509392505050565b600082601f83011261248457612484600080fd5b813561221484826020860161242f565b600080604083850312156124aa576124aa600080fd5b60006124b68585612305565b92505060208301356001600160401b038111156124d5576124d5600080fd5b6124e185828601612470565b9150509250929050565b6122d1816122f1565b60208101611f7982846124eb565b806122d1565b60208101611f798284612502565b8015156122d1565b60208101611f798284612516565b801515612251565b8035611f798161252c565b60008060008060008060008060006101208a8c03121561256157612561600080fd5b89356001600160401b0381111561257a5761257a600080fd5b6125868c828d01612470565b99505060208a01356001600160401b038111156125a5576125a5600080fd5b6125b18c828d01612470565b98505060408a01356001600160401b038111156125d0576125d0600080fd5b6125dc8c828d01612470565b97505060608a01356001600160401b038111156125fb576125fb600080fd5b6126078c828d01612470565b96505060808a01356001600160401b0381111561262657612626600080fd5b6126328c828d01612470565b95505060a08a01356001600160401b0381111561265157612651600080fd5b61265d8c828d01612470565b94505060c061266e8c828d0161225c565b93505060e061267f8c828d01612534565b9250506101006126918c828d0161225c565b9150509295985092959850929598565b6000806000606084860312156126b9576126b9600080fd5b60006126c58686612305565b93505060206126d686828701612305565b92505060406126e786828701612305565b9150509250925092565b60005b8381101561270c5781810151838201526020016126f4565b50506000910152565b600061271f825190565b8084526020840193506127368185602086016126f1565b61273f81612394565b9093019392505050565b610160808252810161275b818e612715565b9050818103602083015261276f818d612715565b90508181036040830152612783818c612715565b90508181036060830152612797818b612715565b905081810360808301526127ab818a612715565b905081810360a08301526127bf8189612715565b90506127ce60c08301886124eb565b6127db60e0830187612331565b6127e9610100830186612331565b6127f7610120830185612516565b612805610140830184612331565b9c9b505050505050505050505050565b60006020828403121561282a5761282a600080fd5b81356001600160401b0381111561284357612843600080fd5b61221484828501612470565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b815291505b5060200190565b60208082528101611f798161284f565b602c815260006020820160008051602061310483398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b60208082528101611f798161288f565b602c815260006020820160008051602061310483398151915281526b6163746976652070726f787960a01b602082015291506128c2565b60208082528101611f79816128d9565b6007811061058f57600080fd5b8051611f7981612920565b60006020828403121561294d5761294d600080fd5b6000612214848461292d565b601d81526000602082017f4f6e6c7920616c6c6f77656420616464726573732063616e2063616c6c00000081529150612878565b60208082528101611f7981612959565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b602082015291506128c2565b60208082528101611f798161299d565b6020808252810161093f8184612715565b8051611f798161252c565b600060208284031215612a3357612a33600080fd5b60006122148484612a13565b634e487b7160e01b600052601160045260246000fd5b6001600160401b031660006002600160401b03198201612a7757612a77612a3f565b5060010190565b60408101612a8c8285612502565b61093f60208301846124eb565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612878565b60208082528101611f7981612a99565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506128c2565b60208082528101611f7981612ada565b600060ff8216611f79565b6122d181612b35565b60208101611f798284612b40565b634e487b7160e01b600052602260045260246000fd5b600281046001821680612b8157607f821691505b6020821081036104c4576104c4612b57565b601781526000602082017613595d1859185d1848191bd95cc81b9bdd08195e1a5cdd604a1b81529150612878565b60208082528101611f7981612b93565b60608101612bdf82866122c8565b612bec60208301856124eb565b6122146040830184612331565b80612251565b8051611f7981612bf9565b600060208284031215612c1f57612c1f600080fd5b60006122148484612bff565b6002811061058f5761058f612288565b806122b881612c2b565b6000611f7982612c3b565b6122d181612c45565b60808101612c6782876122c8565b612c7460208301866124eb565b612c816040830185612331565b612c8e6060830184612c50565b95945050505050565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b602082015291506128c2565b60208082528101611f7981612c97565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b602082015291506128c2565b60208082528101611f7981612cf2565b600d81526000602082016c496e76616c696420737461746560981b81529150612878565b60208082528101611f7981612d48565b6000611f7961235f8381565b612d9183612d7c565b815460001960089490940293841b1916921b91909117905550565b6000611704818484612d88565b8181101561079657612dcc600082612dac565b600101612db9565b601f821115611704576000818152602090206020601f85010481016020851015612dfb5750805b612e0d6020601f860104830182612db9565b5050505050565b6000196008929092029190911c191690565b6000612e328383612e14565b600290930290921792915050565b81516001600160401b03811115612e5957612e5961239e565b612e638254612b6d565b612e6e828285612dd4565b6020601f831160018114612e9c5760008415612e8a5750858201515b612e948582612e26565b865550612ef6565b600085815260208120601f198616915b82811015612ecc5788850151825560209485019460019092019101612eac565b86831015612ee95784890151612ee5601f891682612e14565b8355505b6001600288020188555050505b505050505050565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506128c2565b60208082528101611f7981612efe565b60008154612f6381612b6d565b600182168015612f7a5760018114612f8f57612fbf565b60ff1983168652811515820286019350612fbf565b60008581526020902060005b83811015612fb757815488820152600190910190602001612f9b565b838801955050505b50505092915050565b600061093f8284612f56565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b602082015291506128c2565b60208082528101611f7981612fd4565b601c81526000602082017b616c6c20706172616d73206d757374206265206e6f6e2d656d70747960201b81529150612878565b60208082528101611f798161302e565b600061307b825190565b6130898185602086016126f1565b9290920192915050565b600061093f8284613071565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612878565b60208082528101611f798161309f56fe571b4e518ce1c666c0cfdad09d8001b252f51f088e4c54ebde3bd2a4d9d2ed5c46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204263aa846ae284a332f59b21798e2c43c66a3aa6572699e50c9056f194f3952364736f6c63430008150033",
  "devdoc": {
    "details": "This contract is intended to be inherited by specific dataset-related contracts.",
    "events": {
      "AdminChanged(address,address)": {
        "details": "Emitted when the admin account has changed."
      },
      "BeaconUpgraded(address)": {
        "details": "Emitted when the beacon is changed."
      },
      "Initialized(uint8)": {
        "details": "Triggered when the contract has been initialized or reinitialized."
      },
      "Upgraded(address)": {
        "details": "Emitted when the implementation is upgraded."
      }
    },
    "kind": "dev",
    "methods": {
      "approveDataset(uint64)": {
        "details": "This function changes the state of the dataset to DatasetApproved and emits the DatasetApproved event."
      },
      "approveDatasetMetadata(uint64)": {
        "details": "This function changes the state of the dataset to MetadataApproved and emits the MetadataApproved event."
      },
      "proxiableUUID()": {
        "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
      },
      "rejectDataset(uint64)": {
        "details": "This function changes the state of the dataset to DatasetRejected and emits the DatasetRejected event."
      },
      "rejectDatasetMetadata(uint64)": {
        "details": "This function changes the state of the dataset to MetadataRejected and emits the MetadataRejected event."
      },
      "setDatasetsProofAddress(address)": {
        "details": "After the contract is deployed, this function needs to be called manually!"
      },
      "upgradeTo(address)": {
        "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
        "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      },
      "upgradeToAndCall(address,bytes)": {
        "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
        "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      }
    },
    "stateVariables": {
      "__gap": {
        "details": "This empty reserved space is put in place to allow future versions to add new"
      }
    },
    "title": "Datasets Base Contract",
    "version": 1
  },
  "userdoc": {
    "events": {
      "DatasetApproved(uint64)": {
        "notice": "Event emitted when a dataset is approved."
      },
      "DatasetMetadataApproved(uint64)": {
        "notice": "Event emitted when metadata is approved for a dataset."
      },
      "DatasetMetadataRejected(uint64)": {
        "notice": "Event emitted when metadata is rejected for a dataset."
      },
      "DatasetMetadataSubmitted(uint64,address)": {
        "notice": "Event emitted when metadata is submitted for a new dataset."
      },
      "DatasetRejected(uint64)": {
        "notice": "Event emitted when a dataset is rejected."
      }
    },
    "kind": "user",
    "methods": {
      "approveDataset(uint64)": {
        "notice": "Approve a dataset."
      },
      "approveDatasetMetadata(uint64)": {
        "notice": "Approve the metadata of a dataset."
      },
      "datasetsCount()": {
        "notice": "Default getter functions for public variables"
      },
      "getDatasetMetadata(uint64)": {
        "notice": "Get dataset metadata"
      },
      "getDatasetMetadataSubmitter(uint64)": {
        "notice": "Get submitter of dataset's metadata"
      },
      "getDatasetState(uint64)": {
        "notice": "Get dataset state"
      },
      "getImplementation()": {
        "notice": "Returns the implementation contract"
      },
      "governanceAddress()": {
        "notice": "get  governance address"
      },
      "hasDatasetMetadata(string)": {
        "notice": "Check if a dataset has metadata"
      },
      "initialize(address,address,address)": {
        "notice": "initialize function to initialize the contract and grant the default admin role to the deployer."
      },
      "rejectDataset(uint64)": {
        "notice": "Reject a dataset."
      },
      "rejectDatasetMetadata(uint64)": {
        "notice": "Reject the metadata of a dataset."
      },
      "reportCollateralEnough(uint64)": {
        "notice": "Report the dataset has enough collateral."
      },
      "reportCollateralNotEnough(uint64)": {
        "notice": "Report the dataset has not enough collateral."
      },
      "reportDatasetProofSubmitted(uint64)": {
        "notice": "Report the dataset proof has already been submitted."
      },
      "reportDatasetReplicaRequirementSubmitted(uint64)": {
        "notice": "Report the dataset replica has already been submitted."
      },
      "requireValidDatasetMetadata(uint64)": {
        "notice": "Checks if metadata fields are valid."
      },
      "roles()": {
        "notice": "get  roles instance"
      },
      "setDatasetsProofAddress(address)": {
        "notice": "setDatasetsProofAddress function to initialize the datasetsProof contract."
      },
      "submitDatasetMetadata(string,string,string,string,string,string,uint64,bool,uint64)": {
        "notice": "Submit metadata for a dataset        Note:anyone can submit dataset metadata"
      }
    },
    "notice": "This contract serves as the base for managing Dataset, metadata, state.",
    "version": 1
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 5186,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 5189,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 5168,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "__gap",
        "offset": 0,
        "slot": "1",
        "type": "t_array(t_uint256)50_storage"
      },
      {
        "astId": 5483,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "__gap",
        "offset": 0,
        "slot": "51",
        "type": "t_array(t_uint256)50_storage"
      },
      {
        "astId": 22826,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "datasetsCount",
        "offset": 0,
        "slot": "101",
        "type": "t_uint64"
      },
      {
        "astId": 22831,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "datasets",
        "offset": 0,
        "slot": "102",
        "type": "t_mapping(t_uint64,t_struct(Dataset)35048_storage)"
      },
      {
        "astId": 22833,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "governanceAddress",
        "offset": 0,
        "slot": "103",
        "type": "t_address"
      },
      {
        "astId": 22836,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "roles",
        "offset": 0,
        "slot": "104",
        "type": "t_contract(IRoles)20939"
      },
      {
        "astId": 22839,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "escrow",
        "offset": 0,
        "slot": "105",
        "type": "t_contract(IEscrow)20655"
      },
      {
        "astId": 22842,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "datasetsProof",
        "offset": 0,
        "slot": "106",
        "type": "t_contract(IDatasetsProof)21424"
      },
      {
        "astId": 22847,
        "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
        "label": "__gap",
        "offset": 0,
        "slot": "107",
        "type": "t_array(t_uint256)32_storage"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_uint256)32_storage": {
        "base": "t_uint256",
        "encoding": "inplace",
        "label": "uint256[32]",
        "numberOfBytes": "1024"
      },
      "t_array(t_uint256)50_storage": {
        "base": "t_uint256",
        "encoding": "inplace",
        "label": "uint256[50]",
        "numberOfBytes": "1600"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_contract(IDatasetsProof)21424": {
        "encoding": "inplace",
        "label": "contract IDatasetsProof",
        "numberOfBytes": "20"
      },
      "t_contract(IEscrow)20655": {
        "encoding": "inplace",
        "label": "contract IEscrow",
        "numberOfBytes": "20"
      },
      "t_contract(IRoles)20939": {
        "encoding": "inplace",
        "label": "contract IRoles",
        "numberOfBytes": "20"
      },
      "t_enum(State)35003": {
        "encoding": "inplace",
        "label": "enum DatasetType.State",
        "numberOfBytes": "1"
      },
      "t_mapping(t_uint64,t_struct(Dataset)35048_storage)": {
        "encoding": "mapping",
        "key": "t_uint64",
        "label": "mapping(uint64 => struct DatasetType.Dataset)",
        "numberOfBytes": "32",
        "value": "t_struct(Dataset)35048_storage"
      },
      "t_string_storage": {
        "encoding": "bytes",
        "label": "string",
        "numberOfBytes": "32"
      },
      "t_struct(Dataset)35048_storage": {
        "encoding": "inplace",
        "label": "struct DatasetType.Dataset",
        "members": [
          {
            "astId": 35044,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "metadata",
            "offset": 0,
            "slot": "0",
            "type": "t_struct(Metadata)35041_storage"
          },
          {
            "astId": 35047,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "state",
            "offset": 0,
            "slot": "8",
            "type": "t_enum(State)35003"
          }
        ],
        "numberOfBytes": "288"
      },
      "t_struct(Metadata)35041_storage": {
        "encoding": "inplace",
        "label": "struct DatasetType.Metadata",
        "members": [
          {
            "astId": 35020,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "title",
            "offset": 0,
            "slot": "0",
            "type": "t_string_storage"
          },
          {
            "astId": 35022,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "industry",
            "offset": 0,
            "slot": "1",
            "type": "t_string_storage"
          },
          {
            "astId": 35024,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "name",
            "offset": 0,
            "slot": "2",
            "type": "t_string_storage"
          },
          {
            "astId": 35026,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "description",
            "offset": 0,
            "slot": "3",
            "type": "t_string_storage"
          },
          {
            "astId": 35028,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "source",
            "offset": 0,
            "slot": "4",
            "type": "t_string_storage"
          },
          {
            "astId": 35030,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "accessMethod",
            "offset": 0,
            "slot": "5",
            "type": "t_string_storage"
          },
          {
            "astId": 35032,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "submitter",
            "offset": 0,
            "slot": "6",
            "type": "t_address"
          },
          {
            "astId": 35034,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "createdBlockNumber",
            "offset": 20,
            "slot": "6",
            "type": "t_uint64"
          },
          {
            "astId": 35036,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "sizeInBytes",
            "offset": 0,
            "slot": "7",
            "type": "t_uint64"
          },
          {
            "astId": 35038,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "isPublic",
            "offset": 8,
            "slot": "7",
            "type": "t_bool"
          },
          {
            "astId": 35040,
            "contract": "src/v0.8/module/dataset/Datasets.sol:Datasets",
            "label": "version",
            "offset": 9,
            "slot": "7",
            "type": "t_uint64"
          }
        ],
        "numberOfBytes": "256"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint64": {
        "encoding": "inplace",
        "label": "uint64",
        "numberOfBytes": "8"
      },
      "t_uint8": {
        "encoding": "inplace",
        "label": "uint8",
        "numberOfBytes": "1"
      }
    }
  }
}