docs: public void restore(ObjectInputStream dis, int dataVersion)
    throws SevereMessageStoreException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(
          tc, "restore", new Object[] { dis, new Integer(dataVersion) });
  
      itemStream = (ProtocolItemStream) getItemStream();
      
      persistent = true;    
  
      try
      {      
        //read back the cellule
        byte[] celluleBytes = new byte[9];
        dis.read(celluleBytes, 0, 9);
        remoteMEUuid = new MessagingEngine(celluleBytes).getUuid();
        
        //read back the streamID
        byte[] streamIDBytes = new byte[12];
        dis.read(streamIDBytes, 0, 12);
        streamID = new SIBUuid12(streamIDBytes);
        
        //read back the destID
        byte[] destIDBytes = new byte[12];
        dis.read(destIDBytes, 0, 12);
        destID = new SIBUuid12(destIDBytes);
        
        //read back the busID
        byte[] busIDBytes = new byte[8];
        dis.read(busIDBytes, 0, 8);
        busID = new SIBUuid8(busIDBytes);
              
        initialData = dis.readLong();
        type = Type.getType(dis.readInt());
        
        //read back the number of subset IDs we should expect
        int numberOfSubsets = dis.readInt();
        
        // Now we've restored our persistent data, we can initialise the set.
        initialize();
        
        ReliabilitySubset[] newSubsets = new ReliabilitySubset[numberOfSubsets];
        long[] newSubsetIDs = new long[numberOfSubsets];
        
        //now go find all of the stored subsets via their IDs
        for(int i=0;i<numberOfSubsets;i++)
        {
          //get the next ID
          long subsetID = dis.readLong();
          //get the next reliability
          Reliability reliability = Reliability.getReliability(dis.readInt());
          //if the subset was properly stored, we will have a valid ID
          if(subsetID != NO_ID)
          {
            //find the subset via it's ID
            ReliabilitySubset subset = (ReliabilitySubset) getItemStream().findById(subsetID);
            if(subset != null)
            {
              //set the reliability
              subset.setReliability(reliability);
              //store the subset in a temporary array
              newSubsets[getIndex(reliability)] = subset;
            }
            else
            {
              //if we didn't find it, set the ID to NO_ID so that it will get recreated below.
              subsetID = NO_ID;
            }
          }        
          newSubsetIDs[i] = subsetID;
        }
        
        int j = 0;
        while(j<numberOfSubsets && newSubsetIDs[j] == NO_ID)
        {
          j++;
        }
  
        //loop through the current array of subsets
        for(int i=0;i<maxReliabilityIndex+1;i++)
        {
          //get the next restored subset
          ReliabilitySubset subset = null;
          Reliability reliability = null;
          if(j<numberOfSubsets)
          {
            subset = newSubsets[j];
            reliability = subset.getReliability();
          }
          //if it's reliability matches that of the current entry of the array
          if( reliability == getReliability(i))
          {
            //store the restored subset in the array
            subsets[i] = subset;
            subsetIDs[i] = newSubsetIDs[j++];
            //find the next valid restored subset
            while(j<numberOfSubsets && newSubsetIDs[j] == NO_ID)
            {
              j++;
            }
          }
        }
        
        //SIB0105.mp.6
        if (dataVersion >= PERSISTENT_VERSION)
          linkTarget = (String)dis.readObject();
      }
      catch (Exception e)
      {
        FFDCFilter.processException(
          e,
          "com.ibm.ws.sib.processor.gd.StreamSet.restore",
          "1:680:1.67",
          this);
  
        SibTr.exception(tc, e);
        SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
          new Object[] {
            "com.ibm.ws.sib.processor.gd.StreamSet",
            "1:687:1.67",
            e });
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "restore", "SIErrorException");
        
        throw new SIErrorException(
          nls.getFormattedMessage(
            "INTERNAL_MESSAGING_ERROR_CWSIP0002",
            new Object[] {
              "com.ibm.ws.sib.processor.gd.StreamSet",
              "1:697:1.67",
              e },
            null),
          e);
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "restore");
    }