diff --git a/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java b/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java new file mode 100644 index 00000000000..9bda68f1dab --- /dev/null +++ b/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java @@ -0,0 +1,144 @@ +package org.broadinstitute.hellbender.tools; + +import org.broadinstitute.barclay.argparser.*; +import org.broadinstitute.hellbender.tools.filediagnostics.CRAMIssue8768Analyzer; +import org.broadinstitute.hellbender.cmdline.CommandLineProgram; +import org.broadinstitute.hellbender.cmdline.StandardArgumentDefinitions; +import org.broadinstitute.hellbender.engine.GATKPath; +import picard.cmdline.programgroups.OtherProgramGroup; + +/** + * A diagnostic tool that analyzes a CRAM file to look for possible base corruption caused by + * GATK issue 8768. + * + *

This issue affects GATK versions 4.3.0.0 through 4.5.0.0, and is fixed in GATK 4.6.0.0.

+ * + *

This issue also affects Picard versions 2.27.3 through 3.1.1, and is fixed in Picard 3.2.0.

+ * + *

The bug is triggered when writing a CRAM file using one of the affected GATK/Picard versions, + * and both of the following conditions are met:

+ * + * + * + *

When both of these conditions are met, the resulting CRAM file may have corrupt containers containing reads + * with an incorrect sequence.

+ * + *

This tool writes a report to an output text file indicating whether the CRAM file appears to have read base corruption caused by issue 8768, + * and listing the affected containers. By default, the output report will have a summary of the average mismatch rate for all suspected bad containers + * and a few presumed good containers in order to determine if there is a large difference in the base mismatch rate.

+ * + *

Optionally, a TSV file with the same information as the textual report, but in tabular form, can be written + * using the "--output-tsv" argument.

+ * + *

To analyze the base mismatch rate for ALL containers, use the "verbose" option.

+ * + *

Works on files ending in .cram.

+ *
+ * + *

Sample Usage:

+ *
+ * gatk CRAMIssue8768Detector \
+ *     -I input.cram \
+ *     -O output_report.txt \
+ *     -R reference.fasta
+ * 
+ *
+ * gatk CRAMIssue8768Detector \
+ *     -I input.cram \
+ *     -O output_report.txt \
+ *     -R reference.fasta \
+ *     --output-tsv output_report_as_table.tsv
+ * 
+ */ +@ExperimentalFeature +@WorkflowProperties +@CommandLineProgramProperties( + summary = "Analyze a CRAM file to check for base corruption caused by GATK issue 8768", + oneLineSummary = "Analyze a CRAM file to check for base corruption caused by GATK issue 8768", + programGroup = OtherProgramGroup.class +) +public class CRAMIssue8768Detector extends CommandLineProgram { + // default average mismatch rate threshold above which we consider the file to be corrupt + private static final double DEFAULT_MISMATCH_RATE_THRESHOLD = 0.05; + + @Argument(fullName = StandardArgumentDefinitions.INPUT_LONG_NAME, + shortName = StandardArgumentDefinitions.INPUT_SHORT_NAME, + doc = "Input path of CRAM file to analyze", + common = true) + @WorkflowInput + public GATKPath inputPath; + + @Argument(fullName = StandardArgumentDefinitions.OUTPUT_LONG_NAME, + shortName = StandardArgumentDefinitions.OUTPUT_SHORT_NAME, + doc = "Output diagnostics text file", + common = true) + @WorkflowOutput + public GATKPath textOutputPath; + + public static final String OUTPUT_TSV__ARG_NAME = "output-tsv"; + @Argument(fullName = OUTPUT_TSV__ARG_NAME, + shortName = OUTPUT_TSV__ARG_NAME, + doc = "Output diagnostics tsv file", + optional = true) + @WorkflowOutput + public GATKPath tsvOutputPath; + + @Argument(fullName = StandardArgumentDefinitions.REFERENCE_LONG_NAME, + shortName = StandardArgumentDefinitions.REFERENCE_SHORT_NAME, + doc = "Reference for the CRAM file", + common = true) + @WorkflowOutput + public GATKPath referencePath; + + public static final String MISMATCH_RATE_THRESHOLD_ARG_NAME = "mismatch-rate-threshold"; + @Argument(fullName = MISMATCH_RATE_THRESHOLD_ARG_NAME, + shortName = MISMATCH_RATE_THRESHOLD_ARG_NAME, + doc = "Mismatch rate threshold above which we consider the file to be corrupt", + optional = true) + public double mismatchRateThreshold = DEFAULT_MISMATCH_RATE_THRESHOLD; + + public static final String VERBOSE_ARG_NAME = "verbose"; + @Argument(fullName = VERBOSE_ARG_NAME, + shortName= VERBOSE_ARG_NAME, + doc="Calculate and print the mismatch rate for all containers", + optional=true) + public boolean verbose = false; + + public static final String ECHO_ARG_NAME = "echo-to-stdout"; + @Argument(fullName = ECHO_ARG_NAME, + shortName= ECHO_ARG_NAME, + doc="Echo text output to stdout", + optional=true) + public boolean echoToStdout = false; + + private CRAMIssue8768Analyzer cramAnalyzer; + + @Override + protected Object doWork() { + cramAnalyzer = new CRAMIssue8768Analyzer( + inputPath, + textOutputPath, + tsvOutputPath, + referencePath, + mismatchRateThreshold, + verbose, + echoToStdout); + cramAnalyzer.doAnalysis(); + return cramAnalyzer.getRetCode(); + } + + @Override + protected void onShutdown() { + if ( cramAnalyzer != null ) { + try { + cramAnalyzer.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } +} + diff --git a/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java b/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java index 76a0410c777..83703d9f46d 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java @@ -8,8 +8,6 @@ import org.broadinstitute.hellbender.tools.filediagnostics.HTSAnalyzerFactory; import picard.cmdline.programgroups.OtherProgramGroup; -import java.io.File; - /** * A diagnostic tool that prints meta information about a GATK input file. * @@ -43,8 +41,8 @@ public class PrintFileDiagnostics extends CommandLineProgram { doc = "Outut file for diagnostics (must be a local file)", optional = false, common = true) - @WorkflowInput - public File outputFile; + @WorkflowOutput + public GATKPath outputPath; @Argument(shortName="count-limit", fullName="count-limit", @@ -56,7 +54,7 @@ public class PrintFileDiagnostics extends CommandLineProgram { @Override protected void onStartup() { super.onStartup(); - htsAnalyzer = HTSAnalyzerFactory.getFileAnalyzer(inputPath, outputFile, countLimit); + htsAnalyzer = HTSAnalyzerFactory.getFileAnalyzer(inputPath, outputPath, countLimit); } @Override diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java index 1de153092ae..c088ff7abcd 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java @@ -11,16 +11,17 @@ */ public class BAIAnalyzer extends HTSAnalyzer { - public BAIAnalyzer(final GATKPath inputPath, final File outputFile) { - super(inputPath, outputFile); + public BAIAnalyzer(final GATKPath inputPath, final GATKPath outputPath) { + super(inputPath, outputPath); } /** * Run the analyzer for the file. */ protected void doAnalysis() { - System.out.println(String.format("\nOutput written to %s\n", outputFile)); - BAMIndexer.createAndWriteIndex(inputPath.toPath().toFile(), outputFile, true); + System.out.println(String.format("\nOutput written to %s\n", outputPath)); + // note this method is not nio aware + BAMIndexer.createAndWriteIndex(inputPath.toPath().toFile(), new File(outputPath.getRawInputString()), true); } @Override diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java index dcbe8109938..9fb12ae9d35 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java @@ -5,23 +5,22 @@ import htsjdk.samtools.util.RuntimeIOException; import org.broadinstitute.hellbender.engine.GATKPath; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; +import java.nio.file.Files; /** * Analyzer for CRAM (.crai) index files. */ public class CRAIAnalyzer extends HTSAnalyzer { - final FileOutputStream fos; + final OutputStream fos; - public CRAIAnalyzer(final GATKPath inputPath, final File outputFile) { - super(inputPath, outputFile); + public CRAIAnalyzer(final GATKPath inputPath, final GATKPath outputPath) { + super(inputPath, outputPath); try { - fos = new FileOutputStream(outputFile); + fos = Files.newOutputStream(outputPath.toPath()); } catch (final IOException e) { + throw new RuntimeIOException(e); } } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java index 76933277e99..a6d473fe10a 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java @@ -11,14 +11,11 @@ import htsjdk.samtools.util.RuntimeIOException; import org.broadinstitute.hellbender.engine.GATKPath; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.file.Files; import java.util.Base64; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -36,13 +33,13 @@ public class CRAMAnalyzer extends HTSAnalyzer { long coreBlocksDataSize = 0L; long recordCount = 0; final long countLimit; - final FileOutputStream fos; + final OutputStream fos; - public CRAMAnalyzer(final GATKPath inputPathName, final File outputFile, final long countLimit) { - super(inputPathName, outputFile); + public CRAMAnalyzer(final GATKPath inputPathName, final GATKPath outputPath, final long countLimit) { + super(inputPathName, outputPath); this.countLimit = countLimit; try { - fos = new FileOutputStream(outputFile); + fos = Files.newOutputStream(outputPath.toPath()); } catch (final IOException e) { throw new RuntimeIOException(e); } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java new file mode 100644 index 00000000000..366666a9eab --- /dev/null +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java @@ -0,0 +1,435 @@ +package org.broadinstitute.hellbender.tools.filediagnostics; + +import htsjdk.samtools.SAMFileHeader; +import htsjdk.samtools.SAMRecord; +import htsjdk.samtools.SAMSequenceDictionary; +import htsjdk.samtools.ValidationStringency; +import htsjdk.samtools.cram.build.CRAMReferenceRegion; +import htsjdk.samtools.cram.build.CramIO; +import htsjdk.samtools.cram.ref.ReferenceContext; +import htsjdk.samtools.cram.ref.ReferenceSource; +import htsjdk.samtools.cram.structure.*; +import htsjdk.samtools.seekablestream.SeekablePathStream; +import htsjdk.samtools.util.RuntimeIOException; +import htsjdk.samtools.util.SequenceUtil; +import htsjdk.samtools.util.Tuple; +import org.broadinstitute.hellbender.engine.GATKPath; +import org.broadinstitute.hellbender.utils.tsv.DataLine; +import org.broadinstitute.hellbender.utils.tsv.TableColumnCollection; +import org.broadinstitute.hellbender.utils.tsv.TableWriter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.util.*; + +/** + * A diagnostic class that analyzes a CRAM input file to look for conditions that trigger issue 8768. + */ +public class CRAMIssue8768Analyzer extends HTSAnalyzer { + private final ReferenceSource referenceSource; + private final OutputStream outputStream; + private final CompressorCache compressorCache = new CompressorCache(); + private final boolean verbose; + private final boolean echoToConsole; + private final double mismatchRateThreshold; + private final GATKPath tsvOutputPath; + private int retCode = 0; + + private SAMFileHeader samHeader = null; + + // everything we need to record for a bad contig + private record BadContig( + String contigName, + List badContainers + ) { } + + // everything we need to record for a (good or bad) container + private record ContainerStats( + int containerOrdinal, // container ordinal # within the contig + boolean isBad, // true if this container is bad + AlignmentContext alignmentContext, // reference ID, alignment start, alignment span + long misMatchCount, // count of mismatched bases + double misMatchRate // rate of mismatched bases (mismatches/total bases) + ) { } + + public CRAMIssue8768Analyzer( + final GATKPath inputPath, + final GATKPath textOutputPath, + final GATKPath tsvOutputPath, + final GATKPath referencePath, + final double mismatchRateThreshold, + final boolean verbose, + final boolean echoToConsole) { + super(inputPath, textOutputPath); + this.verbose = verbose; + this.echoToConsole = echoToConsole; + this.tsvOutputPath = tsvOutputPath; + this.mismatchRateThreshold = mismatchRateThreshold; + + referenceSource = new ReferenceSource(referencePath.toPath()); + try { + outputStream = Files.newOutputStream(this.outputPath.toPath()); + } catch (final IOException e) { + throw new RuntimeIOException(e); + } + } + + @Override + public void close() throws IOException { + if (outputStream != null) { + outputStream.close(); + } + } + + public int getRetCode() { + return retCode; + } + protected void emitln(final String s) { + try { + outputStream.write(s.getBytes()); + outputStream.write('\n'); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Some background: + * + * Each CRAM container has an associated htsjdk AlignmentContext that models if/how the contents of the + * container relates to the reference. An AlignmentContext includes a ReferenceContext, and depending on the + * type of the ReferenceContext, possibly an alignment start and alignment span. There are 3 possible types of + * ReferenceContexts: + * + * 1. SINGLE_REF: The container contains only reads that are mapped to a single reference contig, in which case + * the referenceID for that ReferenceContext is the contig ID for the associated contig. This is the most + * common case, and is the only type of ReferenceContext for which the alignment start and span are meaningful. + * Call isMappedSingleRef() to determine if the ReferenceContext is SINGLE_REF. + * + * Note that it is an error (the code throws) to you attempt to query a ReferenceContext for it's contig ID if + * the ReferenceContext is not SINGLE_REF. + * + * 2. MULTI_REF: The container contains reads that are mapped to more than one reference contig. This is an + * optimization used primarily when there aren't enough reads mapped to a single reference contig to justify + * putting the reads into a separate container. Reads in these containers are not reference compressed, and + * AlignmentContexts for MULTI_REF containers have no meaningful start/span values. Call isMappedMultiRef() to + * determine if the ReferenceContext is MULTI_REF. + * + * 3. UNMAPPED_UNPLACED: The container contains only unmapped unplaced reads. start/span are irrelevant. Call + * isUnmappedUnplaced() to determine if the ReferenceContext is UNMAPPED_UNPLACED. + */ + public void doAnalysis() { + final Map badContigs = new LinkedHashMap<>(); // contig name, BadContig + final List goodContainers = new ArrayList<>(); // good containers, for all contigs + int containerOrdinalForContig = 0; + final int NUMBER_OF_GOOD_CONTAINERS_PER_CONTIG_TO_REPORT = 4; + int nGoodContainersReportedForContig = 0; + + // these are HTSJDK CRAM container alignment contexts, not the GATK kind you're thinking of + AlignmentContext previousAlignmentContext = null; + + try (final SeekablePathStream seekableStream = new SeekablePathStream(this.inputPath.toPath())) { + List badContainersForContig = new ArrayList<>(); + final CramHeader cramHeader = analyzeCRAMHeader(seekableStream); + samHeader = Container.readSAMFileHeaderContainer( + cramHeader.getCRAMVersion(), + seekableStream, + inputPath.getRawInputString()); + + // iterate through the containers looking for ones with alignment spans that trigger the issue + for (boolean isEOF = false; !isEOF;) { + final Container container = new Container( + cramHeader.getCRAMVersion(), + seekableStream, + seekableStream.position()); + containerOrdinalForContig++; + + // reject CRAMs with properties that clearly indicate they were not written by GATK/Picard + if (isForeignCRAM(container)) { + return; + } + + if (previousAlignmentContext == null) { + // first container in the whole file can't be bad + recordContainerStats(goodContainers, false, container, containerOrdinalForContig); + nGoodContainersReportedForContig++; + } else if (!previousAlignmentContext.getReferenceContext().equals( + container.getAlignmentContext().getReferenceContext())) { + // this is the first container for a new reference context; emit any bad containers accumulated + // for the previous reference context/contig, and reset state for the next one + if (badContainersForContig.size() > 0) { + recordContigStats(badContigs, badContainersForContig, previousAlignmentContext); + badContainersForContig = new ArrayList<>(); + } + containerOrdinalForContig = 1; + // the first container for a reference context is never bad, so always add it to the good list + recordContainerStats(goodContainers, false, container, containerOrdinalForContig); + nGoodContainersReportedForContig = 1; + } else if (previousAlignmentContext.getReferenceContext().isMappedSingleRef() && + (previousAlignmentContext.getAlignmentStart() == 1)) { + // we're on the same reference context as the previous container, and the previous container + // was mapped to position 1, so if this container is mapped, it's a candidate for bad, whether + // it starts at position 1 (the rare case where there is more than one bad container) or not + // (the common case where this is the one bad container for this contig) + recordContainerStats(badContainersForContig, true, container, containerOrdinalForContig); + } else { + // we're on the same reference context as the previous container, and the previous container + // was NOT mapped to position 1, so this container is not bad - add it to the list of good + // containers + if (verbose || nGoodContainersReportedForContig < NUMBER_OF_GOOD_CONTAINERS_PER_CONTIG_TO_REPORT) { + recordContainerStats(goodContainers, false,container, containerOrdinalForContig); + nGoodContainersReportedForContig++; + } + } + + previousAlignmentContext = new AlignmentContext( + container.getAlignmentContext().getReferenceContext(), + container.getAlignmentContext().getAlignmentStart(), + container.getAlignmentContext().getAlignmentSpan()); + isEOF = container.isEOF(); + } + } + catch (IOException e) { + throw new RuntimeIOException(e); + } + + retCode = printTextResults(badContigs, goodContainers); + if (tsvOutputPath != null) { + printTSVResults(badContigs, goodContainers, tsvOutputPath); + } + } + + /** + * Display metadata for a CRAM file header. + */ + private CramHeader analyzeCRAMHeader(InputStream is) { + final CramHeader cramHeader = CramIO.readCramHeader(is); + emitln("CRAM File Name: " + inputPath.toPath().getFileName()); + emitln("CRAM Version: " + cramHeader.getCRAMVersion().toString()); + emitln("CRAM ID Contents: " + String.format("%s", Base64.getEncoder().encodeToString(cramHeader.getId()))); + return cramHeader; + } + + // reject any inputs that have containers that are reference-less; have multiple slices per container; + // or have slices with an embedded reference, since these indicate that the file was not written by GATK/Picard. + // it is in theory possible that the file could have been written by some other client of htsjdk (i.e., the + // htsjdk tests can write such file), but analyzing such files is beyond the scope of this tool + private boolean isForeignCRAM(final Container container) { + final List slices = container.getSlices(); + if (slices.size() > 1 ) { + emitln("Multi-slice container detected. This file was not written by GATK or Picard."); + return true; + } else if (container.getAlignmentContext().getReferenceContext().isMappedSingleRef() && + !container.getCompressionHeader().isReferenceRequired()) { + emitln("Reference-less container detected. This file was not written by GATK or Picard."); + return true; + } + for (final Slice slice : slices) { + if (slice.getEmbeddedReferenceContentID() != Slice.EMBEDDED_REFERENCE_ABSENT_CONTENT_ID) { + emitln(String.format("Embedded reference block (ID %d) detected. This file was not written by GATK or Picard.", + slice.getEmbeddedReferenceContentID())); + return true; + } + } + return false; + } + + private void recordContainerStats( + final List targetList, + final boolean isBad, + final Container container, + final int containerOrdinal) { + // don't even try to compute stats for unmapped-unplaced containers or multi-ref containers + if (container.getAlignmentContext().getReferenceContext().isMappedSingleRef()) { + final Tuple containerStats = analyzeContainerBaseMismatches(container); + targetList.add(new ContainerStats( + containerOrdinal, + isBad, + container.getAlignmentContext(), + containerStats.a, // mismatches + containerStats.b)); // mismatchPercent + } + } + + private void recordContigStats( + final Map badContigs, + final List badContainers, + final AlignmentContext previousAlignmentContext) { + if (null != badContigs.putIfAbsent( + previousAlignmentContext.getReferenceContext().toString(), + new BadContig( + previousAlignmentContext.getReferenceContext().toString(), + badContainers))) { + throw new IllegalStateException( + String.format( + "Attempt to add a bad contig (%s) more than once", + previousAlignmentContext.getReferenceContext().toString())); + } + } + + /** + * Analyze base mismatches CRAM file container. + * return true if container is EOF container + */ + private Tuple analyzeContainerBaseMismatches(final Container container) { + final SAMSequenceDictionary sequenceDictionary = samHeader.getSequenceDictionary(); + final List actualSAMRecords = container.getSAMRecords( + ValidationStringency.LENIENT, + new CRAMReferenceRegion(referenceSource, samHeader.getSequenceDictionary()), + compressorCache, + samHeader); + + final CRAMReferenceRegion localReferenceRegion = new CRAMReferenceRegion(referenceSource, sequenceDictionary); + // SequenceUtil.countMismatches wants the full contig's reference bases + localReferenceRegion.fetchReferenceBases(container.getAlignmentContext().getReferenceContext().getReferenceContextID()); + final byte referenceBases[] = localReferenceRegion.getCurrentReferenceBases(); + + long totalBases = 0; + long misMatches = 0; + for (SAMRecord samRec : actualSAMRecords) { + totalBases += (long) samRec.getReadLength(); + misMatches += (long) SequenceUtil.countMismatches(samRec, referenceBases); + } + return new Tuple<>(totalBases, misMatches/(double) totalBases); + } + + private int printTextResults(final Map badContigs, final List goodContainers) { + int retCode; + if (badContigs.isEmpty()) { + final String NO_CORRUPT_CONTAINERS = "\n**********************NO CORRUPT CONTAINERS DETECTED**********************"; + emitln(NO_CORRUPT_CONTAINERS); + // always emit the results summary to console + System.out.println(NO_CORRUPT_CONTAINERS); + retCode = 0; + } else { + final String POSSIBLE_CORRUPT_CONTAINERS = "\n**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:\n"; + emitln(POSSIBLE_CORRUPT_CONTAINERS); + // always emit the results summary to console + System.out.println(POSSIBLE_CORRUPT_CONTAINERS); + retCode = 1; + } + + // before we print out the containers, print out the stats for both the good and the bad containers + final int totalGoodContainers = goodContainers.size(); + final double sumOfGoodMismatchRates = goodContainers.stream().mapToDouble(c -> c.misMatchRate).sum(); + final double averageGoodMismatchRate = sumOfGoodMismatchRates / totalGoodContainers; + final String avgGoodMismatchStr = String.format("Average mismatch rate for presumed good containers: %f", averageGoodMismatchRate); + emitln(avgGoodMismatchStr); + if (echoToConsole) { + System.out.println(avgGoodMismatchStr); + } + + if (!badContigs.isEmpty()) { + final int totalBadContainers = badContigs.values().stream().mapToInt(bc -> bc.badContainers().size()).sum(); + final double sumOfBadMismatchRates = badContigs.values().stream().mapToDouble( + bc -> bc.badContainers().stream().mapToDouble(c -> c.misMatchRate).sum()).sum(); + final double averageBadMismatchRate = sumOfBadMismatchRates / totalBadContainers; + final String avgBadMismatchStr = String.format("Average mismatch rate for suspected bad containers: %f", averageBadMismatchRate); + emitln(avgBadMismatchStr); + if (echoToConsole) { + System.out.println(avgBadMismatchStr); + } + + if (averageBadMismatchRate > mismatchRateThreshold) { + final String exceedThresholdStr = String.format( + "The average base mismatch rate of %f for suspected bad containers exceeds the threshold rate of %1.2f, and indicates this file may be corrupt.", + averageBadMismatchRate, + mismatchRateThreshold); + emitln(exceedThresholdStr); + if (echoToConsole) { + System.out.println(exceedThresholdStr); + } + } + + // now emit the list of corrupt containers for each bad contig + emitln("\nSuspected CORRUPT Containers:"); + for (final Map.Entry entry : badContigs.entrySet()) { + for (final ContainerStats badContainer : entry.getValue().badContainers()) { + final String badStatStr = String.format(" Ordinal: %d (%s) Mismatch Rate/Count: %f/%d", + badContainer.containerOrdinal, + badContainer.alignmentContext.toString(), + badContainer.misMatchRate, + badContainer.misMatchCount); + emitln(badStatStr); + if (echoToConsole) { + System.out.println(badStatStr); + } + } + } + } + + emitln("\nPresumed GOOD Containers:"); + int lastContig = ReferenceContext.UNINITIALIZED_REFERENCE_ID; + for (final ContainerStats goodContainer : goodContainers) { + if (lastContig != ReferenceContext.UNINITIALIZED_REFERENCE_ID && + lastContig != goodContainer.alignmentContext.getReferenceContext().getReferenceContextID()) { + emitln(""); + if (echoToConsole) { + System.out.println(""); + } + } + lastContig = goodContainer.alignmentContext.getReferenceContext().getReferenceContextID(); + final String goodDetailStr = String.format(" Ordinal: %d (%s) Mismatch Rate/Count: %f/%d", + goodContainer.containerOrdinal, + goodContainer.alignmentContext.toString(), + goodContainer.misMatchRate, + goodContainer.misMatchCount); + emitln(goodDetailStr); + if (echoToConsole) { + System.out.println(goodDetailStr); + } + } + return retCode; + } + + // write the results out to a machine-readable tsv file + private void printTSVResults( + final Map badContigs, + final List goodContainers, + final GATKPath tsvOutputPath) { + // File name, contig name, container ordinal, good or bad, mismatch rate + final TableColumnCollection columnNames = new TableColumnCollection( + "file_name", // file name + "contig_name", // contig name + "container_ordinal", // container ordinal + "container_is_bad", // good or bad, 1 or 0 + "mismatch_rate", // mismatch rate (double) + "alignment_start", // alignment start (int) + "alignment_span" // alignment span (int) + ); + + try (final TableWriter tsvWriter = new TableWriter<>(tsvOutputPath.toPath(), columnNames) { + @Override + protected void composeLine(final ContainerStats containerStats, final DataLine dataLine) { + dataLine.set("file_name", inputPath.toPath().getFileName().toString()) + .set("contig_name", samHeader.getSequenceDictionary().getSequence(containerStats.alignmentContext.getReferenceContext().getReferenceContextID()).getSequenceName()) + .set("container_ordinal", containerStats.containerOrdinal) + .set("container_is_bad", containerStats.isBad ? 1 : 0) + .set("mismatch_rate", containerStats.misMatchRate) + .set("alignment_start", containerStats.alignmentContext.getAlignmentStart()) + .set("alignment_span", containerStats.alignmentContext.getAlignmentSpan()); + } + }) + { + tsvWriter.writeHeaderIfApplies(); + if (badContigs.isEmpty()) { + tsvWriter.writeComment("No bad containers detected"); + } else { + tsvWriter.writeComment("Bad containers:"); + for (final Map.Entry entry : badContigs.entrySet()) { + tsvWriter.writeAllRecords(entry.getValue().badContainers()); + } + } + if (goodContainers.isEmpty()) { + tsvWriter.writeComment("No good mapped containers detected"); + } else { + tsvWriter.writeComment("Good containers:"); + tsvWriter.writeAllRecords(goodContainers); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java index 8339dfaccc4..8a0145b9307 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java @@ -4,7 +4,6 @@ import org.broadinstitute.hellbender.engine.GATKPath; import java.io.Closeable; -import java.io.File; import java.io.IOException; /** @@ -13,11 +12,11 @@ public abstract class HTSAnalyzer implements Closeable { protected GATKPath inputPath; - protected File outputFile; + protected GATKPath outputPath; - public HTSAnalyzer(final GATKPath filePath, final File outputFile) { + public HTSAnalyzer(final GATKPath filePath, final GATKPath outputPath) { this.inputPath = filePath; - this.outputFile = outputFile; + this.outputPath = outputPath; } /** diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java index d58438a7b61..b987a72cb37 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java @@ -3,21 +3,19 @@ import htsjdk.samtools.util.FileExtensions; import org.broadinstitute.hellbender.engine.GATKPath; -import java.io.File; - /** * Class for creating an analyzer based on an alignment file type. */ public class HTSAnalyzerFactory { - public static HTSAnalyzer getFileAnalyzer(final GATKPath inputPath, final File outputFile, final long countLimit) { + public static HTSAnalyzer getFileAnalyzer(final GATKPath inputPath, final GATKPath outputPath, final long countLimit) { System.out.println(inputPath.getRawInputString()); if (inputPath.isCram()) { - return new CRAMAnalyzer(inputPath, outputFile, countLimit); + return new CRAMAnalyzer(inputPath, outputPath, countLimit); } else if (inputPath.hasExtension(FileExtensions.CRAM_INDEX)) { - return new CRAIAnalyzer(inputPath, outputFile); + return new CRAIAnalyzer(inputPath, outputPath); } else if (inputPath.hasExtension(FileExtensions.BAI_INDEX)) { - return new BAIAnalyzer(inputPath, outputFile); + return new BAIAnalyzer(inputPath, outputPath); } else { throw new RuntimeException("Unsupported diagnostic file type: " + inputPath.getRawInputString()); } diff --git a/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java b/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java new file mode 100644 index 00000000000..e6ac34b8cdf --- /dev/null +++ b/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java @@ -0,0 +1,125 @@ +package org.broadinstitute.hellbender.tools; + +import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.hellbender.CommandLineProgramTest; +import org.broadinstitute.hellbender.testutils.ArgumentsBuilder; +import org.broadinstitute.hellbender.testutils.IntegrationTestSpec; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class CRAMIssue8768DetectorIntegrationTest extends CommandLineProgramTest { + + @DataProvider(name = "cramAnalysisTestCases") + public Object[][] getFileDiagnosticsTestCases() { + return new Object[][]{ + // local file tests + { + // test file created by rewriting the htsjdk test file + // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram, using a version + // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768. the rewrite causes + // the file to have corrupt read bases, so we can use it to test the detector + // 1 bad container + "src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram", + "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa", + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")), + "src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt", + "src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv", + }, + { + // test file created by rewriting the htsjdk test file + // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram, using a version + // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768. the rewrite causes + // the file to have corrupt read bases, so we can use it to test the detector + // 1 bad container + "src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram", + "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa", + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "true")), + "src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt", + "src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv", + }, + { + // 0 bad containers + NA12878_20_21_WGS_cram, + b37_reference_20_21, + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")), + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt", + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv", + }, + { + // 0 bad containers + NA12878_20_21_WGS_cram, + b37_reference_20_21, + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "true")), + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt", + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv", + }, + { + // test file created by rewriting the htsjdk test file + // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram using a version + // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768, along with code + // to force the file to have 2 bad containers by forcing numerous reads to be aligned to + // position 1. + // 2 bad containers + "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram", + "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa", + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")), + "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt", + "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv", + }, + { + // test file created by rewriting the htsjdk test file + // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram using a version + // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768, along with code + // to force the file to have 2 bad containers by forcing numerous reads to be aligned to + // position 1. + // 3 bad containers + "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram", + "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa", + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")), + "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt", + "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv", + }, + // cloud file test + { + // 0 bad containers + "gs://hellbender/test/resources/large/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram", + "gs://hellbender/test/resources/large/human_g1k_v37.20.21.fasta", + List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")), + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt", + "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv", + }, + }; + } + + @Test(dataProvider = "cramAnalysisTestCases", groups={"cloud"}) + public void testCramAnalysis( + final String inputPath, + final String referencePath, // unused for now + final List> extraArgs, + final String expectedTextOutputPath, + final String expectedTSVOutputPath) throws IOException { + final File outTextFile = createTempFile("testFileDiagnostics", ".txt"); + final File outTSVFile = expectedTSVOutputPath == null ? null : createTempFile("testFileDiagnostics", ".tsv"); + ArgumentsBuilder argBuilder = new ArgumentsBuilder(); + argBuilder.addInput(inputPath); + argBuilder.addOutput(outTextFile); + argBuilder.addReference(referencePath); + if (outTSVFile != null) { + argBuilder.add(CRAMIssue8768Detector.OUTPUT_TSV__ARG_NAME, outTSVFile.getAbsolutePath()); + } + if (extraArgs != null) { + extraArgs.forEach(argPair -> argBuilder.add(argPair.getKey(), argPair.getValue())); + } + runCommandLine(argBuilder.getArgsList()); + + IntegrationTestSpec.assertEqualTextFiles(outTextFile, new File(expectedTextOutputPath)); + if (outTSVFile != null) { + IntegrationTestSpec.assertEqualTextFiles(outTSVFile, new File(expectedTSVOutputPath)); + } + } + +} diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv new file mode 100644 index 00000000000..5155b23ec65 --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv @@ -0,0 +1,11 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#No bad containers detected +#Good containers: +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937 diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt new file mode 100644 index 00000000000..0c9b47663d6 --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt @@ -0,0 +1,17 @@ +CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram +CRAM Version: 2.1 +CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA= + +**********************NO CORRUPT CONTAINERS DETECTED********************** +Average mismatch rate for presumed good containers: 0.005615 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000 + + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000 diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv new file mode 100644 index 00000000000..5155b23ec65 --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv @@ -0,0 +1,11 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#No bad containers detected +#Good containers: +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937 diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt new file mode 100644 index 00000000000..0c9b47663d6 --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt @@ -0,0 +1,17 @@ +CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram +CRAM Version: 2.1 +CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA= + +**********************NO CORRUPT CONTAINERS DETECTED********************** +Average mismatch rate for presumed good containers: 0.005615 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000 + + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000 diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv new file mode 100644 index 00000000000..ac064bf09bf --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv @@ -0,0 +1,64 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#No bad containers detected +#Good containers: +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 5 0 0.0026405940594059407 10043410 11007 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 6 0 0.0023297029702970297 10054316 11415 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 7 0 0.004123762376237624 10065630 11707 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 8 0 0.0029712871287128715 10077236 10857 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 9 0 0.004207920792079208 10087992 12022 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 10 0 0.004023762376237624 10099914 11455 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 11 0 0.0033594059405940594 10111269 11677 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 12 0 0.0032445544554455447 10122847 11517 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 13 0 0.0025287128712871286 10134264 10812 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 14 0 0.0028118811881188118 10144976 11737 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 15 0 0.0027811881188118813 10156616 11103 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 16 0 0.003216831683168317 10167620 10903 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 17 0 0.0033316831683168316 10178422 10654 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 18 0 0.0028544554455445545 10188975 12280 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 19 0 0.002307920792079208 10201162 10498 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 20 0 0.0033574257425742575 10211560 11415 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 21 0 0.002822772277227723 10222875 10825 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 22 0 0.003494059405940594 10233602 11012 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 23 0 0.003443653463400968 10244514 5587 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 5 0 0.0074524752475247525 10023629 6933 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 6 0 0.009954455445544555 10030464 54819 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 7 0 0.027154455445544554 10085182 1209 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 8 0 0.010437623762376237 10086291 1849 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 9 0 0.007101980198019802 10088040 4846 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 10 0 0.0076544554455445545 10092786 5025 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 11 0 0.007856435643564356 10097710 4565 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 12 0 0.008387128712871287 10102174 5112 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 13 0 0.008465346534653466 10107185 4822 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 14 0 0.006217821782178218 10111906 4648 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 15 0 0.006370297029702971 10116453 5595 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 16 0 0.006818811881188119 10121948 4596 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 17 0 0.007886138613861386 10126444 4699 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 18 0 0.008905940594059405 10131043 4025 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 19 0 0.009242574257425742 10134967 3486 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 20 0 0.008777227722772278 10138352 2580 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 21 0 0.009877227722772277 10140831 2362 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 22 0 0.007791089108910891 10143092 3693 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 23 0 0.008422772277227722 10146684 3779 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 24 0 0.008382178217821782 10150362 3205 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 25 0 0.005921782178217822 10153467 4029 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 26 0 0.006862376237623763 10157395 3564 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 27 0 0.006395049504950495 10160858 3833 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 28 0 0.00555049504950495 10164591 4631 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 29 0 0.004498019801980198 10169122 5087 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 30 0 0.00440990099009901 10174110 5846 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 31 0 0.0058465346534653465 10179857 5196 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 32 0 0.005392079207920792 10184953 3979 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 33 0 0.005116831683168317 10188831 5765 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 34 0 0.005946534653465347 10194495 3216 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 35 0 0.0058 10197610 4759 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 36 0 0.00514950495049505 10202269 3867 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 37 0 0.004726732673267326 10206036 4706 +CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 38 0 0.004119086417621911 10210641 5332 diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt new file mode 100644 index 00000000000..29f906bc803 --- /dev/null +++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt @@ -0,0 +1,70 @@ +CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram +CRAM Version: 2.1 +CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA= + +**********************NO CORRUPT CONTAINERS DETECTED********************** +Average mismatch rate for presumed good containers: 0.005962 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000 + Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 0, start=10043410, span=11007) Mismatch Rate/Count: 0.002641/1010000 + Ordinal: 6 (sequenceId=SINGLE_REFERENCE: 0, start=10054316, span=11415) Mismatch Rate/Count: 0.002330/1010000 + Ordinal: 7 (sequenceId=SINGLE_REFERENCE: 0, start=10065630, span=11707) Mismatch Rate/Count: 0.004124/1010000 + Ordinal: 8 (sequenceId=SINGLE_REFERENCE: 0, start=10077236, span=10857) Mismatch Rate/Count: 0.002971/1010000 + Ordinal: 9 (sequenceId=SINGLE_REFERENCE: 0, start=10087992, span=12022) Mismatch Rate/Count: 0.004208/1010000 + Ordinal: 10 (sequenceId=SINGLE_REFERENCE: 0, start=10099914, span=11455) Mismatch Rate/Count: 0.004024/1010000 + Ordinal: 11 (sequenceId=SINGLE_REFERENCE: 0, start=10111269, span=11677) Mismatch Rate/Count: 0.003359/1010000 + Ordinal: 12 (sequenceId=SINGLE_REFERENCE: 0, start=10122847, span=11517) Mismatch Rate/Count: 0.003245/1010000 + Ordinal: 13 (sequenceId=SINGLE_REFERENCE: 0, start=10134264, span=10812) Mismatch Rate/Count: 0.002529/1010000 + Ordinal: 14 (sequenceId=SINGLE_REFERENCE: 0, start=10144976, span=11737) Mismatch Rate/Count: 0.002812/1010000 + Ordinal: 15 (sequenceId=SINGLE_REFERENCE: 0, start=10156616, span=11103) Mismatch Rate/Count: 0.002781/1010000 + Ordinal: 16 (sequenceId=SINGLE_REFERENCE: 0, start=10167620, span=10903) Mismatch Rate/Count: 0.003217/1010000 + Ordinal: 17 (sequenceId=SINGLE_REFERENCE: 0, start=10178422, span=10654) Mismatch Rate/Count: 0.003332/1010000 + Ordinal: 18 (sequenceId=SINGLE_REFERENCE: 0, start=10188975, span=12280) Mismatch Rate/Count: 0.002854/1010000 + Ordinal: 19 (sequenceId=SINGLE_REFERENCE: 0, start=10201162, span=10498) Mismatch Rate/Count: 0.002308/1010000 + Ordinal: 20 (sequenceId=SINGLE_REFERENCE: 0, start=10211560, span=11415) Mismatch Rate/Count: 0.003357/1010000 + Ordinal: 21 (sequenceId=SINGLE_REFERENCE: 0, start=10222875, span=10825) Mismatch Rate/Count: 0.002823/1010000 + Ordinal: 22 (sequenceId=SINGLE_REFERENCE: 0, start=10233602, span=11012) Mismatch Rate/Count: 0.003494/1010000 + Ordinal: 23 (sequenceId=SINGLE_REFERENCE: 0, start=10244514, span=5587) Mismatch Rate/Count: 0.003444/513989 + + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000 + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000 + Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 1, start=10023629, span=6933) Mismatch Rate/Count: 0.007452/1010000 + Ordinal: 6 (sequenceId=SINGLE_REFERENCE: 1, start=10030464, span=54819) Mismatch Rate/Count: 0.009954/1010000 + Ordinal: 7 (sequenceId=SINGLE_REFERENCE: 1, start=10085182, span=1209) Mismatch Rate/Count: 0.027154/1010000 + Ordinal: 8 (sequenceId=SINGLE_REFERENCE: 1, start=10086291, span=1849) Mismatch Rate/Count: 0.010438/1010000 + Ordinal: 9 (sequenceId=SINGLE_REFERENCE: 1, start=10088040, span=4846) Mismatch Rate/Count: 0.007102/1010000 + Ordinal: 10 (sequenceId=SINGLE_REFERENCE: 1, start=10092786, span=5025) Mismatch Rate/Count: 0.007654/1010000 + Ordinal: 11 (sequenceId=SINGLE_REFERENCE: 1, start=10097710, span=4565) Mismatch Rate/Count: 0.007856/1010000 + Ordinal: 12 (sequenceId=SINGLE_REFERENCE: 1, start=10102174, span=5112) Mismatch Rate/Count: 0.008387/1010000 + Ordinal: 13 (sequenceId=SINGLE_REFERENCE: 1, start=10107185, span=4822) Mismatch Rate/Count: 0.008465/1010000 + Ordinal: 14 (sequenceId=SINGLE_REFERENCE: 1, start=10111906, span=4648) Mismatch Rate/Count: 0.006218/1010000 + Ordinal: 15 (sequenceId=SINGLE_REFERENCE: 1, start=10116453, span=5595) Mismatch Rate/Count: 0.006370/1010000 + Ordinal: 16 (sequenceId=SINGLE_REFERENCE: 1, start=10121948, span=4596) Mismatch Rate/Count: 0.006819/1010000 + Ordinal: 17 (sequenceId=SINGLE_REFERENCE: 1, start=10126444, span=4699) Mismatch Rate/Count: 0.007886/1010000 + Ordinal: 18 (sequenceId=SINGLE_REFERENCE: 1, start=10131043, span=4025) Mismatch Rate/Count: 0.008906/1010000 + Ordinal: 19 (sequenceId=SINGLE_REFERENCE: 1, start=10134967, span=3486) Mismatch Rate/Count: 0.009243/1010000 + Ordinal: 20 (sequenceId=SINGLE_REFERENCE: 1, start=10138352, span=2580) Mismatch Rate/Count: 0.008777/1010000 + Ordinal: 21 (sequenceId=SINGLE_REFERENCE: 1, start=10140831, span=2362) Mismatch Rate/Count: 0.009877/1010000 + Ordinal: 22 (sequenceId=SINGLE_REFERENCE: 1, start=10143092, span=3693) Mismatch Rate/Count: 0.007791/1010000 + Ordinal: 23 (sequenceId=SINGLE_REFERENCE: 1, start=10146684, span=3779) Mismatch Rate/Count: 0.008423/1010000 + Ordinal: 24 (sequenceId=SINGLE_REFERENCE: 1, start=10150362, span=3205) Mismatch Rate/Count: 0.008382/1010000 + Ordinal: 25 (sequenceId=SINGLE_REFERENCE: 1, start=10153467, span=4029) Mismatch Rate/Count: 0.005922/1010000 + Ordinal: 26 (sequenceId=SINGLE_REFERENCE: 1, start=10157395, span=3564) Mismatch Rate/Count: 0.006862/1010000 + Ordinal: 27 (sequenceId=SINGLE_REFERENCE: 1, start=10160858, span=3833) Mismatch Rate/Count: 0.006395/1010000 + Ordinal: 28 (sequenceId=SINGLE_REFERENCE: 1, start=10164591, span=4631) Mismatch Rate/Count: 0.005550/1010000 + Ordinal: 29 (sequenceId=SINGLE_REFERENCE: 1, start=10169122, span=5087) Mismatch Rate/Count: 0.004498/1010000 + Ordinal: 30 (sequenceId=SINGLE_REFERENCE: 1, start=10174110, span=5846) Mismatch Rate/Count: 0.004410/1010000 + Ordinal: 31 (sequenceId=SINGLE_REFERENCE: 1, start=10179857, span=5196) Mismatch Rate/Count: 0.005847/1010000 + Ordinal: 32 (sequenceId=SINGLE_REFERENCE: 1, start=10184953, span=3979) Mismatch Rate/Count: 0.005392/1010000 + Ordinal: 33 (sequenceId=SINGLE_REFERENCE: 1, start=10188831, span=5765) Mismatch Rate/Count: 0.005117/1010000 + Ordinal: 34 (sequenceId=SINGLE_REFERENCE: 1, start=10194495, span=3216) Mismatch Rate/Count: 0.005947/1010000 + Ordinal: 35 (sequenceId=SINGLE_REFERENCE: 1, start=10197610, span=4759) Mismatch Rate/Count: 0.005800/1010000 + Ordinal: 36 (sequenceId=SINGLE_REFERENCE: 1, start=10202269, span=3867) Mismatch Rate/Count: 0.005150/1010000 + Ordinal: 37 (sequenceId=SINGLE_REFERENCE: 1, start=10206036, span=4706) Mismatch Rate/Count: 0.004727/1010000 + Ordinal: 38 (sequenceId=SINGLE_REFERENCE: 1, start=10210641, span=5332) Mismatch Rate/Count: 0.004119/961621 diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict new file mode 100644 index 00000000000..095804921f9 --- /dev/null +++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict @@ -0,0 +1,2 @@ +@HD VN:1.0 SO:unsorted +@SQ SN:Mito LN:85779 M5:71c39cf065b8d574f636b654c274cf1b UR:file:///Users/cnorman/projects/htsjdk/testdata/htsjdk_test.fa diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa new file mode 100644 index 00000000000..8608c871beb --- /dev/null +++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa @@ -0,0 +1,1431 @@ +>Mito dna:chromosome chromosome:EF4:Mito:1:85779:1 REF +ttcataattaattttttatatatatattatattataatattaatttatattataaaaata +atatttattattaaaatatttattctcctttcggggttccggctcccgtggccgggcccc +ggaattattaattaataataaattattattaataattatttattattttatcattaaaat +atataaataaaaaatattaaaaagataaaaaaaataatgtttattctttatataaattat +atatatatatataattaattaattaattaattaattaataataaaaatataattataaat +aatataaatattattctttattaataaatatatatttatatattataaaagtatcttaat +taataaaaataaacatttaataatatgaattatatattattattattattaataaaatta +ttaataataatcaatatgaaattaataaaaatcttataaaaaagtaatgaatactccttt +ttaaaaataaaaaggggttcggtccccccccttccgtatacttacgggaggggggtccct +cactccttcttaattaaattatcttaattaaattatcttaattaaattatcttaattaaa +ttatcttaattaaattatcttaattaaattaaaaggggactttatatttataaagtaatt +atattattattattattattatttatttattttatttttattattttattatatatatta +tatattaatacagatagaagccaaaaggtcaggcgctttctttgggagaaagacctagtt +agttcgagtctatcctatctgataataatttaattaaccattaaaaaaaagtatatatat +ttatcataatatattaaattttattacattacaaatgaacacttttatttatatttataa +aaatatgaactccttcggggtccgccccgcgggggcgggccggactccatattattatta +ttataattattattataattattattataattattattataattattattataattaaag +agttttggataccaatatgatataatatgatataggaccgaaacccctcattttatcatt +tatttataatattataaataaaaaaaaatattatatattataataaaattaatatcataa +tatattatattatatattatattatatatatatatatatatattcttttataaaatttat +attcttcttattaaaattaaaaagggagcggacttttaattatatttaattatagttttt +aatcattggttgagatttcaaaataaggtataatatttatattattctttaacaaatatt +atattataaaaaaagatataatatttatattattctttaacaaatattatattataaaaa +agatataatatttatatattattattaatattatttttaagttccgaaaggagaaactta +taatttttatatcattatttattattatttttaatttcaactccttttaggtatttccat +ttaactttcagcagagactttctaattataattatatatatataaatttaaatacattta +taaaaaagtatataatataattatattatatataataatattattaaatgaagtattctt +tattattaattataggatatctggggtccattaataattattattgtaaataataataag +gaccccccccattatctaattaataaatatataaataatcattaataaatatattaataa +ttattaataaatatataaataatcattaataaatatataaataatataatatattataaa +aatataataataataatttattattaaaatataataatttattataaaaatataataatt +tattataaaaatataataataactcctttcggggttcacacctttataaataataaataa +taaataataaataataaataataaatattagtattcactaatataaaataataattataa +aaataatcattattaaaaatattattaattattaaattaaatacaattaatataatttag +ttgtttatataattttaaataatgtttatatcaatttaataaaattaaatttatagttcc +ggggcccggccacgggagccggaaccccgaaaggagtttatctatatattataataacta +tatgaatttaattattaaaaataataaaaataaggaattttaataagaagtaatatttat +tatataatatataaaaaaaatatatatatatatataaaaatatatataataagttttatt +ataatatatattaaattaattattatgaggggttcggtccctttccgggccccaattcat +ctcatctcattttatttcatttcaatatcatctaatctcatttctttatagattttacat +atatataaatataaatataagatattcacatttatatataatataatataatataataga +tattcattcctctttgattaaactaataattaataattaataattaataattaataatta +ataattattcagtagaactccttcttaaaaaggggttcggtccccctcccattagtatag +tatagggaggggtccctcactccttcggggtccgccccgcagggggcgggccggactatt +attaaataatttataatttattatttattaatatatttatataatataatataatataat +attattcatactttttattaatataatataatataatattattaatactttctcctttcg +gggttccggctcccgtggccgggccccggaactattaatataaagaaaagagtttcaatt +atttatttatttatttattttttataaaaataagtccccgccccggcggggaccccgaag +gagtattaatttaaataatttatttaatgaaattattaattataaataaaaataataatt +tttaaagatgtaatataaaaataaatataatataatttaggataattatataaaatattt +attatatatagtttttataaagagttttaaaagtgataatataatatataatatttataa +gttccggggcccggccacgggagccggaaccccgaaaggagttatttatatatatataat +tataatcttattaattatttatatatatatttaatattatttttatataattttatatta +aagtattataattatatatttaatattatttttatataattttatattatttatttattt +atttatttatttaaaaatattataatcatatatttaatattatttaatatattttatata +ttatatcttttattgatttatatatatatagatttaataaatatatatatatatatatat +ataaatattcattatatatttattattattattattatttattactattttttattatat +attaataatatatatattattagttatgggtatcctaatagtatattattatttttaata +ataatttatgatttatgtataataaataagtagggaatcggtacgaatatcgaaaggagt +tatatattattaattatttataattattttatatattattaattatttataattatttta +tatatttataattattttatatagataggttagataggatagatagtatagataggggtc +ccatttattatttacaataataattattaatgggacccggatatcttattgttattaatt +tatatattattcattattattaatatatatttaatataattaaatattatattatattat +attatattatttattaaaaaaaaatctattacttattttttttattaatatataaattat +ttatataatttatcatttttatttatatattattattttttatatataaattaatatata +tatatattatatatacttttttttttataatatatctatatatataaataaatatattat +attatatttttatataatatattattaattattattttaattttctattctattgtgggg +gtcccaattattattttcaataataattattattgggacccggatatcttcttgtttatc +atttattattttattaaatttattattatttttaatttatatttatattatataattaat +tatatcgtttatactccttcggggtccccgccggggcggggactttatattttattatat +aatatattatattcttataatatatttattgattatgttataaaatttattctatgtgtg +ctctatatatatttaatattctggttattatcacccaccccctccccctattacgtctcc +gaggtcccggtttcgtaagaaaccgggacttatatatttataaatataaatctaacttaa +ttaataatttaaataatatactttatattttataaataaaaataattataacctttttta +taattatatataataataatatatattatcaaataattattatttcttttttttctttaa +ttaattaattaattaatattttataaaaatatatttctccttacggggttccggctcccg +tagccggggcccgaaactaaataaaatatattattaataatattatataatataataata +atataataattttatataaatatatatttatatattaaattaaattataattttattatg +aaaattatatcttttttttatatttttatataataaaaatatgttatatatatattaata +ataaaaggtagtgaggattaaataaattatataataattataactcttaattataaaata +aatatatatatatatataagtatccatttccatataatcttttaataaatattaataaat +attaaaaaaaaataatattataatattttagtatataattcaataaaattcattggaggg +gtaaataataataatttactaatggcaagttatagtcttaaaggtttttattttttttat +taaattaataaaataataataccatttatatattccattatatatatatatttaataaaa +ataataatatcatttatatattttattatatattatatatattttatataaaataataat +aataaatttatatttttatatattattattaaataataataatataaataactccttcgg +ggttcggtccccacgggtccctcactccttcttaagaataaaaaggggttcggtccccct +cccgttagtacacgggagggggtctctcactccttcttaaaaaataaaaaggtggaagga +ctaatataattttaaataataattaatactttaataataatttgtatttctttattatta +atatattaaatataataataattaatataattacaatatattaatattatcaaatattaa +taaatatacttttttatataatttatttatttatttattttttttttattaaactaatta +taattgtaatttcgaaaagggggtgggagtaaacatatataatttataatctatatatat +atatatataattttttaataaatattaataaatatttataaaaagaataatttatattta +taatatataatttatatattttatttttattatacaattaatataaaatataaaatatta +aatattaaatattaaatattaaatattaaatattaatttttataggggttatataataat +tatatttataattatataatattaaaaagggtatttttataattattacatttttatttt +atttataaaaatattaattttaataagtattgaatactttatataatataaatattaatt +acataattaataattaaataatatttaataatattatttaaatttattatttataattat +ttatttataaaattctatttttattattattatttttattttattattaaagattaatat +aataattattaatatattaaaaatcttttattatattaatatttataaaaaagtatttaa +taaaaaagatgtataaatttataaattatataatattattaatttatataataataatat +tataactttgtgattgtcaatttagttaatcattgttattaataaaggaaagatataaaa +aatattctccttcttaaaaaggggttcggttcccccccgtaaggggggggtccctcactc +ctttggtcggactccttcggggtccgccccgcgggggcgggccggactaatttaactttt +aatattaatattaatattatttatatttttaatatataaaaataaataattttattttta +ttaatagtatattatataaacaataaaatagtattaattatataaaatttatataaaata +tatataaatttattatatatatatatattaatattttaataaagtttttattataaattt +atttatttatttattataatattaataatttatttattattatataagtaataaataata +gttttatataataataataatatatatatatatatattattatattagttatataataag +gaaaagtaaaaaatttataagaatatgatgttggttcagattaagcgctaaataaggaca +tgacacatgcgaatcatacgtttattattgataagataataaatatgtggtgtaaacgtg +agtaattttattaggaattaatgaactatagaataagctaaatacttaatatattattat +ataaaaataatttatataataaaaaggatatatatataatatatatttatctatagtcaa +gccaataatggtttaggtagtaggtttattaagagttaaacctagccaacgatccataat +cgataatgaaagttagaacgatcacgttgactctgaaatatagtcaatatctataagata +cagcagtgaggaatattggacaatgatcgaaagattgatccagttacttattaggatgat +atataaaaatattttattttatttataaatattaaatatttataataataataataataa +tatatatatataaattgattaaaaataaaatccataaataattaaaataatgatattaat +taccatatatatttttatatggatatatatattaataataatattaattttattattatt +aataatatattttaatagtcctgactaatatttgtgccagcagtcgcggtaacacaaaga +gggcgagcgttaatcataatggtttaaaggatccgtagaatgaattatatattataattt +agagttaataaaatataattaaagaattataatagtaaagatgaaataataataataatt +ataagactaatatatgtgaaaatattaattaaatattaactgacattgagggattaaaac +tagagtagcgaaacggattcgatacccgtgtagttctagtagtaaactatgaatacaatt +atttataatatatattatatataaataataaatgaaaatgaaagtattccacctgaagag +tacgttagcaataatgaaactcaaaacaatagacggttacagacttaagcagtggagcat +gttatttaattcgataatccacgactaaccttaccatattttgaatattataataattat +tataattattatattacaggcgttacattgttgtctttagttcgtgctgcaaagttttag +attaagttcataaacgaacaaaactccatatatataattttaattatatataattttata +ttatttattaatataaagaaaggaattaagacaaatcataatgatccttataatatgggt +aatagacgtgctataataaaatgataataaaattatataaaatatatttaattatattta +attaataatataaaacattttaatttttaatatatttttttattatatattaatatgaat +tataatctgaaattcgattatatgaaaaaagaattgctagtaatacgtaaattagtatgt +tacggtgaatattctaactgtttcgcactaatcactcatcacgcgttgaaacatattatt +atcttattatttatataatattttttaataaatattaataattattaatttatatttatt +tatatcagaaataatatgaattaatgcgaagttgaaatacagttaccgtaggggaacctg +cggtgggcttataaatatcttaaatattcttacataaatattaatctaaatattaatata +aatattaatattaatagttccggggcccggccacgggagccggaaccccgaaaggagaaa +tattaatataaatataaatattaatataaatataaatataaatataaatatattttaata +taatataatataatatataatatattatataaatataatatataaataatataataaaat +attttaatatatatataatataatataattattattataatttaatataaattattatta +taatttaatataataaataaataaataattataattataattataattataatctcaata +tataaatgataaattattataaatacaaaggaaataattgatttttaaaatatatttaat +aaaatatataatataaattatactttttttgttattatataataattatattaatatatt +taatagaattaaactccttcggccggactattattcattttatatattaatgataaatca +ttaattattattaataaatttatttataatatttaattttatatattattatttataata +aaaaaaattatattataacaatttaattttaatttttatttttaaattataaaattaata +atttatttgtttaaataaaatttataactccttcggggttcggccggactattaatataa +ataaataataaatatttataataaaataatatacatcttctttaaataaaaaaaggggac +attataaatagtatataaatatattatatcttttttattattattattaataaataataa +taataatttatatatttataatatatttaatagttccggggcccggccacgggagccgga +accccgaaaggagaatgtattataattattacatataattattattattcacttcttatt +aaaaataatactctatataatttatataatttattttaatatatatatatttatatataa +tataatatatatatttatttattataatcatttttttttaacttaaaataaaacttatta +taatttatataatttataatttttatataaaaataattatataatttttatttatttata +taataataatattatttgttatatattatatattatatatataataaataaataaataat +aaataataataataaggatatagtttaatggtaaaacagttgatttcaaatcaatcatta +ggagttcgaatctctttatccttgataataataataaaaatatgtatttatttaattatt +ttaatatttctcctttcggggttccggctcccgtggccgggccccggaactattaatata +atataatataatataaatattcatttatcttttttttaatattcttaattaattaattaa +ttaatatattaattataaaaaatatattataattttattattaataagtataaatatatt +attaataataatttattaaaaatatattattataatatattaatatatcataattataat +caatattatattatttaattttataatacttaattattaatatattattcatatatatat +aaattaaattaaattaattatattgaatatataaatatatatatatataaatatataaaa +aattatataaattattttaagtaaaaataatattaataaaaattatacaataataataat +aaatattcattattatttaattaatatctcctttacttctttttcctccgttgaggactt +attattaagtatattattatatactacttaagattatatatataatatatatatatatat +tatatataaaatataaatatataaataatataaaaattaataaaataaataaaataaatt +agtccgatcgaatcccctatttaattaaattaaattaaattaagaaagagataaatttat +ataaaatattatttataattaattataattaaattataatataatataatataaataata +atataataaaaataaaaataaaataatattagattatattatataatttatataattttt +taataataataataaataagtttatttataattataaatataaatataaatataaataaa +gaaggtattatattttataaaatataataataatacaaaatttatattttaataaatatt +aatataagtttaaagttccggggcccggcacgggagccggaaccccgaaaggagaaataa +ataatatatttataaaaaattaaataaataaatattatctatttaaaaataaatataata +taatataatataataattctaaatataaataatatttattataattattataataattgt +attatttattaataatatatataattatattaaaactaatattacattattttgtatatt +taaacaattaaattgattattcttatttgtaatctttatttattttattatatcttatta +atgataaattataattattattaaaataataatttacttcttttgatataaaaataaaat +aatatagttccggggcccggccacgggagccggaaccccggaaggagataaatatattat +atttttattcctacctattaaaggtaaagactcgattctcataattaaatttatatcctt +cggccggattaatttattttatttatatttatatttatagtgaataccttttttaatatt +tatttttaatatttatttttaatattttatttttaataaaatataatcttgtaagtaaga +aaagaatttcggtgattggaaccttgaaaggataaatttcttatttattataatatttat +attaatagttccggggcccggccacgggagccggaaccccgaaaggagtattattaaaca +tttaatatattatattaatatttaatttaaatgattaatatattattataataatattta +ttttatattaaaatattataattaatatatatatatttattttaataatattattattat +tattattaaaattattatttttataaatatatatatatatatatatatattatttttatt +cttatataaattatataaaaaaaatatatataatatataattaattaatatatattattt +aaattatatattatttaaaatactttttatattatatcttctttaaattaaaatataatt +attatttatattataattatttatgaaatattattattaaaataaaaaagaggtttagac +tatatatttattatttataaacttattatattatttattattaatagttccggggcccgg +ccacgggagccggaaccccgaaaggagaaataaataaaataaaaaataataaatattaat +attattaaatattatttataataaatattaatattattaaatattattcatattaataaa +ttttattattatttgtaatatattaaatattaataatatatatattatttattataatga +aaacctatcctatattatcctatcatataatatcatatcatattatattatatcttatta +tatgatatataaagtattcactctatatgaggttatgattattatataaatcttatttta +tttttatttttatttggactaataataattataataataattattgatatgttctaatat +taataaatacatatttatattataatataaatattcatttcttactaattaataaaaagt +ttttatattcattataatataaatatataaatatatataaatattttaataattataatt +atattaagatattataaatatatatttatttttttttataaaataaataaataaataaat +aattaatatttttatattataacttatttttataataataataagtattttattttttat +tatattattatttatataattatatatatattaatttcaatttaattaattaattaattg +gtatttggcatataatatcaattaattgtaattcttataagaattaattaattaatatgc +tttttatataatttatacttttatatttctccttccggggttccggctcccgtggccggg +ccccggaactattattattatttttatttatttattattaaaatataataataaatagtc +cggcccgccccgcggggcggacgccggaggagaattatatttttatataataatttatat +ttctatatatatatatatatattatatataaatattattatatatatttttatatatatt +ataattatattcattaatattttattatagtggtggggtcccaattattattttcaataa +taatttatcatgggacccggatatcttcttgtttttatttattattttattaaatttatt +ttaattatttatttataatttatattatacaatttattatttcgttaatacctttattta +tattatataatatattatattattataatatatttattgattatattaatacatttaact +aatgtgtgctctatatttattgaatagtttggttcttatcacccaccccctccccctatt +acgtctccgaggtcccggtttcgtaagaaaccgggacttatatatttaatactaaaaata +taactacattacttttttaatatatataacaatatatatatatatatatattaattatat +aaaatataatactctatattaaatattatttttatcaatatttatttatatatataataa +taataataataatcaatattaattatttatatatataagattaatattatttaatatatt +atgaataatttaattaataaatctttaaatattatcataaaaatataaattaaataattt +cttatttataataaagaataataatatatataaatataataaagaatgtaaataatatat +atataatataatataatataaaaaatatatatatatataaatatatatataatatataga +taataatatttttatataatttattttattattaagtaataaataataaaaaaatcaata +tattaaataatatatttatattagttcggtttagttggtattttgtaatgagtaaaaagt +aatatataatattaaataataagtattgatataagtaatagatataataataatattatt +aatattttatataaataatattaataatatagattatgaaagagagtattaatatcatta +aatatatatatatgttatataatttaaatgattttaatatatatatatatattatattat +agattatgatacatttatataaataatatatatataaaaattaattatactattacttta +taatataataatatttatttataaagatataaaagaattgtttaaagttataactaaaat +attatatagtattcattaataattaatattataaattcaactattgttatatttataaat +agaataatatattattatcctttaagatataacaataattatttaaattaaattaaatta +aatttaattaatttttttttttaatgaatataataataataatattattaaaattaatat +ataaaaaaaaagtaaaaatggtacaaagatgattatattcaacaaatgcaaaagatattg +cagtattatattttatgttagctatttttagtggtatggcaggaacagcaatgtctttaa +tcattagattagaattagctgcacctggttcacaatatttacatggtaattcacaattat +ttaatggtgcgcctctcagtgcgtatatttcgttgatgcgtctagcattagtattatgaa +tcatcaatagatacttaaaacatatgactaactcagtaggggctaactttacggggacaa +tagcatgtcataaaacacctatgattagtgtaggtggagttaagtgttacatggttaggt +taacgaacttcttacaagtctttatcaggattacaatttcctcttatcatttggatatag +taaaacaagtttgattattttacgttgaggtaatcagattatgattcattgttttagata +gcacaggcagtgtgaaaaagatgaaggacctaaataacacaaaaggaaatacgaaaagtg +agggatcaactgaaagaggaaactctggagttgacagaggtatagtagtaccgaatactc +aaataaaaatgagatttttaaatcaagttagatactattcagtaaataataatttaaaaa +tagggaaggataccaatattgagttatcaaaagatacaagtacttcggacttgttagaat +ttgagaaattagtaatagataatataaatgaggaaaatataaataataatttattaagta +ttataaaaaacgtagatatattaatattagcatataatagaattaagagtaaacctggta +atataactccaggtacaacattagaaacattagatggtataaatataatatatttaaata +aattatcaaatgaattaggaacaggtaaattcaaatttaaacccatgagaatagttaata +ttcctaaacctaaaggtggtataagacctttaagtgtaggtaatccaagagataaaattg +tacaagaagttataagaataattttagatacaatttttgataaaaagatatcaacacatt +cacatggttttagaaagaatataagttgtcaaacagcaatttgagaagttagaaatatat +ttggtggaagtaattgatttattgaagtagacttaaaaaaatgttttgatacaatttctc +atgatttaattattaaagaattaaaaagatatatttcagataaaggttttattgatttag +tatataaattattaagagctggttatattgatgagaaaggaacttatcataaacctatat +taggtttacctcaaggatcattaattagtcctatcttatgtaatattgtaataacattgg +tagataattgattagaagattatattaatttatataataaaggtaaagttaaaaaacaac +atcctacatataaaaaattatcaagaataattgcaaaagctaaaatattttcgacaagat +taaaattacataaagaaagagctaaaggcccactatttatttataatgatcctaatttca +agagaataaaatacgttagatatgcagatgatattttaattggggtattaggttcaaaaa +atgattgtaaaataatcaaaagagatttaaacaattttttaaattcattaggtttaacta +taaatgaagaaaaaactttaattacttgtgcaactgaactaccagcaagatttttaggtt +ataatatttcaattacacctttaaaaagaatacctacagttactaaactaattagaggta +aacttattagaagtagaaatacaactagacctattattaatgcaccaattagagatatta +tcaataaattagctactaatggatattgtaagcataataaaaatggtagaataggagtgc +ctacaagagtaggtagatgactatatgaagaacctagaacaattattaataattataaag +cgttaggtagaggtatcttaaattattataaattagctactaattataaaagattaagag +aaagaatctattacgtattatattattcatgtgtattaactttagctagtaaatatagat +taaaaacaataagtaaaactattaaaaaatttggttataatttaaatattattgaaaatg +ataaattaattgccaattttccaagaaatacttttgataatatcaaaaaaattgaaaatc +atggtatatttatatatatatcagaagctaaagtaactgatccttttgaatatatcgatt +caattaaatatatattacctacagctaaagctaattttaataaaccttgtagtatttgta +attcaactattgatgtagaaatacatcatgttaaacaattacatagaggtatattaaaag +cacttaaagattatattctaggtagaataattaccataaacagaaaacaaattccattat +gtaaacaatgtcatattaaaacacataaaaataaatttaaaaatataggacctggtatat +aaaatctattattaatgatactcaatatggaaagccgtatgatgggaaactatcacgtac +ggtttgggaaaggctctttaacacgtggcaacataggttaatttgctatttcatttttag +tagttggtcatgctgtattaatgattttctgtgcgccgtttcgcttaatttatcactgta +ttgaagtgttaattgataaacatatctctgtttattcaattaatgaaaactttaccgtat +cattttggttctgattattagtagtaacatacatagtatttagatacgtaaaccatatgg +cttacccagttggggccaactcaacggggacaatagcatgccataaaagcgctggagtaa +aacagccagcgcaaggtaagaactgtccgatggctaggttaacgaattcctgtaaagaat +gtttagggttctcattaactccttcccacttggggattgtgattcatgcttatgtattgg +aagaagaggtacacgagttaaccaaaaatgaatcattagctttaagtaaaagttgacatt +tggagggctgtacgagttcaaatggaaaattaagaaatacgggattgtccgaaaggggaa +accctggggataacggagtcttcatagtacccaaatttaatttaaataaagtgagatact +ttagtactttatctaaattaaatgcaaggaaggaagacagtttagcgtatttaacaaaga +ttaatactacggatttttccgagttaaataaattaatagaaaataatcataataaacttg +aaaccattaatactagaattttaaaattaatgtcagatattagaatgttattaattgctt +ataataaaattaaaagtaagaaaggtaatatatctaaaggttctaataatattaccttag +atgggattaatatttcatatttaaataaattatctaaagatattaacactaatatgttta +aattttctccggttagaagagttgaaattcctaaaacatctggaggatttagacctttaa +gtgttggaaatcctagagaaaaaattgtacaagaaagtatgagaataatattagaaatta +tctataataatagtttctcttattattctcatggatttagacctaacttatcttgtttaa +cagctattattcaatgtaaaaattatatgcaatactgtaattgatttattaaagtagatt +taaataaatgctttgatacaattccacataatatgttaattaatgtattaaatgagagaa +tcaaagataaaggtttcatagacttattatataaattattaagagctggatatgttgata +aaaataataattatcataatacaactttaggaattcctcaaggtagtgttgtcagtccta +ttttatgtaatatttttttagataaattagataaatatttagaaaataaatttgagaatg +aattcaatactggaaatatgtctaatagaggtagaaatccaatttataatagtttatcat +ctaaaatttatagatgtaaattattatctgaaaaattaaaattgattagattaagagacc +attaccaaagaaatatgggatctgataaaagttttaaaagagcttattttgttagatatg +ctgatgatattatcattggtgtaatgggttctcataatgattgtaaaaatattttaaacg +atattaataacttcttaaaagaaaatttaggtatgtcaattaatatagataaatccgtta +ttaaacattctaaagaaggagttagttttttagggtatgatgtaaaagttacaccttgag +aaaaaagaccttatagaatgattaaaaaaggtgataattttattagggttagacatcata +ctagtttagttgttaatgcccctattagaagtattgtaataaaattaaataaacatggct +attgttctcatggtattttaggaaaacccagaggggttggaagattaattcatgaagaaa +tgaaaaccattttaatgcattacttagctgttggtagaggtattataaactattatagat +tagctaccaattttaccacattaagaggtagaattacatacattttattttattcatgtt +gtttaacattagcaagaaaatttaaattaaatactgttaagaaagttattttaaaattcg +gtaaagtattagttgatcctcattcaaaagttagttttagtattgatgattttaaaatta +gacataaaataaatataactgattctaattatacacctgatgaaattttagatagatata +aatatatgttacctagatctttatcattatttagtggtatttgtcaaatttgtggttcta +aacatgatttagaagtacatcacgtaagaacattaaataatgctgccaataaaattaaag +atgattatttattaggtagaatgattaagataaatagaaaacaaattactatctgtaaaa +catgtcattttaaagttcatcaaggtaaatataatggtccaggtttataataattattat +actattaaatatgcgttaaatggagagccgtatgatatgaaagtatcacgtacggttcgg +agagggctcttttatatgaatgttattacattcagataggtttgctactctactcttagt +aatgcctgctttaattggaggttttggtaaccaaaaaagatatgaaagtaataataataa +taatcaagtaatagaaaataaagaatataatttaaaattaaattatgataagttgggacc +ttatttagctggattaattgaaggtgatggaactattctagttcaaaattcatcttcaat +aaaaaaatctaaatatagaccgttaattgttgtagtatttaaattagaagatttagaatt +agctaattatttatgtaatttaactaaatgtggaaaagtgtataaaaaaattaatcgtaa +ttatgtattatgacttattcatgatttaaaaggtgtatatacattattaaatattattaa +tggatatatgagaacacctaaatatgaagcatttgttagaggtgctgaatttataaataa +ttatattaattcaacaacaattctacataataaattaaaaaatatagataatattaaaat +taaaccattagatacatcagatattggttcaaacgcttgattagctggtatgacagatgc +agatggtaatttttctattaatttaataaatggtaaaaatcgttctagtagagcaatgcc +ttattattgtttagaattaagacaaaattatcaaaaaaattctaataataataatattaa +tttttcttatttttatattatgtctgcaattgcactatattttaatgttaatttatatag +tagagaacgtaatttaaatttattagtatctcttaataatacgtataaactatattatag +ttataaagtaatagtggctaatctatataaaaatattaaagtaatagaatactttaataa +atattctttattatcatctaaacacttagattttttagattgatctaaattagttatttt +aattaataatgagggtcaaagtataaaacttaatggtagttgagaattaggtataaattt +acgtaaagattataataaaactagaactacgtttacttgatctcatttaaaaaatacata +tttagaaaataaataaataaattattattactttcttcccctccgaatccgtaatatatt +tacggatatataatctcgtagtgtaaaaggtgtaacgagattattaataagttgccgtaa +tatattgtaaaatatattattattacaacactatatgcgggaaaaccctaaagtcataat +ataatattatccccacgagggccacacatgtgtggccctcgcggggtatggtaaatttaa +ttaagttataaatgtactatagtattaaaaattattatgaataatttccccacccccatg +cgaagcatgggggggggtataagtatggacaatccgcaggaaaccaaataataattaata +tcctgaaacaaagtaagtgaaggagatatcttaaaatatatataatatatattttataaa +ttattatgtaggatcctcagagactacacgtgttgcacccattatattatgtataatggg +ttgaagatatagtccaaatataattgaaagattataataaaatgaactatttattaccat +taataattggagctacagatacagcatttccaagaattaataacattgctttttgagtat +tacctatggggttagtatgtttagttacatcaactttagtagaatcaggtgctggtacag +ggtgaactgtctatccaccattatcatctattcaggcacattcaggacctagtgtagatt +tagcaatttttgcattacatttaacatcaatttcatcattattaggtgctattaatttca +ttgtaacaacattaaatatgagaacaaatggtatgacaatgcataaattaccattatttg +tatgatcaattttcattacagcgttcttattattattatcattacctgtattatctgctg +gtattacaatgttattattagatagaaacttcaatacttcattctttgaagtatcaggag +gtggtgacccaatcttatacgagcatttattttgattctttggtcaaacagtggccctta +ttattatattaataatatataatgatatgcatttttctaaatgctggaaattattaaaaa +aatgaattacaaatattataagtctattatttaaagccttatttgtaaaaatattcatat +cttataataatcagcaggataagataataaataatcttatattaaaaaaagataatatta +aaagatcctcagagactacaagaaaaatattaaataattcaataaataaaaaatttaatc +aatgattagctggattaattgatggtgatggatattttggtattgtaagtaagaaatatg +tatcattagaaattctagtagcattagaagatgaaatagctttaaaagaaattcaaaata +aatttggtggttctattaaattaagatcaggtgtaaaagctattagatatagattactta +ataaaactggtataattaaattaattaatgcagttaatggtaatattagaaatactaaaa +gattagtacaatttaataaagtttgtattttattaggtattgattttatttatccaatta +aattaactaaagataatagttgatttgttggattttttgatgctgatggtacaattaatt +attcatttaaaaataatcatcctcaattaacaatttctgtaactaataaatatttacaag +atgtacaagaatataaaaatattttaggtggtaatatttattttgataaatcacaaaatg +gttattataaatgatccattcaatcaaaagatatagtattaaattttattaatgattata +ttaaaataaatccatcaagaacactaaaaataaataaattatatttaagtaaagaatttt +ataatttaaaagaattaaaagcttataataaatcttctgattcaatacaatataaagcat +gattaaattttgaaaataaatgaaaaaataaataaattatttaataaagatatagtccaa +attatatatatataatatatatatatataacaagcaccctgaagtatatattttaattat +tcctggatttggtattatttcacatgtagtatcaacatattctaaaaaacctgtatttgg +tgaaatttcaatggtatatgctatggcttcaattggattattaggattcttagtatgatc +acatcatatgtatattgtaggattagatgcagatcttagagcatatttcctatctgcact +aatgattattgcaattccaacaggaattaaaattttctcatgattaataaatccctttag +caaggataaaaataaaaataaaaataaaaagttgatcagaaattatcaaaaaataaataa +taataatataataaaaacatatttaaataataataatataattataataaatatatataa +aggtaatttatatgatatttatccaagatcaaatagaaattatattcaaccaaataatat +taataaagaattagtagtatatggttataatttagaatcttgtgttggtatacctctata +tactaatattgtaaaacatatagtaggtattcctaataatattttatatattataacagg +tattttattaacagatggttgaattgattatctatctaaaaaagatttagataaaaaaac +aattatagaaattaattgtagatttagattaaaacaatcaataattcatagtgaatattt +aatatatgtatttatattattatcacattattgtataagttatcctaaaataaaaattgc +taaagttaaaggtaaatcatataatcaattagaattttatactagatcattaccatgttt +tactattttaagatatatattttataatggtagagtaaaaattgtacctaataatttata +tgatttattaaattatgaatctttagctcatataattatatgtgatggttcatttgtaaa +aggtggaggtttatatttaaatttacaatcttttctaactaaagaattaatttttattat +aaatattttaaaaattaaatttaatttaaattgtctattacataaatctagaaataaata +tcttatttatataagagtagaatctgttaaaagattatttcctataatttataaatatat +tttaccttctataagatataaatttgatattatattatgacaaaaaaaatataatatgat +taattaattaattaattaattaatttatttattatttacttttttgatatatatagaggc +aaactcgaggaaaaccatataattagaataagtaataattatatgacaaccgtcgaacta +aatcatattcaagaaattaatatgtaaaagcgtagagattagacgcctctggttatctaa +gtaatatatatatatatattatatgataacataaggtataatccaatgagatcagtaatg +attttaaaacaataattttgttttaagtattaataataatattaatattcgacctcttaa +ttgaggatattataatcataattttttatattataatataaaatttaactagctagataa +tattatataaaaaaaaaaaataatattatataaattaattaaaataatttttattaattg +aaactgaaatgttttaaagttaaataaaagagctctaatccatggtggttcaattagatt +agcactacctatgttatatgcaattgcattcttattcttattcacaatgggtggtttaac +tggtgttgccttagctaacgcctcattagatgtagcattccacgatattaatttaataag +tgtcgtgcttaaaattcactaaaataatatataataaattataataaatatataaaaaaa +ataaaaaaaataaaaaaaaattaatatcttatgattaattttatataaataaaaatttat +taaatattattggttatatatatatatatattaataataaaaaaatatatatatatatat +agctaacggggaaactcttataattattatttatataataaataagacaatcccgtgata +actttaatatatatatattatatattaaagtattgtagagactaaacgtgaatgatttta +atattatttaaatattaaaattaagagatagtccaatcttatatgtaaatataagttaat +accaaaaaaaaaataatattattttgacttattatatattaatattattaataataattt +taactaataataaagtttttatagaaactttatattattatttaatatttaattttcaat +taatatctccttttggggttccggtccctggtccggcccccgaaactaaagatattaaga +atttatatgaatcaattataaataattatattaatattttaaataaatatcttattaata +ttaataaagataatattaataaattaaaatttttagataattatactgaagaagaaaaag +gttattatttatctggattatttgaaggagatggtaatatttatactagatgtttttcaa +ttactttttctttagaagatgttttattagctaattatttatgtctttattttaaaattg +gtcatattacagctaaatataattttaataaagaattaacagctgttaaatgaaatatta +taaaaaaaaaagaacaagaagtatttataaattatattaatggtaaattattaacatata +aaagatatgatcaatattttaaatataattttaataatcgtttaaatattaaattattaa +aacctaaagaatttgatttactattaaatccttgattaacaggttttaatgatgctgatg +gttatttttatctaggttttcaaaaacataaaaatagtcaatgattaaaatttcatttag +aattatcacaaaaagatagttatattttagtccggcccgcccccgcggggcggaccccaa +aggagatattattaaaaaatattttaaacttggtggtattttaaaaagagattataaatc +tggtgctacagcttatatttataaagctcaatcatcaaaagctataaaaccttttattga +atattttaataattatcaaccattaagtcttagaagatataaacaatatttattattaaa +tattgcttacttattaaaattaaataaattacatatattacttaattctttattaatatt +aaaagaattaatattattacaaagtgttaaaaatatatctttagaaataaaaaatgaatt +aaataatagagttaaaattattattaataaacttcattataacaatatcgaataatgata +atattaaagagtaaaattcttaaagtgttaattaaataatattcttttttttttatgact +tactacgtggtgggacattttcgtgcggtctgaaagttatcataaataatatttaccata +taataatggataaattatatttttatcaatataagtctaattacaagtgtattaaaatgg +taacataaatatgctaagctgtaatgacaaaagtatccatattcttgacagttatattat +aaaaaaagatgaaggaactttgactgatctaatatgctcaacgaaagtgaatcaaatgtt +ataaaattacttacaccactaattgaaaacctgtctgatattcaattattatttattatt +atataattatataataataaataaaatggttgatgttatgtattggaaatgagcatacga +taaatcatataaccattagtaatataatttgagagctaagttagatatttacgtatttat +gataaaacagaataaaccctataaattattattattaataataaaaaataataataatac +caatatatatattatttaatttattattattatattaataaaatttaatatatattataa +ataattattggattaagaaatataatattttatagaaattttctttatatttagagggta +aaagattgtataaaaagctaatgccatattgtaatgatatggataagaattattattcta +aagatgaaaatctgctaacttatactataggtgatatgcctatctttatttatatatata +ttattattattaataataaaaaaaaaaattaaaaaaaagataggaggtttatatataact +gataaatatttattatattatttttttttataataaatattaaaagatattgcgtgagcc +gtatgcgatgaaagtcgcacgtacggttcttaccgggggaaaacttgtaaaggtctacct +atcgggatactatgtattatcaatgggtgctattttctctttatttgcaggatactatta +ttgaagtcctcaaattttaggtttaaactataatgaaaaattagctcaaattcaattctg +attaattttcattggggctaatgttattttcttcccaatgcattttttaggtattaatgg +tatgcctagaagaattcctgattatcctgatgctttcgcaggatgaaattatgtcgcttc +tattggttcattcattgcactattatcattattcttatttatctatattttatatgatca +attagttaatggattaaacaataaagttaataataaatcagttatttataataaagcacc +tgattttgtagaatctaatcttatctttaatttaaatacagttaaatcttcatctatcga +attcttattaacttctccaccagctgtacactcatttaatacaccagctgtacaatctta +agttataaaatttaattatttacttaataattaaaaagtaaatattatatctaaacttaa +taatataataataatattcttataaaaatatataaaaaaaaatatataaaatttattaaa +atatctcctttcgggaactataatatatttatataaataaatactaatataatcctatta +tatatatatatatataaaataatatatatatataattaatataaataatatttataataa +ttttttaataatatatataatttaatatattaatgaatattatataattattaaatatat +tataatattattattattttataataaaaatatttttaatactaattattatttattatt +tataaatatataaatagtatgtttaatattattaatactaaaaaaaatataattataatt +aggatctaacaatacatttatctgattaatattaatattaatattaatatttatattaat +aaacggattaaattaattgtatccaatttaattaaattatagatatattatttataatat +taatatattgttttattaaaaaggtaaaaatagtttttattttatatataaatataggat +ataaataaatatattatagtgaaccccgaaaggagaatatattaagaatatatttatatt +ttacatataattatttataatataaatatctccgcaaagccggattaatgtaattattta +ataattttatttaataatttattaaaataaatatttacatttgataatatttatattatg +tcagttattttatattaatgtttaatctattataatatttttttttataaatatattatt +tatttatattaattatatatatatattatttttataatatatatatatttttattaaata +tttattaaatatttattaaattattataatgttgttattaatcttattaaaaaatatata +taaaaatgccacaattagttccattttattttatgaatcaattaacatatggtttcttat +taatgattctattattaattttattctcacaattctttttacctatgatcttaagattat +atgtatctagattatttatttctaaattataatatatattattaatttatttattcatat +aaatattattattatatataaatattaataatatttatacttatttaataataataaaat +aaaaaataattataatttaatatatttaatatatttccttacggactatatatttatata +tatatattaaatacaatttaatttaatttaattatgttatttattaaataaagttatatt +atgatataataacaatattatatattattatataattataatatattttaatataattat +caaaagaaataataaaaaaatattaataagaatataatttaataattattaaaaaaaaat +tcttatagtccggcccgccccccccgcggggcggaccccaaaggaggagtaataaaaatt +attaaatacaaatattatatatatataattcattatatatatatatatataataattaat +cttatttttttatatatttatttatatatctatttatattttatatatatttatttatat +atctaaggggttcggtccctccccccgtaagtataatatacgggggtgggtccctcacta +tttatatttttattttatatattttatatatttataaataaagtataataagatataatt +atgattaattatttataagttatagttttataaatttataattattatgtttaatttatt +aaatacatatattacatcaccattagatcaatttgagattagactattatttggtttaca +atcatcatttattgatttaagttgtttaaatttaacaacattttcattatatactattat +tgtattattagttattacaagtttatatctattaactaataataataataaaattattgg +ttcaagatgattaatttcacaagaagctatttatgatactattataaatatgcttaaagg +acaaattggaggtaaaaattgaggtttatatttccctatgatctttacattatttatgtt +tatttttattgctaatttaattagtatgattccatactcatttgcattatcagctcattt +agtatttattatctctttaagtattgttatttgattaggtaatactattttaggtttata +taaacatggttgagtattcttctcattattcgtacctgctggtacaccattaccattagt +acctttattagttattattgaaactttatcttatttcgctagagctatttcattaggttt +aagattaggttctaatatcttagctggtcatttattaatggttattttagctggtttact +atttaattttatgttaattaatttatttactttagtattcggttttgtacctttagctat +gatcttagccattatgatgttagaattcgctattggtatcattcagggatatgtctgggc +tattttaacagcatcatatttaaaagatgcagtatacttacattaaattataaaataaaa +ttataaaataaaataatttacatatggagtattaaactataataaatacaatatacccca +tcccccccttttaataatattcttttatctaataaaatatttatttattaatattattat +tatcttcttcaaggacttatttaatatatttaataacttattatacttatttatatttat +aattaatacaaatatattattaatcttactccttcggagttcggccccccataagggggg +gacctcactccttccccactgcactggatgcggggacttatttttattattattatttaa +tctttatttataaaattatatattatatataaattattatacttaataattaaaaaaaaa +cctctaattattattaatattatatataatatatatattctcattaatgttatatataat +atatatattctcattaatatattaatatagtattaaaaaaaataaaatatttaataaata +ttattattaataatatttattaaaaataatataacataataaatataagattattatata +atatatttattatatcatatagttccggggcccggccacgggagccggaaccccggaagg +agaaattataacatattttttaataatattcatatttattttatatacaaataaatatat +ttatttagaataataaaaaaaaataataaataaatatattattatcattattatacttta +ttcattatttattataataattatatataacaattataatatataattatattttatata +atattatattaatatttaatatatttattattattattacttctatggaaactttatatt +ttagatatttttattattattattaatttataatgttatatttttgatttataaatatat +aagtcccggtttcttacgaaaccgggacctcggagacgtaatagggggagggggtgggtg +ataataaccagaatattcaataaatacagagcacacattagataaattttataatataac +caatataaaataaaattaaaataattaatatatatatataaatataataaattattatat +ataaatatatataatttttataataaatattataatattatataaataaataattataat +atataataaatatataataataataaaaatattaacaatataataaaaatttataatata +aatataaattataaataagttaaattaataaaataataaatgattaacaagaagatatct +ggggtcccattaataattattattttcaataataattgggaccccccaccattataatat +catattaattaatataataataatgtatataaaatagaaataataattaatataataata +ataatatatataaaatagaaataataattaaatatatatataaataattatttatataat +atattataaataataataataataaatatttattaattaataatgattataaatatttta +tttaatataaatttataactattttattatatatatattttttattcataaaaattcctt +ttgaggatttttattttatataaatatcttctaatatttataataaataataatatattc +attatatttataattatatataatgtaatacgggtaaacattacccgttgttcacgggta +atgtttaccctattttatataattcttaataaatatatttatatttttatataaaaaaaa +ttataataatttattaattctcctttcggggttccggctcccgtggccggaactccggaa +ctataaaaataattttaatataatttatatattttatgattaatataatatattattaat +gtaactccttcgggatttggtccccctcgtaagtatatagtatatagtatatagtatacg +gggggtccctcactccttcggggttcggtcctcccttacgggtacggatacggatacgaa +tatggggagtccctcactccttatcactacgctgaaggtggaatttattttatattatta +ttaaatctttatttatttaattatatatttaatatatatattattataataaaacaccta +attattattaatgttatatttaatataatatatatattcttaaaaatttatataatataa +ataaataaaaaaaaaagaaagtacataattaatattattataaataatattattaaaaag +aatataatataattaatagaaagacgttttaaaaataaaaataaaaataaaaataaaaat +aaaaataaaaataaaaataaaaataaaagagttttggtttacatatcaagacccaattca +attgaaactatttatttattaatctcctcccctccccctcactattattataagtacaat +tagggcgccaaccccgcagtgttatttactgggaaatgtttatcccaattaatataataa +cgagagttattaattattatttataaattcatataatgtaatataatgtaatgtaattaa +tagaacattattgtgttattcaccagtgttaagatatattaatcccaattttatttaata +gtgaagattatattttattaattatgaatccatattattattatttaatatatttataat +attatatataattataattataaataatttatataaaaaaagttttattaaaaaatatta +ttaaaaatataatattaataataaataaaaataatattatactcttaatagaatttataa +tgataaaaattaagatgaagacttttttttataattattataaatttatataaaaataat +atatatatatttatatttattttattaatatatataatatatttatgtatattaaaaaga +tatatttaaatatttttattttttttttataagataatttttgtaaatatataagtaata +aattaagttttatagggggagggggtgggtgattagaaacttaactgaataatatatata +aagcatacattagttaatatttaataatataatcaatatataataattataaaataatta +attatataataataataatgtataaacaatataataaattgtataaaataaaatataaat +cataaataaagctaaattaataaaataataaatgataaacaagaagatatccgggtccca +ataataattattattgaaaataataattgggaccccatatagaatataaataattaaata +tatatatataaataataatttatataatatattataaataaataataataaatattatta +atctataataattataaatattttattaatataaatttaataattatatatatttttata +ataactccgaaagagtaaggagatattaatttcttataaaaatttattaataataataat +atataaaatatataaataatatattatatataaaataaaataaaataaataatatattaa +aaatattgaaagtattttaataaataataaatttaaaattcatatttataataataaata +aataaataaataaataagtaaatatttagattctcattaatattaatatttatatttctt +tttttttataataataaaaatatcatatataaatataatataatataatataataaatta +ttatatataaataataaatattaaatataatatataataatatataatcttacaatttat +aatttaataaagaaggaaataaataataataactccttttggggttccggtggggttcac +acctttataaataataaataaagatgtttactcctcttcggggttccggtcccctttttg +ggttccggaactaattaatattttatataataataataatatattaatataatttcatta +ttaataaatatctcctgcggggttcggttcccccccgtaaggggggggtccctcactcct +tcggagcgtactattattataaataattatatattataatataattaaaaagtattataa +ttgaaacgaaaattgtaattttaaatggaataataattattatatatttaatatatttaa +taaagttataatatctctttctaccggactattttattttattttattttatttttataa +agaaaaatagtaataatattatcttctcctcctttcggggttccggttcccgtgccgggc +cccggaactattaattatataatataatataatataatataatataatatgatacggatc +aaacattacccgttgttcactggcaatgtttaatcctattgtatataaatataataaaat +aattatccctctcgtaatacatatataaaatataaaatataaaataaaaatattatgatt +attataatatatatatatatatatataaatatatatatataatttataatttatatgatt +aatatattatatatataaaaaatatattaaatttactttttatagaaaggagtgagggac +cccccccccttacgggggggaaccgaaccccgcaggagatatttattttaatacttatat +agtatttattaataatataataattgttattataaatattaataataatataaaaatagg +gtaaataatataaataatatgaataaatataaaaacatattaaatataaaatatatcata +aatttaataaatattataataatttataaatgatagatatctggggtcctataaataata +attattttcaataattatagggacccccacctattatataaatataaatataaatataaa +tataaatacaaatataaatatataaatatataaatataatataaatacaaatataatata +taaatataaatataaatatataaatataagtccccgccccggcggggaccccgaaggagt +gagggacccctccctatactaatgggagggggaccgaaccccgaaggagtataaataaaa +attaataatatatatataattataatagttccggggcccggccacgggagccggaacccc +gaaaggagaaataataatataatatataataaaatataacttattaatataatattaaaa +atataattaacaagaataaatagtccgtgggatcgaacccccttttttatttaatattta +atatttaaagaaggaattgtttatatatattaatatcttatttggggattaatataatat +ataagttttggataccaggccaaagaccggaatcccaaaaggagattatataaatattat +ttatctcccttttttaatattataataattttattaaaaataaaataataataataatta +taatttataataacaattataataatttaattaattaattaattaattaattaattaatt +aattaattaataataaatataaatataaaaagaatataatttataataaataaatttata +tatatatatatatattaaataaaatatttacttcattaatataaaatataaatatattta +attaataagtatatatatataataatatataataacctatttatatatataatcttaata +taattataagaaatattatataagtaatatataaaaataatataaaataattataattca +atttatatattaatagttccggggcccggccacgggagccggaaccccgaaaggaggaat +aagataaatatataaattatattaataaatataaattttaaatgaattaataaaattaat +atatatatgtatatatatatatatattaaaaatatttaattatttttaggaaggagtgat +agatccctttgggggaccgaacccctatttaagaaggagtgcgggaccccgtgggaaccg +aaccccttttttatttaaagaagaagttttattttattttattttattttattttatttt +attttattttattttattttattttatttaatttaattttaattaggttaataaatagta +ataataaacttaataataataataataattttatttttataatttattaataataataat +aattatatatatatatattattaataaatatagaccttatcgtctaatggttacgacatc +acctcttcatgttgataatatcggttcgattccgattaaggttattcataataataaata +tttgtaaaaaaagtatatataattaaacatattctttatattaattaataattattaata +atatacattttatataatacaattatatatatatatatatttttttttaatacaaataat +atattcataataataaataccgattgttattatactataataaaatatataatatatttt +tcattataatatttttaaataaatattataataaattatataaataatatttatgtataa +taataataataataattgttattaattaattctataattattatatatttaatttttttt +tttaatataatatataataatataatttattttatttttttttatagttccggggcccgg +tcacgggagccggaaccccgaaaggagaatataaattaataataatataaataacatatt +aacaataaattattgttaatataataataataataacaatattaataaataatataaaaa +ttattaatattatatttatataatattaatataaaaatctttcataatattaattattat +taaataataatgatatcattaatattaatataatcgtcaatattatttatttatttattt +atttatttatttatttatttatttattattaaataaatatttttaaatattatattatat +tattaactttttattaaaaaaattaataatgatataatataattaatattatccacggga +ccaatgaccaacccagtagttgaccggattggcgcccgcgaggtttatatttaataaata +ataataataatattaataaaatctattaacttttttttttaatggattatattaatgaaa +aaaaaatgagaaatatcttttttttttaataattataatttatatataataaaatatgta +tatataataaaaaaatagtttttaatattataatataattatatatataattataaatat +atatatatataataagtattaattaataatatatatttatatattttttattaattaata +tatataaaatattagtaataaataatattattaatattttataaataaataataataata +tggcatttagaaaatcaaatgtgtatttaagtttagtgaatagttatattattgattcac +cacaaccatcatcaattaattattgatgaaatatgggttcattattaggtttatgtttag +ttattcaaattgtaacaggtatttttatggctatgcattattcatctaatattgaattag +ctttttcatctgttgaacatattataagagatgtgcataatggttatattttaagatatt +tacatgcaaatggtgcatcattcttttttatggtaatgtttatgcatatggctaaaggtt +tatattatggttcatatagatcaccaagagtactattatgaaatgtaggtgttattattt +tcattttaactattgctacagcttttttaggttattgttgtgtttatggacagagtgaga +caagtataagtatattattataatatcataccattaaataaattattttaatgaaatgat +tatgtttatatataacatatacctaattagacatgcattattagtaataattttgtatga +aactctaataataataattattattaattattaaggtaagattcatatggatagcgtaag +tcaatctaatattataaaatatcgtaacataaacaatatttttttctattattaattaat +aaataataataaataaaaataattatatgagaagtaagatattcaattctgtctagaata +catatatatacgttaatactcatcggtataaaattagaatcctaagtgaattattgaaag +tataataatataaacttggtaagcccaattatttccatataatattaatataaatattat +atggtagttatatataatattattaaataaataataatagaaattataatatagataagt +gggtaaaagactattgaaaaagctaaagattatatgtaatgtataatatagatcaaatta +tttatatattttaataaaaatatattaataatggttaatattattattaattaattaatt +aattaattaataataataacgaataaatgattaatgtgaaagcatgctaacttcaatata +ggatgatttatatagtatataaattgtttgagctgtatactatgaaagtagtacgtacag +ttctgagtgggggaaaatttgtaaagatctacctatcacaattgtcacattgaggtaata +taaatatcgcctcaaatatatttaatataataaaactaatttatataataatgttaatat +tattaatttatattttttatacgattataataagacaaataataaaaactaaagaatatc +ttatattaattaagagtatagattatattaataaaaataaatatataattaatttaaata +taacaaataagaaagatataaataataatattggtccattaaatataaacattttatcaa +ttatttatggttcaatattaggagatggtcatgctgaaaaaagaaaaggtggtaaaggaa +caagaattgtatttcaacaagaatattgtaatattaattatttatattatttacatagtt +tattagctaatttaggttattgtaatactaatttacctttaattaaaactagattaggta +aaaaaggtaaaattagacaatatttaaaatttaatacatgaacttatgattcatttaata +tgatttattcagaatggtatattaaaaatatatctggaaaaggtaatattaaagttattc +ctaaatctttagacaattatttaactcctttagctttagctatttgaattatagatgatg +gatgtaaattaggtaaaggtttaaaattcacaactaattgttttagttataaagatgttc +aatatttactttatttattacataataaatataatattaaatctactattcttaaaggca +ataaagaaaatacacaatttgttatttatgtatgaaaagaatctatacctattttaacta +aaattgtatctccttatattattcctagtataaaatataaattaggtaattatttataat +aaaatatatagtattatattaattattatattattataatgcgatattattgaaaacatg +tcaaaattatattattaagtaacaagacagtgggttatataattatatgatcccaacaga +atacaccaataataggtattattataaaaaaaataataatatttaatgtttattcgaaga +aaatttataatattattattataacacaaggtttaataatctatatatatatattatata +tataactactgttattattccatttacctaattaatatataaataatgaattataattat +tatgattaatatttttataataataaccccatcataacatttatatataacatttatata +taacatttatatataatatttatattatggtattattaggtataaatatttattcataag +agaaaatagtgattaaatggaattataaaaagggtagatattattaaatacagggtatta +tttatattaataaatcaataaatattgagattattattattaaaaaataataataattta +taaataatattattttcttggcactagttattactaatttattctcagcaattccatttg +taggtaacgatattgtatcttgattatgaggtgggtttaatatagaggatccatattata +gtaatataatattaaataaatctgttttatgctgaaatatcttcatttgaataataaatt +actatattattcaattaattatttataataatataatttgaaataaaaataatatagtta +aaatatttattataagaagaaaattagcagtaattaatatatatatatatataaaattaa +ttattcagagactttatagttattatataaataatactattatttatgataaaaatcata +aattaaacacagataatcctatttatgcatatattggtggtttatttgaaggagatggtt +gaattactatttcaaaaaaaggtaaatatttattatatgaattaggtattgaaatacata +ttagagatattcaattattatataaaattaaaaatattttaggtattggtaaagtaacaa +ttaaaaaattaaaaataaaagatggtactattaaagaaatatgtaaatttaatgtaagaa +ataaaaatcatttaaagaatattattattcctatttttgataaatatcctatattaacta +ataaacattatgattatttatattttaaagataatttattaaaagatattaaatattata +atgatttatcttattatttacgtcctattaaaccatttaatactcttgaagatattttaa +ataaaaattatttttcttcatgattaattggtttttttgaagctgaaagttgttttagta +tttataaacctataaataaaaaaataaaacttgctagttttgaagtatctcaaaataata +gtatagaagttatattagctattaaatcatatttaaaaattactcaaaatatttatacag +ataaatttaataattcaagaataacacttaaaagtattaatggtattaaaaatgttgtaa +tatttattaataataaccctattaaattattaggttataaaaaattacaatatttattat +tcttaaaagatttacgtcttattcttaaatataataattattttaaaattcctcctaaat +attaatcttatataaaaatataataataatatatttatatattatataattatataaaca +aaatataatttatatataattatttattataaatatagtccggcccgccccgcggggcgg +accccggaggagtgagggacccctccctattctaacgggagggggaccgaaccccgaagg +agtttaattatatattaaatatattattatcaataaataattcctttgaactatttatta +ttttattatatttattttctccttcattattaatttttattaataattaaaatcttatca +ttttatggtatttttatttctattttaggatatcgaaactataaattaaaaagtataatt +ttattaattataatttatgattaataaataagaaataaaaactttagaagtaatatttat +cttttttttttataaataaatattatgattaatatataatcatttataaatatttatata +taattatatatatacataaataggattaagatatagtccgaacaatatagtgatatattg +ataatagttttcaaatatgtaactatttaaacattaaaagctcagtatctaaccctctaa +tccagagattctttgcgttacattatttagtaccttttatcattgctgcaatggttatta +tgcatttaatggcattacatattcatggttcatctaatccattaggtattacaggtaatt +tagatagaattccaatgcattcatactttatttttaaagatttagtaactgttttcttat +ttatgttaattttagcattatttgtattctattcacctaatactttaggtcaaaatatgg +ccttattattaattacatatgtaattaatattttatgtgctgtatgctggaaatctttat +ttattaaatatcaatgaaaaatttataataaaactctatattattttattattcaaaata +ttttaaatacaaaacaattaaataatttcgtattaaaatttaattgaacaaagcaatata +ataaaataaatattgtaagtgatttatttaatcccaatagagtaaaatattattataaag +aagataatcagcaggtaaccaatataaattcttctaatactcacttaacgagtaataaaa +agaatttattagtagatacttcagagactacacgcacactaaaaaataaatttaattatt +tattaaatatttttaatataaaaaaaataaatcaaattattcttaaaagacattatagta +tttataaagatagtaatattagatttaaccaatgattggccggtttaattgacggagatg +gttatttttgtattactaaaaataaatatgcatcttgtgaaattcttgtagaattaaaag +atgaaaaaatgttaagacaaatccaagataaatttggtggttctgtaaaattaagatcag +gtgttaaggctattagatatagattacaaaataaagaaggtataattaaattaattaatg +ccgttaatggtaatattcgtaatagtaaaagattagtacaatttaataaagtatgtattt +tattaaatatcgattttaaagaacctattaaattaactaaagataatgcttgatttatag +ggttctttgatgctgatggtactattaattattattattccggtaaattaaaaattagac +ctcaattaactattagcgttacaaataaatatttacatgatgttgaatactatagagaag +tatttggtggtaatatttattttgataaagctaaaaatggttattttaaatgatctatta +ataataaagaattacataatattttttatctttataataaaagttgtccttctaaatcta +ataaaggtaaacgtttatttttaattgataaattttattatttatatgatttattagctt +ttaaagcacctcataatactgctttatataaagcttgattaaaatttaatgaaaaatgaa +ataataattaaattttctccgtattcattattatattatctaatttataaaatatttaaa +gattccttataataatataacatctttgtaaattattgttaaagataatataaattatta +tgaatcggtagattatatttttacaatcttattaaataaaattctgatcattaaacatga +ttgaagaaataataatagtttatgaaataagatagtgtaatataaatttttatgaagata +tagtccattttatatttattataaaagcatcctgataactatattcctggtaatccttta +gtaacaccagcatctattgatattaaaaatattaataaaattattattatttaatcttat +ttattttatataaaaaaaataaataataattattaataaaaatatattatttatttctcc +tttcggggttatttatatatattcctttataatttatatttaatatattatattaaatat +atgaaaaattataataaataaattaattaattaataataaataataataaaaagtacagt +agcattaaatattcttaagtttccgctttgtgggaactcccataaggagtttaatgatta +aaattggttaattgtcaagaaaatctaaggtattaataaataaataatactatgacaact +tgcagcgaagtttatatcatctctatattatatattaatatatatatataataataataa +taatattaatataatataagatataaaaacgttcaacgactagaaagtgaactgagatag +taatacctttccacgaaaaccaattaatttataaattatttttaaataaagaatagatta +ttaattttttttatatagttccgggccccggccacgggagccggaaccccggaaggagta +atatatattatatataaaataaaaaatatatatatatatattataaaatatcaaaagttt +taatcttttattataaattaatgacatagtctgaacaataatgaaaattattgagataag +atattaaataatcttatgttaacatatataaattgtgtacctgaatgatacttattacca +ttctatgctattttaagatctattcctgataaattattaggagttattctaatgtttgca +gctattttagtattattagttttaccatttactgatagaagtgtagtaagaggtaatact +tttaaagtattatctaaattcttcttctttatctttgtattcaatttcgtattattagga +caaattggagcatgccatgtagaagtaccttatgtcttaatgggacaaatcgctacattt +atctacttcgcttatttcttaattattgtacctgttatctctactattgaaaatgtttta +ttctatatcggtagagttaataaataatatataattaaattaatacatagatataatata +tatattattattattaataatataataaaaataaaaataaaattattaataataataata +ctttaataatattcttaaaaataatatatctctaatttataaaaattaaataataataat +aaaaaaaaaatattataaaatataaattaattaataatgaaaataatatacttattaaat +taatataaataaatgaataatataatataactatattgaattataatctatctatctttt +tttttcatataattataatatatatattaatatatataattattattttatatattatag +ttccggggcccggtcacggaagccggaaccccgcaaggagatttattaattattattatc +attattattttttatttaatcttatttattataaaataattaattatcataaagcataat +tattatagaatcttattattttctttatttaaatttataaaaatataaagtccccgcccc +ctttttattttatttaattaagaaggtattttaaaaaaggagtgagggaccccctcccgt +tagggagggggaccgaaccccgaaggagtactcatttaatataaatattaaataaaaatt +attttatatatattaatgattattaatattgataatataaattattttataattaattat +tataaatatataactattaataattaatttttaatctaggggtttcccccacttacataa +acttacgtatacttacatatacttatgtatacttacatatacttacgtatacttatatat +acttatgtatacttacgtatacttacatatatgggggatccctcactcctccggcgtcct +actcaccctatttattaatcattaataagaaattattattaaaaaaattataatttactc +aaagttaattataaatatatttttaaatatctattttattaatcttttataaaatttaaa +ttaattgtaattaattaatattataataattattcttaggaaggatatttatttatttta +attatgaattcctgacatagagacaattaattagaacttcttattattattatagtaata +ataaaaatattctaaatatattatatatattattattttttttattattaataaaatatt +ataataaatttaaataagtttataatttttgataagtattgttatattttttatttccaa +atatataagtcccggtttcttacgaaaccgggacctcggagacgtaatagggggaggggg +tgggtgataagaaccaaactattcaataaatatagagcacacattagttaatatttaata +atataactaatatataataattataaaataattaattatataatataatataaagtcccc +gccccggcggggaccccaaaggagtattaacaatataatatattgtataaaataaattat +aaatattaaataaaaaccaaataaataatataataaatgataaacaagaagatatccggg +tcccaataataattattattgaaaataataattgggacccccatctaaaatatatatata +actaataatatattatatatattaatatataataatattattaaaatataatattattaa +aaaaaaagtatatataaaataagatatatatatataaatatatatattcttaataaatat +tatatataataataataaattatttcataataaattatttctttttattaataaaaatta +cttatctccttcgaccggactattaaatattaaatatttaatatttaatatttaatattt +tattctatagatattcatatgaaaaataataagtatataattatgataatgaatatattt +ttatttataatttattattataaaaatattttaatttaataataataataaatcattata +ttaattcttttaagaatttataattgtcattatttattatatactccttattaaaaggga +ttcggtttccctcatcctcatgggtatccctcactccttctgataattaattttataata +ataataaaataaacttaattaaatattatatatttatttacaattatatatatatattac +tcataattaaattaaattaagatgcaattcaatacggttgtattatattattcatcaaat +attgttaatattgatacctacagagatatttaatatttttattattattatccattactt +tttttattatattttaattatttatttatttatttatttataataataatatttcatatt +atcaattattattttttttttttataatatataattaaattatttatatagttccccgaa +aggagaataaataaaatattatataaatatttatatctttattaatattaatataagtaa +tatatatagtttatgatatttaattttatcataatataataataattatataaatcttat +acacatttatataagtatatatatatattattaatataatgaacatctattaaataaaat +aattgtaaatctcaagtaaattattattattttatttttaataataatttatgatttata +attaataaataaaagagtaattatatgataaaaaaggtaataaataaaatttatagttcc +ggggcccggccacgggagccggaaccccgaaaggagtttatttatatatatatatatatg +aattaatatttaataataaataataatataattaataatattattattattataattttt +ttatttataatattaataaaatattattatatatatattataataatattaataagatat +ataaataagtccctttttttttatttaaaataaagaaagaataattaaataatattttaa +taatttaattaaatagtgtattaaaagataataaaaagtaatattaatatgttaattata +tataatatatttatatataattatatatatatatataaataataataaatatatatataa +tataaaaataagaatagattaaatatttaataaataaatattatgcaattagtattagca +gctaaatatattggagcaggtatctcaacaattggtttattaggagcaggtattggtatt +gctatcgtattcgcagctttaattaatggtgtatcaagaaacccatcaattaaagaccta +gtattccctatggctattttaggtttcgccttatcagaagctacaggtttattctgttta +atggtttcattcttattattattcggtgtataatatatataatatattataaataaataa +aaaataatgaaattaataaaaaaataaaataaaataaaatctcatttgattaaattaata +acattcttataattatataattattataaaatatataaatattataataataataatata +tataaattataataaaaaataataataatatataatataccttttttttaatatattaat +atataaataaataaataatggataatatataattactttttttatattattaataataat +aatttataaatattgttataataaacatttatataaataaatataaattaccataataag +atatattatttattaataataaaaatatttattaataaataagaaatatatatattatga +taatatttattaataaataataaattctttatatataaatatattaaatatatttaattg +aacacaatataatttttattgtattattcatttaataatattaatattaatattaatata +atattagtgaacatctcctttcggggttccggctcccgtggccgggccccggaactatta +atatttaataaaatatatataatttataattttcatataattaatataataattaggttt +ataaataaattataatatattataacaatataataaaatatattataaatctatctatct +atctatataatatataaatttatatatacattaataatatttaattataattatttaaat +atttaatttattaatattccccgcgggcgccaatccggttgttcaccggattggtcccgc +ggggtttatattatttaaatattaaatattaaataataatttatattatattaataaata +taataaattaaaaatatatgattaattatataataataataataattattttaatattat +aatttataaaattaattatattaattatattaattcttattatataataattattaataa +taatttattttaagaaaggagtgagggaccccctcccgttagggagggggaccgaacccc +gaaggagaaaataaattaataaaagtttaaaagttcttatattaataattatataatatt +atattaaagatttttataatatatatatataatatatttatagttccggggcccggccac +gggagccggaaccccgaaaggagtttatttaatatttatatttatattaatatttatatt +tatatttatattcctcttaaggatggttgactgagtggtttaaagtgtgatatttgagct +atcattagtctttattggctacgtaggttcaaatcctacatcatccgtaataatacatat +atataataataattttaatattattcctataaaaataaaataaataaataaataataata +attaattaattaattaattttaataaatataaaatatataaaaataataataataataat +tattattttaataatattatttatataatagtccggtccgaccctttttattcttaagaa +gggattttattttattaattaataataatatattaaaaattataaataattaataattct +ttatatttatatatatatatatatatttatatatttatatatatattttaataatattat +gatatattttattttaataatatttttatttttatatataaaattataatattttatttt +ataaattatttatatataaattattaataataattatttttttttatttgggatttatat +tattattataaagaatataatgttattaataactgcaaaaaatatctaatatattattat +ttataataataaataatattataataaggatgcatattatatatatatatatatttctat +ttatattaatattaatattaatatgtatatataatagataaaaagtaaaaataaaaaata +atgaaattaaaattattaaatataattttatcaataataaataaacttaataataataat +aatattattattaataatctattagattcattaataaataagaaattattattaaagaat +atattattagatataaataataaaaaaataaataatataaaaagaatattaaataataat +aatataaaccccgcgggcgccaatccggttgttcaccggattggtcccgcggggaatatt +aataataaattacaacatttaaataatataaataattgaaatctacaaatttataattat +aataaaaatatagaaattataaatactataaatgataaattaattaataaattattatat +aaaataataactttaaaattaaataatataaatattaataaaattattataagtaaactt +attaatcaacatagtttaaataaattaaatattaaattttattattataataatgatatt +aataataataataataataataataataattattatataaatataataaataaattaata +aatattataaataataatataaataataatttatgtaatattttaagttattattataaa +aaaaaagtaactattgaacctattaaattatcatatatttatttaaatagtgatattttt +agtaaatatattagtttaaatgatatagataaatataataatggtatcttaactaattat +caacgtatattaaataatattatgcctaaattaaatgatcataatatttctataaattat +attaataatattaataatattaataataataaatataataatataattaatttattaaat +aataataataatattaataataataataattataataataataataataattatattggt +aatattaataatatttataataatataactattgataatattcctatagatattttaata +tataaatatttagttggttgatctattaaatttaaaggtagattaagtaataataatggt +agaactagtacacttaatttattaaatggtacttttaataataaaaaatatttatgaagt +aatattaataataattataaattaaattatatcccttctaatcataatttatataataat +tctaatattaataaaaatggtaaatataatattaaagttaaattaaactttatttaatat +atatattaatagttccggggcccggccacgggagccggaaccccgaaaggagaaataaaa +taaatataataaataaaataaataaataaataatatatatatatatataaatatataaaa +taatatttactttttatatatatataattatatataaataaaatataatataatatcata +taattatataaaaataaaattataatttatttatattaaaaatattaattaattaatttt +tttatataattattataataataatttaattaaaaataaatatcaaataaaattataaat +taatcctacttttggatcctatttatattttattattataaataattattattgatagtt +aattaaataaaaatatatatatatattactccttcggggtccgccccgcagggggcgggc +cggactattataattattattaatatattaattattaaattatataaaccgcccccgcgg +gggcggttagttatttatattaatatattttatattaatatataatactcttttttctat +tatattttaatatataatattaaaaaaaataaataaaataatattcttaatttttattct +ttatcttctttaaccaaactccttcggggttcggtccccctcccattaggttagggaggg +ggtccctcactccttcggggtccgcccccccccgcgggggcgggccggactattttaaat +tttaatttaaattttataaatataatatttaattataaatttaataataatatataaaaa +atatatatatggttaatatatataaagattataatctttttattaaataaaggaaaattt +attatataatttttctctatagttatatatttaaaacttatttttttttttttataaata +ataattataataaataatattaattatttattatataattaattggcccccatgctgggt +tccggaactcctccttctcgcgaggttaacacctattatataactataactataactata +actataattataattataactataactataaatattcattttaataataataataataat +aatattaatataaatagtcgaagaatatatttatttattttaatataaataaaaagtttc +aattaatttgaatttggaattaaattattacttcatatggggttatggatttcgttcgga +actcctccctcctacctctatttattaatcataaatcataaattattattaattaataat +aataatttactcgaggttcatacctattttaatattaatattaatattgataaaatatat +attcactaaaaagtatataatttactcaatttatactataattttatatttttttattat +aatttaattatttcaaataaagtaattataataatatatatcctttattaaatatatatt +aattaatatatatataaaaagtaaatattattaattgtatataattataaataattaata +tttattaaaatatatataatttataatcctcatataattaatataataaataatataaca +caatgtaatttaatttaattacataataaatttattattattataattattatttattta +tttatttattattataaattataaatattattataattaaaatcaattattaattattaa +tgataaataattaatgataaattatcaataaccaattagattatttatcgatatttaatt +atattatattatattatattatatatatatatatatattatattataaaatttatttata +aatatttgtttatttatttatttattgaataacaatagaattaaatattgtcaataaata +ataaataatgtttaatatatattatattatattaatattaatattattattatttttttt +attatattaatataatttataaaaatataaaattattatttttattataatttatatata +tataatatatatatttattaaaatattttaagaaaggagaaaaataattaaattaaatta +aattaaattatttattattattattattatttatataataatatattatttaaatattta +tatattatttttatattaatatttatagatggggggtccctattattattgaaaataata +attattaatggaccccagatagcttcttgtttatcatttatatatatatatatattatta +attattttattctcctttcggggttccggctcccgtggccgggccccggaactttataat +attattattaattatttaattaatattataatcatataatttaatattttatttaatttt +attaaaatttaatatatatatttttattattatttaattaatttataaatataaaatatt +cttaatattaaaaataaataaataataaagtttataaatcatatattataattatttatt +atttttatattatattaataaaatattattattataaaaaaaaatagaaattttataata +tttttatatatttttaattattattattaatatttattaaaggaaatataaaaaccgaag +gaatattataattataattataattattattatatttaatttattattataataataatt +atagtctgccccctctttatctttattttaaagttccggggcccggctacgggagccgga +accccgaaaggagaaggatatttaataatttataatatttaattcatatatatatatata +tattttattttttatatatatatttaatatattatatttatatttatattattattatat +ttatattatattatttaattattttttaataatatattattaatattttaccttttgata +aataaaaatttattaaaaattttataataagtattaaaatatcataaaagtataatattt +atataaaatgtataaatttataatcttctaattaaattaaattaaataaataaaataaaa +taaattaaactccttttgagattcacacctattttattaaaaataggtattcacttaatt +aaattaaattaaattaaattaaattatggataatttatttaataaatatatatattaatt +ataaaataatagtccggcccgccccgcggggcggaccccgaaagagtctgccccttttta +tttaatatttaatatttaatatttaatatttaatatttaatatttaaagaaggatatatt +tataatttatcataatattatttaataagaaattattaattaattaattaattaatttat +ttattgtttatatttattaatattaatataataaaaatgtaaaatacttaatattattaa +tattattatatataatatatataataatatattatatttatatctcctttattccttttt +cccccgatggggacttattatattatattattatatatttcttcgataactttatatata +ttttatttttataaaaaaatatttatatattattatttacaataataattattaatagtc +cggcccgtcccgcgggggggaaccgaaggagtgcgggaccccgtgggaaccgcatccctt +tttatttttaattaagaaggagtgagggaccccgtggggaccgaaccccgaaggagtctt +ttttctatttattaataataactataaattatatttaaaataataatttacttgttataa +tcttaatgttccggggcccggccacgggagccggaaccccgaaaggagaagtatataaat +atttacttgttataatttattatatatttataacctccttcttaaaattatctttacttt +ataataaaaattaatataatataatctgataataatcgaattttattatatttaatttaa +ttaataatagacaattattattattattttacttattaatattaatttagatttatatat +ataaatattattaattttatattaattttttattaattatttatttttatattcatattt +tttattaatattatttttattaataactttttaaataattataaactatatattatttat +atttatatttataataaatgaaacaattataataaaaattacaattacaattatattata +attatgattacaatagggttaaacattacctgtgaacaactggtaatgtttaacccgtat +tattatttattatattatatatatattaaaatattaatattaatattaatattatattat +attatattatattatattatattatattatattatatttataattatattatattatata +atttatatacttttataattcttattattatttatttattatttatttattattatttaa +atatattattattatatattaataatatatatattattttatatattttatttaatataa +attatttatatttttatattttattatgagggggggtcccaattattattttcaataata +atttatcatgggacccggatatcttcttgtttatcatttattattcttattatttggttt +ttatttaatatttataatttattttatacaatttattatattgtttataccttattatta +ttatataatatattatattattataataatttaattaattatattattaaatattaacta +atgtgtgctctatatatattattcattctagtttctaatcacccaccccctccccctatt +acttatatatctagaaataaaaatacataacatatattttaaatatatatatataattat +ataataattattatatataaaatatatatatatataatatatatttataaaataataata +ataaatattattactccattagaggttttggtcccatatcaggaaccgaaactataataa +tatataatattataataaagatattcttatttataatatattattaaataaattaataat +aattataatatatatatataatatattataatatatttattcgagaactttttatttatt +ataaaataaaatattttatttattatttagtttttttttattaaacattttataaaaata +taaatgttaataatattatgattaataagtaataataaatttatttatttttattaatta +cttcttcgaggtattagtatcagtatcagtatcagtatcgtaaaaaacgggtgactaaaa +tatatatatatataaaattataaataaaaatattataataattttaaataaataaatatc +aatatattattattatttatattataataaatattatctaataatagtccggcccgcccc +cgcggggcggaccccgaaggagtccgaaccccttttttatttaattttatttaaagaagg +agtgagggacccctcccgttagggagggggaccgaaccccgaaggagataattagatata +attatattttattttatataaattatataatattatataataataattatataataagtt +aataataattatataataagttaataataatcatatctcctttataaatgaacttttatt +aaatatattttattaaatattaaatatattttttataatattaaatatattttattaaaa +tatttaatatattttattaaatattaaatatattttattaaatattaaatataaataaag +gtttatattataattcattatttatatcttctttataaattaatattcgtattagatcct +tatttaatttataatcctttaaaaaacttttaataaatataatataatatatatataatt +tttattatttttatattatttttattatttaaatatattatatatttcattataataatt +atttaaaaagttatttaataaataatctgatattatattttataattaattttatttatt +ttatttattatatatattattatatataattaaaattataattacaattataactataat +taaattaaattaaattaaattggattaaattaaattaaattgggcgccaagccggttgtt +caccgacttggtcccaatataatatgagataatataatatactatatgatataacataaa +tataatatattatatgatataacataaatataatatactccttcggggtccgcccccgcg +tgggcggaccggactatatgaatatattattattataattataaaattataataaataaa +taaaatttctttaataattattaattaatattattaatttatttacaaatattttattaa +tttttatttttattaaatataaatatataaatatatatatatttatttataatattattt +atatttattatatattattattaaatatatttttattatatatcattaaatattaatatg +ttattatagtggtgggggtcccaattattattttcaataataattattattgggaccccg +gatatcttcttgttaatcaattattatattatttaatttattttatttcttatttataat +ttatattatataatttattatattgttaatactccttcggggtccccgccggggcgggga +cttttatttatattattaattatattatattattataatatatttaattgattatattat +aaaattataactaatgtatgctttgtatttattgaatagtttggttcttatcacccaccc +cctccccctattacttctccgaggtcccggtttcgtaagaaaccgggacttatatatttg +gtaattaaaaatataacttatataaatatttaataaatatatattaaatatattattatt +aataatttattattatataaaaaaataataaatattattaatgatttaaattatataaat +attaattattaaataaataattatactttctcctttcggggttccggctcccgtggccgg +gccccggaactttaaaataatatatatatatataaaagtattttataataattagtttaa +ttattattctttttttttattaaatataaaatcattttaggttattaatttttatttatt +aaaaataaattttataattaatatttctcctttcttaaaataaataatattattattata +attattaattaatgaatactcttctcttttggggttcggtccaccctcccgtatacttac +gggaggggggtccctcactccttttgagactttaattttataaatataaatataaatata +ataagatgttaactcttttataaataaataataaatataattctatttttaataataata +tataatatttttataataaaatatataaataataatatttatatatatatatatactttt +ttttatataagaataatatatatagttcacattggaggcgagtaaaaggagataagaaat +ataatataatataataataaaaatataatgaataataataataaaaatttatataataac +aaaatagtccgaccgaaggagatgagattattaatattattaaataataaaatgtattaa +ttataaaatataaaacctataaataatttataatataatttatattatgataataataat +atatatattataatattttatatatatatttattatatttatatttatataaaaaagtga +tattgattaattaattaatttataattaataattattaatatagtccggcccgcccccgc +ggggcggaccccgaaggagtccggccgaaggagtttattatattatattaaataagattt +ataatataattaatatatattttaataaatataaaagattatattatattataaaaagta +tattttatatttatattttatttattattattattatatatataagtagtaaaaagtaga +ataatagatttgaaatatttattatatagatttaaagagataatcatggagtataataat +taaatttaataaatttaatataactattaatagaattaggttactaataaattaataaca +attaattttaaaacctaaaggtaaacctttatattaataatgttattttttattattttt +ataataagaataattattaataataataaactaagtgaactgaaacatctaagtaactta +aggataagaaatcaacagagatattatgagtattggtgagagaaaataataaaggtctaa +taagtattatgtgaaaaaaatgtaagaaaataggataacaaattctaagactaaatacta +ttaataagtatagtaagtaccgtaagggaaagtatgaaaatgattattttataagcaatc +atgaatatattatattatattaatgatgtaccttttgtataatgggtcagcaagtaatta +atattagtaaaacaataagttataaataaatagaataatatatatatataaaaaaatata +ttaaaatatttaattaatattaattgacccgaaagcaaacgatctaactatgataagatg +gataaacgatcgaacaggttgatgttgcaatatcatctgattaattgtggttagtagtga +aagacaaatctggtttgcagatagctggttttctatgaaatatatgtaagtatagccttt +ataaataataattattatataatattatattaatattatataaagaatggtacagcaatt +aatatatattagggaactattaaagttttattaataatattaaatctcgaaatatttaat +tatatataataaagagtcagattatgtgcgataaggtaaataatctaaagggaaacagcc +cagattaagatataaagttcctaataaataataagtgaaataaatattaaaatattataa +tataatcagttaatgggtttgacaataaccattttttaatgaacatgtaacaatgcactg +atttataataaataaaaaaaaataatatttaaaatcaaatatatatatatttgttaatag +ataatatacggatcttaataataagaattatttaattcctaatatggaatattatatttt +tataataaaaatataaatactgaatatctaaatattattattactttttttttaataata +ataatatggtaatagaacatttaatgataatatatattagttattaattaatatatgtat +taattaaatagagaatgctgacatgagtaacgaaaaaaaggtataaaccttttcacctaa +aacataaggtttaactataaaagtacggcccctaattaaattaataagaatataaatata +tttaagatgggataatctatattaataaaaatttatcttaaaatatatatattattaata +attatattaattaattaataatatatataattatattatatattatatattttttatata +atataaactaataaagatcaggaaataattaatgtataccgtaatgtagaccgactcagg +tatgtaagtagagaatatgaaggtgaattagataattaaagggaaggaactcggcaaaga +tagctcataagttagtcaataaagagtaataagaacaaagttgtacaactgtttactaaa +aacaccgcactttgcagaaacgataagtttaagtataaggtgtgaactctgctccatgct +taatatataaataaaattatttaacgataatttaattaaatttaggtaaatagcagcctt +attatgagggttataatgtagcgaaattccttggcctataattgaggtcccgcatgaatg +acgtaatgatacaacaactgtctcccctttaagctaagtgaaattgaaatcgtagtgaag +atgctatgtaccttcagcaagacggaaagaccctatgcagctttactgtaattagataga +tcgaattattgtttattatattcagcatattaagtaatcctattattaggtaatcgttta +gatattaatgagatacttattataatataatgataattctaatcttataaataattatta +ttattattattaataataataatatgctttcaagcatagtgataaaacatatttatatga +taatcactttacttaatagatataattcttaagtaatatataatatatattttatatata +ttatatataatataagagacaatctctaattggtagttttgatggggcgtcattatcagc +aaaagtatctgaataagtccataaataaatatataaaattattgaataaaaaaaaaataa +tatatattatatatattaattataaattgaaatatgtttatataaatttatatttattga +atatattttagtaatagataaaaatatgtacagtaaaattgtaaggaaaacaataataac +tttctcctctctcggtgggggttcacacctatttttaataggtgtgaacccctcttcggg +gttccggttccctttcgggtcccggaacttaaataaaaatggaaagaattaaattaatat +aatggtataactgtgcgataattgtaacacaaacgagtgaaacaagtacgtaagtatggc +ataatgaacaaataacactgattgtaaaggttattgataacgaataaaagttacgctagg +gataatttacccccttgtcccattatattgaaaaatataattattcaattaattatttaa +ttgaagtaaattgggtgaattgcttagatatccatatagataaaaataatggacaataag +cagcgaagcttataacaactttcatatatgtatatatacggttataagaacgttcaacga +ctagatgatgagtggagttaacaataattcatccacgagcgcccaatgtcgaataaataa +aatattaaataaatatcaaaggatatataaagatttttaataaatcaaaaaataaaataa +aatgaaaaatattaaaaaaaatcaagtaataaatttaggacctaattctaaattattaaa +agaatataaatcacaattaattgaattaaatattgaacaatttgaagcaggtattggttt +aattttaggagatgcttatattcgtagtcgtgatgaaggtaaactatattgtatgcaatt +tgagtgaaaaaataaggcatacatggatcatgtatgtttattatatgatcaatgagtatt +atcacctcctcataaaaaagaaagagttaatcatttaggtaatttagtaattacctgagg +agctcaaacttttaaacatcaagcttttaataaattagctaacttatttattgtaaataa +taaaaaacttattcctaataatttagttgaaaattatttaacacctataagtttagcata +ttgatttatagatgatggaggtaaatgagattataataaaaattctcttaataaaagtat +tgtattaaatacacaaagttttacttttgaagaagtagaatatttagttaaaggtttaag +aaataaatttcaattaaattgttatgttaaaattaataaaaataaaccaattatttatat +tgattctataagttatttaattttttataatttaattaaaccttatttaattcctcaaat +gatatataaattacctaatactatttcatccgaaacttttttaaaataatattcttattt +ttattttatgatatatttcataaatatttatttatattaaattttatttgataatgatat +agtctgaacaatatagtaatatattgaagtaattatttaaatgtaattacgataacaaaa +aatttgaacagggtaatatagcgaaagagtagatattgtaagctatgtttgccacctcga +tgtcgactcaacatttcctcttggttgtaaaagctaagaagggtttgactgttcgtcaat +taaaatgttacgtgagttgggttaaatacgatgtgaatcagtatggttcctatctgctga +aggaaatattatcaaattaaatctcattattagtacgcaaggaccataatgaatcaaccc +atggtgtatctattgataataatataatatatttaataaaaataatactttattaatata +ttatctatattagtttatattttaattatatattatcatagtagataagctaagttgata +ataaataaatattgaatacatattaaatatgaagttgttttaataagataattaatctga +taattttatactaaaattaataattataggttttatatattatttataaataaatatatt +ataataataataattattattattaataaaaaatattaattataatattaataaaatact +aatttatcagttatctatataatatctaatctattattctatatacttattactcctttt +taattaaattaaaaaggggttcggttccccccccccataagtatgattataattataatt +ataatataagggaggggtccctcactccttatggggtcccggttggaccgagactcctcc +cttgcgggattggttcacacctttataaataaataataaataataaataaaggtgttcac +taataaatatatatatatatatatatatattatattataatattatttaatacttaatat +attatatattttatatttaataaataaaaaaaatattaataaataataatattaataata +aagaaattataattaataccctctatatataattctaattaattaaattaaatatttata +tataataatcaatatattattaatttaataattattataatagttccggggcccggccac +gggagccggaaccccgaaaggagtttataaaagatatatttttatattatattatattat +atttaataaatattacctttttttattattatttttatatattatataatattattaatt +tttattataatattatttacttttttattggattatttatttatttatttatttattaat +taattaattaaatatttattaattaatatatatattaaatattaatatttcattaaaaaa +aagagatatatgaataatatattatgttatattatattatataattatattatttttata +atattaataattaaaaataagaacttatttaaaaattataattatgataataaattaata +ctttttaatttataaaaatataaatttctttacatatatatatatatatattattattat +ttatattaatcataattttaatatttataataaatttatataaaatcaattataatatta +tatactttttatatactttataatctttatatcttcacccccccttttttaataatatat +tatattaaaaatataataatttatatgatttattaatactttttatataattatattatt +atttttttttatagatgttatattattttttataataatttttttttatttaaataaaat +ttataactccttcttaattaaagataaaaggggttccccccttaagtataagtataagta +taagtataagtataagtataagtataagtataagtataagtataagtatagtatacgggg +ggggggtccctcactccttcgttaatttatatatattattaataattatttaatttttat +tatttatttatatataaaaatattctaaaattattaatatttataatagaataaatatta +taaagtataattataaataattaattatttaaataataataatatatttattattatata +ataaatatattataaataatagttatattagcttaattggtagagcattcgttttgtaat +cgaaaggtttggggttcaaatccctaatataacaataataataataaaatattaaaataa +atataatatttataaaaaatttattaatttatataaaaaatatatatataaataataatt +ataataaaacattttataatcaataatttaataaataatcttcttattataatattatgt +ttaaatattactctttatgaggtccaacaaactaataagatataaatatatatatattat +ataataataataataataatatattatttaatatattatcaagaagataaatataaataa +tattttaataattttaaataaatctaatttatatattaataatttaataatcttaatatt +tattatcattatttcatatttatattatataaatatttatttaaataaaaaatattaaag +agtttattttatttattataaattatttaataaaatatatataataatatatagaataaa +gatataaataattataagtatataaagtaataaaggagatgttgttttaaggttaaacta +ttagattgcaaatctacttattaagagttcgattctcttcatctcttaaataaataatat +aataataaaatattatagttccggggcccggccacgggagccggaaccccggaaggagat +aaatatatatatatttataataattatataataaaggtgaatatatttcaatggtagaaa +atacgcttgtggtgcgttaaatctgagttcgattctcagtattcaccctataaataataa +taataatatattttattattcttaaattttttattctttatattatatatataatattaa +tattattactttttaataacaaaatattataattaattgatatatatatataccaaatat +aattaattgaaattaaataataaataaaatatttacttctttattaaaattctaattaat +tgattctttttattgaatattaaattctattataacttattaattaattaattaattaat +tataataataataatatttattattaattattaaatatttattattatatataagattta +attttaaatattaataaaaaaagaataaaataaaataaaatgaataatatttctttatct +ctttcgatcggactccttcggccggactccttcggggtccgccccgcggggcgggccgga +ctatttattattataatataatatttaatcaatagatttataatttatttaatgaatatt +ttataaatatataaaacaattcctttttattattataaatttttcattatttatttattt +atttatttatttattcaatatataaaaataattataaaaagattattaaaaataataatt +taatgataaatatatattatatatattaatataaaaataataaatataaatatattatgt +aaatattatataaatttgtatatgtatatattataataatgttatataagtaataatata +ataaaatattttatgtaatttatatatatttataattataaaataaaaatattataaata +ataaaattaataataataataattttaataaaataaattatatatttaattttattatga +agtttatacttaatataaattatatttcctttataaattattaatatatcctttttaatt +aaataaaataaaaatattataaatattaataattaattttttatttatatttatatatat +attaaagattaaatatattattaatactaatttataatttattattaataaatagtccgg +cccgccccctgcggggcggaccccgaaggagttcgacttaaattataatttaataatttt +tatttattaatagtttcggggcccggccacgggagtcggaaccccgaaaggagttttatt +attaatataaaaagagtaaggataataataaattcttttaatttatttttaataaaatat +aattttaaaatagtttttatagtccggcccgccccgcgggggggggcggaccccgaagga +gttcggtctggcattaattataataattatattaatattattattatttattatattata +atatatttatttatattttataatattaataattattttatatttaataaatataatata +tatattattttttttaataactatctaattaatagctattttggtggaattggtagacac +gatactcttaagatgtattactttacagtatgaaggttcaagtcctttaaatagcaataa +atatatataatatatataatatatataaatgagtcgtagactaataggtaagttaccaaa +atttgagtttggagtttgtttgttcgaatcaaaccgattcaatattataatatatatatt +atttatatataaatatataattatactcctatttttatattaattaattaataatatatg +ataatataaaaattattgaattattaactcttattaataataataataatcataataata +atatatatatatatagtatatatataaaagttttattatattatattatattatatattt +atttatatataattcttattaattgaaaaaagaataattaataatcttattaaaaaaata +aatactttcattttattttattttatttaatttaattataatatataaatattaaaaaaa +ggatataagttttttataagatataatatatatatatattaaatataaagaagttaatat +ttatattttaattataaaatgttaatactcctttggggacttattaattaaattattaat +taataataatttatgatttataaataataaataaaggaataagtatcaattaattaatat +attatatttaatattttatatttaatatttaatatttaatattttaagttccggggcccg +gccacgggagccggaaccccgaaaggagtagtattaattatggatagtgagggtggattt +aatccttttgttatgttattaattaattaattaatttatatatataaaatattttaatta +atttttatataaatatatatatatatatatattaataatagtccggcccgccccgtgggg +cggaccccaaaggagtaatatatattatgtataaacaatagagaatattgtttaatggta +aaacagttgtcttttaagcaacccatgcttggttcaactccagctattctcataatatta +tatatatatatttccctttctaaaaataataataattatatataataataatataattat +atatatatatattataataataataataataataataataaataataataattattttta +ttaataatattaatatattataattattaataaatattaataaaaatagctctcttagct +taatggttaaagcataatacttctaatattaatattccatgttcaaatcatggagagagt +aattatattatattaataatcccccccccatttttaattaaattaagaagtttaatttac +tatttaataataaatgaaataataataatagatataagttaattggtaaactggatgtct +tccaaacattgaatgcgagttcgattctcgctatctataattaatattaatataaattaa +tatcctataattaattaaatacaaaattatattaaaacttatattatattatattataat +attatattattattatataaaaatataataataataatatttaattttatttaataataa +tattttatataataaaataatcatatttataatatttaatattaataataatttattata +ataattctttaatatacttatttattattattttaataaataaatataattcttataaat +atattataacaaaatatattatattttaattaaatacaatattataaatatatatatata +tataaatatttatataaaaaaaaaataaaaatattttaataattattctttataaataaa +taatgataataataatttataataatctccttgtggggttccggctcccgtggccgggcc +ccggaactataatatattttaatatattttttattactcctcctttggggtccgccccgc +gggggcggggcggactataataattttttattgataaaaaagtatatataatataattaa +tatatttctttttatataaattataaatattattttataataaaaaaagtatatataata +ttatatatttaataaataatataataataatataaataaatatatatatattattaatat +attaaattttataataataattataataatagtagtaggtataaattttaataaagagtt +ttattccaatggagtaataataataataataataaaataaaggatctgtagcttaatagt +aaagtaccattttgtcataatggaggatgtcagtgcaaatctgattagattcgtatattt +atacttaatataaaaaaaataaataataatcttttttattattatatttattaataataa +attattttgttattattattaatttatattaatattttatataaattatttatttaatct +ttcattatatatttaatatattattaatattaattaatattttataataaataaataaaa +taaaataaatattttaatataatactccttcggggttcggtccccctcccattagtatag +tatagggaggggtccctcactccttcggggtccccgccggggcggggacttatttttata +tttattaataataattaatttttatataaatttattatttcttacaatatatttattact +attattttttaataatcttatatataatatataaaatatatatatattatatatatatat +aaatataatatatattattataaatatttataatcttattaattaattagattatattat +attatattagatcatattatattatattatattatattatattattattattaatatttt +tatttttattttatatttaatagtaaaaaatcataattttataatttattaattattata +taatttcattaatatatttcttctttttatttatttatttattacttattaatagttccg +gggcccggccacgggagccggaaccccgaaaggaaaataatataaaaaataattataatt +tattataatttattaatttattaatttattaatttatttattaatttattaatttattta +ttattatattttttttaataaaggaaaattaactataggtaaagtggattatttgctaag +taattgaattgtaaattcttatgagttcgaatctcatattttccgtatatatctttaatt +taatggtaaaatattagaatacgaatctaattatataggttcaaatcctataagatatta +tattatattatataatattatatattaataaatattattaattaatttatttatttattt +attattaaataaaaatatttaatagttccggggcccggccacgggagccggaaccccgaa +aggagaataatataaaatattataattatttatatattaattattaattatttattattt +attatataaaaagtatataattttatattttaatatagggttaattaattaattattaat +tttttataataagataataatatattaaaaacttattataaatttataaaataatattta +tttactttgatattatttttaatctttcattaatatatattttattataagtaataatat +agtttaatttaattaatataaataaattacataagaataatattataataatattatata +ttatataaagaaataataatttatatttttattttttttataaataatataaatataaat +ataatggggttatagttaaatttggtagaacgactgcgttgcatgcatttaatatgagtt +caagtctcattaactccaataattatattatataatatatatattaataaattatatata +tatatatatatataaatattaaataaatattatattaataaataatataaattatctaat +cgaaggagatatttataatataatataaatattttaataaattaataaatattatattaa +taaataattaataaatatataaattataataaattttaatattattatataaattaatta +aatataataattaatgaaatagaaactataattcaattggttagaatagtattttgataa +ggtacaaatataggttcaatccctgttagtttcatattatatatcattaatatataaaat +ataaatatatatattataataataataataataaatataaatataattatatatatatat +atatataaataaataattatttaatttataataaatatatatagttcccgcgaagcggga +accccataaggagttttattattaattatatttaataaatattaattattaattttatat +ttataaataaatttattactccttcttaattaagaataaaaagggatgcggttcccatgg +ggtcccgcactccttcggggtccgccccctcccctgcgggaggggagcggactattttat +taaaaatattataattaaataataatataaataatttataatataataatatatacttat +aaataatatttaaatcttattattaatttataaatcataaattattattaataaatatct +cttttagataagataaattgaacttatatttatattatatatatatagatataaatctta +aatagagtaaatatattataataattatataaatatatatatattatattaagataataa +tatatatatatattaatatataaggagggattttcaatgttggtagttggagttgagctg +taaactcaatgacttaggtcttcataggttcaattcctattcccttcataatttattatt +aattatatattattataaatcaaatccattgaaattaatataatccaatgaataattaat +ttaatacataatttaatatataaaattatatatatatatactttataaaaaaaaaaatta +tataataattatattaatatatttatatatataaataaataaataaataataataattat +aattataattataattaattaattaataaataaataataatttatattatctttataata +tatatatatacttttataaaaaaaatatataaataattctaaaatgtatatttctccttt +cggggttccggctcccgtggccgggccccggaactattaataaaattaataataaaataa +ttattatctgtatttaataaatttaattatagagttatatttctatatatttatatattt +atttatttattctccttccggaactaataaaatatataaaataagggtttttatttattt +aattaatatatatttattcttttatataatatgtccttatagcttatcggttaaagcatc +tcactgttaatgagaatagatgggttcaattcctattaaggacgataataatatatatat +attttaatttatatatcatatatatatatatattaaagaaaataatataaaaagtatgta +ttaataataataataaataaataataataaataattttattatattatattatattatat +ttattgatatatttattgatatttattaatttaagattattcattaaatatataattatt +aataatttaatatattttataatttttattatattttatgtaagaagaaactattttata +tattatatatatatatataatttttataaaatgataaattttatattataaatattatta +aaatatttttataaatatttaaattatttataaaaaggtatataataataattattaata +ttatattatattatatatttatttatattatatataataatatatttatatatatattaa +ttaataaattaaataagtatctatattttatattatattatattattttattttattaat +tccggaaggagaataaaaagtattctaaagaaattatatatttattatttttattaatat +gttataaattaataaaaaataaatatgtatatataaattatatttattatgtttaattat +ttataatttattataatatatagtataagatatcttatttatatttatatataataaaga +atattattaaactaacacctatattatatatattatattatataatattatatatatatt +aattactaagaataaatttataattagataatatttatatttatttatttatttaattaa +caaatatattaatatttttaattaattaataatacctttatatatatatatatatatata +ttaattttaattatataattatcttttttattaataattataaatatattatatatttta +tataataagattataattttataattattttattttttattaaaaattattattattata +attattatattataattataaattattaaagaatatatttattaatattttaataattaa +tatcttttatttatatttataaaataaggtataaatattgataataaagagtaaatattg +tattaattataataataattataattaaggagcttgtatagtttaattggttaaaacatt +tgtctcataaataaataatgtaaggttcaattccttctacaagtaataatgattataata +tttatatatattaaaataatattaataaataattactcctcctagcaggattcacatctc +cttcggccggactccttcggggtccgccccgcgggggcgggccggactattttattatta +ttaaatagatgttcattaaataattataaatataatttatcttttaaatatatatatata +atataatatttaaatatatattataaataaataaataaataattaattaataaaaacata +taatgtatatttatctataaaaaatattaattaaattaatatattattacagttccgggg +gccggccacgggagccggaaccccgaaggagataaataaataaataaatataaataattc +ttcttctttaaaattaaataaaataaaataaaaaggggggcggactccttcggggtcccg +cccccctccgcggggcggactattttatttttaaatatatattatattaataatataaat +ataagtccccgccccggcggggaccccgaaggagtataaataaaaattaataatatatta +tatatatattatattaataataataataataataataataataaataataactccttgct +tcatacctttataaataaggtaatcactaatatattataataataaaaattatatatatt +atatataatctaaatattatatattttaataaatattaatatatatgatatgaatattat +tagtttttgggaagcgggaatcccgtaaggagtgagggacccctccctaacgggaggagg +accgaaggagttttagtatttttttttttttaataaaatatatatttatatgattaataa +tattatatatattatttataaaaataatatataattttaattatttttaataaaaaaagg +tggggttgataatataatataatattttttattttaatttataatatataataataaatt +ataaataaattttaattaaaagtagtattaacatattataaatagacaaaagagtctaaa +ggttaagatttattaaaatgttagatttattaagattacaattaacaacattcattatga +atgatgtaccaacaccttatgcatgttattttcaggattcagcaacaccaaatcaagaag +gtattttagaattacatgataatattatgttttatttattagttattttaggtttagtat +cttgaatgttatatacaattgttataacatattcaaaaaatcctattgcatataaatata +ttaaacatggacaaactattgaagttatttgaacaatttttccagctgtaattttattaa +ttattgcttttccttcatttattttattatatttatgtgatgaagttatttcaccagcta +taactattaaagctattggatatcaatgatattgaaaatatgaatattcagattttatta +atgatagtggtgaaactgttgaatttgaatcatatgttattcctgatgaattattagaag +aaggtcaattaagattattagatactgatacttctatagttgtacctgtagatacacata +ttagattcgttgtaacagctgctgatgttattcatgattttgctattccaagtttaggta +ttaaagttgatgctactcctggtagattaaatcaagtttctgctttaattcaaagagaag +gtgtcttctatggagcatgttctgagttgtgtgggacaggtcatgcaaatatgccaatta +agatcgaagcagtatcattacctaaatttttggaatgattaaatgaacaataattaatat +ttacttattattaatatttttaattattaaaaataataataataataataattataataa +tattcttaaatataataaagatatagatttatattctattcaatcaccttatattaaaaa +tataaatattattaaaagaggttatcatacttctttaaataataaattaattattgttca +aaaagataataaaaataataataagaataatttagaaatagataatttttataaatgatt +agtaggatttacagatggagatggtagtttttatattaaattaaatgataaaaaatattt +aagatttttttatggttttagaatacatattgatgataaagcatgtttagaaaagattag +aaatatattaaatataccttctaattttgaagaactacttaaaacaattatattagtaaa +ttcacaaaagaaatggttatattctaatattgtaactatttttgataagtatccttgttt +aacaattaaatattatagttattataaatgaaaaatagctataattaataatttaaatgg +tatatcttataataataaagatttattaaatattaaaaatacaattaataattatgaagt +tatacctaatttaaaaattccatatgataaaataaatgattattgaattttaggttttat +tgaagctgaaggttcatttgatctatctccaaaacgtaatatttgtggttttaatgtttc +acaacataaacgtagtattaatacattaaaagctattaaatcttatgtattaaataattg +aaaaccaattgataatacaccattattaattaaaaataaattattaaaagattgagattc +atctattaaattaactaaacctgataaaaatggagttattaaattagaatttaatagaat +agattttttatattatgttattttacctaaattatattcattaaaatgatatagtcgtaa +agaaattgatttccaattatgaaaaacacttatagaaatctatataaaaggtttacataa +tacacttaaaggttctaatttattaaaattaattaataataatattaataaaaaaagata +ttattctaattataatatttctcctttcggggttccggctcccgtggccgggccccggaa +ctaaaaatattattgatgatgtattaaatataaatcttatctataattataaattaccat +atcgtataaatagtgatattcaacgtttaaattctataaataataataatactaaattta +ttaatgttggagtatttgtttatgatttaaataatacattaattataacatttactggtt +atagaccagcagctctttactttaattgttctccttttcggggtcccgactggggccggg +actaaacatgaaattgctaaatatattaaaaatggtaatgtatttataaataaatatatt +ttaaaaaatattttattagattaattattatttttacttcttcttaaaattaaaaaagga +gacttttttatatttatataaattatatataaattattcttttattataaatatataaaa +ttattttcttttaattatttttataattaattaattcttcatggctatagccataacttt +taataatattcttttattctttattattatatatatatatatttattatttattattata +gaatttatatttataaaaatattaatattttatttaaaataaataatgattaatttataa +aatatatattaattaagtttcgggtcccggctacgggacccggaacccccgagaggagtt +attatatttataattaaatctttaaataatatatcttaaattattatattgatattaata +ttatattgatattaatattaaatatatatttaatatttagcttattattttataaaatta +tatttatatattataatataattaaatatattataaatttaataatttaataaaaatatt +ctttttataattattataataattaaataaataataataataagaataattaatgtataa +tttttttataaatattatatatttttatattaatagttccggggcccggccacgggagcc +ggaaccccgaaaggagaaatattaataaaataaaataaaattataatataattaaattat +aagaattatatttactccttttataatttatatttataatataatataatataaaataaa +tataatataatataaaataaatataatgtaataggtattcactcctctttggggttccga +tcccccatacggatacggatacggatacgaatacggatacggatacggatacggggggcc +gtcccccagaacttaatattatatcttaaataattaatataaatataatatattatttaa +taataataataaataaataaataaataaataaataaattaaataaataataatattatta +taattactttttaataaataatattaatataatattatattagtattataaatagacttt +ttattattttatatataatatagtccggcccgcccccgcggggcggaccccgaaggagta +atatattatataattattatttttaattataaataaaatataattattatttattatata +atttatataaatatatatatatatttattatatatataaatataaatataaatataataa +ttaataatattaaagttttatatatattaatatattataaaaggtttatatatatatata +ataagataagtaataaattaattaattaataatataaaaatatatattatatattatgtt +ttatttatatatatatatatattatgtattattatataaatatatatatatattatatta +taagtaataataagtattatattatatatagcttttatagcttagtggtaaagcgataaa +ttgaagatttatttacatgtagttcgattctcattaagggcaataataataatatattaa +ttaataattaatttataataaatatattataataattaatatatatatatataatatatt +taatacaaagaaaatatatattatatctcttatttatttatttattaatattttaataaa +tataatattataaaaaaaagtttatatatttagttccggggcccggccacgggagccgga +accccggtaggagaaatataaatataaatataaatataatataagtttggtattcattta +attatattatttaattaaaaatattctaaataagaataaatatcaataaaggagttataa +atatatatatatattaatatatatataaaaatatatattattattagttcccgctttgcg +ggaaccccgtaaggagtgagggaccccatgggaaccgaacccctatttaagaaggagttt +tattataataaaatttatatatatttaatatataattataaaaatattatataataaata +ataaataattattaataataaataaatataataataatattataataaatttataaatga +ttataataaatttatattaattttttattttgtaaatactaagatttgaacttagataat +atgcacctaaaaacatacattttaccattaaattatatttaccttattaattatataaaa +tttattaaatatataatatattaattatataaaaattattaaataaatatataatatatt +atatataatttataatatatatattataaatattattatatataaaatataatatactac +ttataaaaatatatatatatatataaatatatatataaataaatattttatatattaaat +taaataattattaataaatttaattataaagtataattttcaataggaatatttataaga +ttataataattatatgaattattataattatatatatataaataaataaaataataatta +taataattaataagagttttggatatatatctgtggagtatatattttataaaggagatt +agcttaattggtatagcattcgttttacacacgaaagattataggttcgaaccctatatt +tcctaaatctagatataatattatatctatcttaatataataatatttatttattaaata +aaaaaaaaataaataatattaattaatataagattcttttttaattataataataaataa +ataaaaagaagatattatcaatgatttatattaataataaatataaataataaaaaatat +atataatataatataataaatatatttcctttaatattaataaattaataataataataa +taataataataaaatatttaaataaattatattcaatacaaattaattatttatattatt +aataattgaataaataatccggtcgaaagagatattaattcgattatattatttatttaa +ttatatttaatttaaatatataaattaatatatatatattgaattatatataaatttatt +ttataattttataaataatatattattataaatatttaatataatttatattattattaa +ataaaagatttattaaattaatattattatttaattttattatatagtttaagggataat +attttattaatattttttttatttatttatttaattatattatatatataatatatatat +aacaataaatttatgacacatttagaaagaagtagacatcaacaacatccatttcatatg +gttatgccttcaccatgacctattgtagtatcatttgcattattatcattagcattatca +ctagcattaacaatgcatggttatattggtaatatgaatatggtatatttagcattattt +gtattattaacaagttctattttatgatttagagatattgtagctgaagctacatattta +ggtgatcatactatagcagtaagaaaaggtattaatttaggtttcttaatgtttgtatta +tctgaagtattaatctttgctggtttattctgagcttatttccattcagctatgagtcct +gatgtactattaggtgcatgttgaccacccgtaggtattgaagctgtacaacctaccgaa +ttacctttattaaatactattatcttattatcttctggtgctactgtaacttatagtcat +catgccttaatcgcaggtaatagaaataaagccttatcaggtttattaattacattctga +ttaattgttatttttgttacttgtcaatatattgaatatactaatgctgcattcactatc +tctgatggtgtttatggttcagtattctatgctggtacaggattacatttcttacatatg +gtaatgttagcagctatgttaggtgttaattattgaagaatgagaaattatcatttaaca +gctggacatcatgttggatatgaaacaactattatttatctacatgttttagatgttatc +tgattatttttatacgtagtcttctactgatgaggagtctaaggctatagaattatatat +ctaaatgattaatatatatattattaataattaacaataattaatatattataatttata +tatatatattttatattattataataatattcttacaaatataattattatatattattc +cttcaaaactcctaacggggttcccgcgaagcgggaactaataataatataatcattata +ctcttttttcatttaccttttataaagataattaataaatttatttaatatttataaaaa +aaaaaatataatattaatataatataatataataatgtaattatttatatttttatattc +cttcgaggtcaccgcctcacctccagcgggacttttttaatatgatataatataatataa +atattattaatttaactaatatataaattcatatatatatatatattattaatattattt +tataaaaaatattttttatttgattattattaaatattatatagttccggggcccggcca +cgggagccggaaccccgaaaggagaaatattaatatattataaatatactatttatgtaa +ttattttttgaagtgagcacctattttatatatattttatatatattttattatatttta +ttaaaaataggtgtgaacctccatgagagaggaatgaatacctattttataaagtatatt +ttatattctatatattataaatatgaaccaaaaaaaggagtttaaaatttaattaaattt +aattaattgaatttctttattattattatcataattattaaaccctttattaatataata +atatattatttattatcaaaatacctaccctttttataatttatatctttaataatataa +ttaaatataaaatgtttattaaatattatataaaaataaaaataaaaatatatatatata +tataaatgataaataataaggaattcacacttatataaatttaaatataaagtcccaaaa +gaagtattcattaaataaattatcattaattaattataataaacttatttaatattatta +aagattaatttataataataattattattattattattaatattaataaaatatataaat +aattaaatagttcatatattaaaaagaattagaattaaactttaataagtgtatttaata +tatagaatattaatagaatatttattctatttatatatatatttatatatatatatatta +aataatattatttatattatattttatatatatattattaatataaaaagtatattatat +gtattatatatattatatattatatatttaataatatattactcctttggggtgggtccg +ccccacggggcgggccggactattataattaataattttataaagttccggggcccggcc +acgggagccggaaccccgaaaggagaataaataattatatatcttcttcttaattaaatt +aaattaaattaaattaaattaaattaaattaaattaaaaaggggttcggtccccctccct +aacgggagggggtccctcactcattcaaactataatttaatatattatgatattatttat +aatttataatataatgtataatattatattataaatattatataaaaataaaatgatata +tataataataataataataataataaaaaaatagaaaagaataatttttattattttagt +atatataagaatttaataagttatattattgcggacaccgttacgcggagtggggactat +tatattttacctatatatattaatattattataatttccttctttaaaagaaaaaaggaa +ttcgagaacttattattatattaatatattaataataaataataataaataataaaaaag +taaataattataaattatataaaaatataattttattattaagaaaggagtttaaatata +aaatataatattatcattaagttctaataaaggtatataatgaagatctattagaaccta +aaaagaatattaatatatctattataaaataataataataaatataaatataaaaataaa +ttgtaatatttataaataataataaaaaataaataaggaatatattaattattaataata +aataaattatattaaaatataatattattattaaattaaagaattatattaaatatattt +attaaaattttataaataagttaatattttattaaataatatttataaataataaaaaaa +aataagtatataattattaatatattaatttattatgttatatatttatatatttcaaat +atataagtaatagggggagggggtgggtgataataaccagaatattaaataaatacagag +cacacatttgttaatatttaataatataatcaataaatatattataataatataatataa +ttaataatagatataaagtataaacaatataataaattatataaaataaatataaattaa +aaataataaccaaataattaatataataaatgataaacaagaagatatccgggtcccaat +aataattattattgaaaataataattgggacccccacaatagaataaaaaataaaaagaa +ttaataatatataaataatataaaatatattatatatatatataatatatatatatatat +aataaaaaaaaatatataatataatatatatatataaaataataaattatatatatatat +ataaaataataaaaaataataatcatatgaattttataaatataattattattaataata +ataataataataataaagtccggtccgccccgcggagggggcggacccccgaaggagtgc +gggaccccgtgggaaccgcatccctttttattcttaattaagaaggagataataatttat +aaaaattaatatttattttatgtaatattaatattaatattaatataatataatataata +taatacggattaaatattaccagttgttcacaggtaatataaaatcctattgtttcacct +attattaattaatagttccggggcccggccacgggagccggaaccccgaaaggagaataa +gtatatataataaaatttaataaaaaaaaataattatataataaatatatatattataat +attatataaatataaaatataattgatattaacattatataattaataatataatcaaat +aatataaatataatataaaaagttttaattattaaaattatataaatattatttaataaa +aataaaaataataataataataataataataaagtccggtccgccccctccgcggagggg +gcggaccccgaaagagtgagggacccccccgtatacttacggggggagaaccgaacccct +ttttttatttaaagaaggagataaatatttatatctttatttataattatatataaataa +aagtttattaaaatttataataataatataaaaaagtatataataaatttattataaata +aataaatatttagtaataatatttaataaaattataaatattataaataaaatattaata +ataaataataaatatataatataatataatataataaattaataacaataagatatccgg +gtcccctaaataattattatataaaataataattgggacccatacatataaatataaaat +attttaatatttatatataaataataataatatatatttatattatattataatataacc +ctttccaattaatattaatattaatattaattacttccttaaaaaaataataattaatta +attgatttttatattaatataaaaaagttaatatatatatttatatataaataatataaa +ttaatataaagataataagtccccgctttcagcgcagtgagggaccccctcccgtaaata +tacgggaggggagaccgaaccccaaaggaataataaataatagtatgtatttaaataaat +atttaatatactatttttttttattatttttataatatatttataataatatatttaatt +ataatttataaaaaagagatataatattttattatatataatattaatataatacaaatt +aacattatttaattattattaataatatttaactttattattatcttctacggttggact +ccttcttaaaaaggggttcggtccccctcccattagggaggggtccctcactccttcggg +gtccgcgccccccgcgggggggggcggaccggactattattactatttatttattaataa +taaataataaattataaagtcactgaaagagtgaggaattttccttttcccaagggaaaa +ccccaaaggataatataaatattataaaatttttattaaataatataaaattcaataaaa +taattttaattaattaattaattaattaatataaaaataaatatttttaattaatattaa +tattaatagttccggggcccggccacgggagccggaaccccggaaggagaaatataaata +taatagtatagtatataggaagttaataataatataaatattatataatatatatatgta +tatatattatattatataattaattttctccttttgtatttacatcttaataaaatataa +aatataaaatgttattaacaataaaaattattaatctttataatattaataatagtaaat +ttatttatatatctcctttaggatggactccttcggccggactccttcggggtccgcccc +gcgggggcgggccggactatttttattttttttttaaaaaatattaaatattataaatat +attataaatatattataaatatgttataaatatattataaatagaatataatataatatt +atatattataatgataaagattatatatattttctttttttttttatttattatttttaa +taagtaaaaattatattatatatatatatatattagattttataagtaatataatataag +tattaatatataaatgcaatatgatgtaattggttaacattttagggtcatgacctaatt +atatacgttcaaatcgtattattgctaataaattaatatataatatttataaaaaagtat +aataaaatatattataagaagaatatattatataataattatattaataatattaataaa +taatatataaataattataaaaaagtatataatattaatcaattaattaattaataaata +taaataatatattaatttttaattaatttgaataagatatttatattattaataggaaag +tcataaatatataaattatattatataattaatataataataaaataaattatatatttt +atttataatattatttctttataagataaaatattatctgatgaataattagattgaata +atatttataaagaaatatatataaaaagtcattatataaatttaattataatttaaataa +attttatataaattaatataatattaataaagtaattagtataaataaataatatgaaaa +taaaacttaataaatatataaatatagtccggcccgcccccccgcggcgggcggaccccg +aaggagtgagggacccctccctaatgggagggggaccgaacccctttttaagaaggagtc +catatatatatattaataaaaaaaagtaatatatatatatatattggaatagttatatta +ttatacagaaatatgcttaattataatataatatccata diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai new file mode 100644 index 00000000000..7e31b31b454 --- /dev/null +++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai @@ -0,0 +1 @@ +Mito 85779 55 60 61 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram new file mode 100644 index 00000000000..283695852f4 Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram differ diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv new file mode 100644 index 00000000000..c14f54dc9b2 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv @@ -0,0 +1,7 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#Bad containers: +thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 2 1 0.8787713064318008 1 40487 +thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 3 1 0.8772071178490157 40388 35381 +#Good containers: +thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 1 0 0.0 1 59 +thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 4 0 0.00801308815760323 75661 10119 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt new file mode 100644 index 00000000000..0a03b671dbb --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt @@ -0,0 +1,18 @@ +CRAM File Name: thisFileIsCorruptMito.2BadContainers.bug8768.cram +CRAM Version: 3.0 +CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE= + +**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************: + +Average mismatch rate for presumed good containers: 0.004007 +Average mismatch rate for suspected bad containers: 0.877989 + +The average base mismatch rate of 0.877989 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt. + +Suspected CORRUPT Containers: + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.878771/1047747 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram new file mode 100644 index 00000000000..3ff3c35920f Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram differ diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv new file mode 100644 index 00000000000..7d2b1e2fd9e --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv @@ -0,0 +1,8 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#Bad containers: +thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 2 1 0.0 1 59 +thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 3 1 0.8787713064318008 1 40487 +thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 4 1 0.8772071178490157 40388 35381 +#Good containers: +thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 1 0 0.0 1 59 +thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 5 0 0.00801308815760323 75661 10119 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt new file mode 100644 index 00000000000..8e803fc48a2 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt @@ -0,0 +1,19 @@ +CRAM File Name: thisFileIsCorruptMito.3BadContainers.bug8768.cram +CRAM Version: 3.0 +CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE= + +**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************: + +Average mismatch rate for presumed good containers: 0.004007 +Average mismatch rate for suspected bad containers: 0.585326 + +The average base mismatch rate of 0.585326 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt. + +Suspected CORRUPT Containers: + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.878771/1047747 + Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000 + Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram new file mode 100644 index 00000000000..cc0abe59318 Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram differ diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai new file mode 100644 index 00000000000..379a265705e Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai differ diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv new file mode 100644 index 00000000000..3a5d6b3fb06 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv @@ -0,0 +1,6 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#Bad containers: +thisFileIsCorruptMito.bug8768.cram Mito 2 1 0.8772071178490157 40388 35381 +#Good containers: +thisFileIsCorruptMito.bug8768.cram Mito 1 0 0.008827512748783819 1 40487 +thisFileIsCorruptMito.bug8768.cram Mito 3 0 0.00801308815760323 75661 10119 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt new file mode 100644 index 00000000000..1e744899945 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt @@ -0,0 +1,17 @@ +CRAM File Name: thisFileIsCorruptMito.bug8768.cram +CRAM Version: 3.0 +CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE= + +**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************: + +Average mismatch rate for presumed good containers: 0.008420 +Average mismatch rate for suspected bad containers: 0.877207 + +The average base mismatch rate of 0.877207 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt. + +Suspected CORRUPT Containers: + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.008828/1047747 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv new file mode 100644 index 00000000000..3a5d6b3fb06 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv @@ -0,0 +1,6 @@ +file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span +#Bad containers: +thisFileIsCorruptMito.bug8768.cram Mito 2 1 0.8772071178490157 40388 35381 +#Good containers: +thisFileIsCorruptMito.bug8768.cram Mito 1 0 0.008827512748783819 1 40487 +thisFileIsCorruptMito.bug8768.cram Mito 3 0 0.00801308815760323 75661 10119 diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt new file mode 100644 index 00000000000..1e744899945 --- /dev/null +++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt @@ -0,0 +1,17 @@ +CRAM File Name: thisFileIsCorruptMito.bug8768.cram +CRAM Version: 3.0 +CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE= + +**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************: + +Average mismatch rate for presumed good containers: 0.008420 +Average mismatch rate for suspected bad containers: 0.877207 + +The average base mismatch rate of 0.877207 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt. + +Suspected CORRUPT Containers: + Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379 + +Presumed GOOD Containers: + Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.008828/1047747 + Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395