@Override
	public boolean run() {
		open(); // Open files

		// Split size
		long size = file.length();
		if (verbose) Timer.showStdErr("Splitting file '" + fastqFile + "' into " + numSplits + " parts. File size: " + fileSizeStr(size) + " ( " + size + " bytes).");
		long step = size / numSplits;
		if (step < 0) error("Error: Split file size less than 1 byte!");

		// Create each split
		long start = 0, end = 0;
		for (int i = 0; i < numSplits; i++) {
			start = end; // Next byte
			end = (i + 1) * step;

			// Last split ends at file size or at record end
			if (i == (numSplits - 1)) end = size;
			else end = findRecordStart(end);

			// Perform the split
			split(i, start, end);
		}

		close();
		if (verbose) Timer.showStdErr("Done.");
		return true;
	}